Ik start dit topic omdat ik met een groot project bezig ga en alles toch even op een rijtje wil hebben. Ik zit over een paar dingen te twijfelen wat betreft best practices en dan is wat feedback of input van buitenaf wel gewenst.
Mijn ouders hebben een grote online winkel waar lego verkocht wordt (per blokje). Dit alles moet administratief vastgelegd worden in een grote database. Ze maken gebruik van dozen, die gemarkeerd worden met een nummer, waar vervolgens zakjes in komen te liggen die wederom gemarkeerd zijn met een nummer. Elk zakje is gevuld met een bepaalde lego blokje.
Een doos en een zakje moet je zien als een model in de database. Door op de doos en het zakje een labeltje te plakken met het nummer dat correspondeert met het object in de database kunnen orders gepikt worden en kan de voorraad bijgewerkt worden. Dat orders pikken gebeurd met behulp van een iPad.
Het concept betreft het administratief bijhouden van de voorraad ligt er dus - alleen nu moet de implementatie nog van de grond komen. Naast het bijhouden van de voorraad willen we ook de orders en andere zaken bijhouden in hetzelfde systeem, maar dat is een gedeelte waar ik mij later op wil richten. Ik zit nu eerst te denken bij de basics: is het verstandig dit native te ontwerpen, of toch als een web app.
Ik zie een aantal kansen, voordelen en nadelen. Ten eerste lijkt het me verstandig nog even toe te voegen dat we gebruik maken van een Brother label-printer (USB) zodat de labels voor de dozen en zakjes automatisch uitgeprint kunnen worden. Op dit moment loopt er al een basic invoersysteem, waarbij er op de client computer een simpel programma draait dat HTTP requests opvangt en parsed om ze door te sturen naar de label printer. Dat is op zich een werkende methode maar voelt niet heel stable aan, vooral omdat je bepaalde flags aan Chrome dient door te geven om via het invoersysteem, dat op een interne website staat, toestemming te geven requests naar localhost te sturen om labels uit te printen. Het voelt allemaal wat hacky aan en dat is het eigenlijk ook.
Het alternatief is dus om dan native te gaan: een applicatie ontwerpen in C# die communiceert met een API op de server om de database te manipuleren en data weer te geven. Een voordeel hiervan is natuurlijk dat het native is, geen hacks en wellicht logischer dan het draaien van een webbrowser en vage programmaatjes om de label printer werkend te krijgen. Door native te gaan kan je bepaalde onderdelen van het systeem, zoals dus bijvoorbeeld een label printer, simpelweg veel makkelijker aanspreken. Een nadeel is echter wel dat het een stuk minder flexibel is. Updates zijn lastiger uit te rollen, bijvoorbeeld. Alle client computers draaien wel in Active Directory waardoor de applicatie bij te werken is doormiddel van een Group Policy, maar een web app even refreshen is natuurlijk stukken simpeler. Daarnaast vind ik het persoonlijk fijner een interface in HTML e.d. te schrijven dan deze te moeten ontwerpen in (het toch wel wat striktere en wellicht beperktere) WinForms. Laat ik daar wel bij zeggen dat het voor mij alweer zo'n 5 jaar terug is dat ik op die manier een uitgebreide UI heb ontworpen, dus wellicht dat het allemaal wat flexibeler is nu.
Mijn laatste concern is dan nog of het slim is om ons te binden aan 1 platform. Het is een enorm project en als er eenmaal gekozen is om het native of web-based te doen, dan is dat bepaald en is er weinig meer aan te veranderen. Mochten we in de toekomst ervoor kiezen over te stappen naar Linux of OS X, dan zal de applicatie volledig moeten worden gepord als deze niet web-based geschreven is. Als we kiezen voor een web-based oplossing, hoeft enkel het printgedeelte native te worden geschreven. Dat is een stuk minder om te porten, mocht dat ooit nodig zijn.
Bij beide oplossingen zijn zowel voordelen als nadelen te noemen en ik heb dus graag jullie visie op dit probleem. Op het moment draaien alle client computers op Windows 8.1 en zitten ze in een domein, mocht dat een factor zijn.
Mijn ouders hebben een grote online winkel waar lego verkocht wordt (per blokje). Dit alles moet administratief vastgelegd worden in een grote database. Ze maken gebruik van dozen, die gemarkeerd worden met een nummer, waar vervolgens zakjes in komen te liggen die wederom gemarkeerd zijn met een nummer. Elk zakje is gevuld met een bepaalde lego blokje.
Een doos en een zakje moet je zien als een model in de database. Door op de doos en het zakje een labeltje te plakken met het nummer dat correspondeert met het object in de database kunnen orders gepikt worden en kan de voorraad bijgewerkt worden. Dat orders pikken gebeurd met behulp van een iPad.
Het concept betreft het administratief bijhouden van de voorraad ligt er dus - alleen nu moet de implementatie nog van de grond komen. Naast het bijhouden van de voorraad willen we ook de orders en andere zaken bijhouden in hetzelfde systeem, maar dat is een gedeelte waar ik mij later op wil richten. Ik zit nu eerst te denken bij de basics: is het verstandig dit native te ontwerpen, of toch als een web app.
Ik zie een aantal kansen, voordelen en nadelen. Ten eerste lijkt het me verstandig nog even toe te voegen dat we gebruik maken van een Brother label-printer (USB) zodat de labels voor de dozen en zakjes automatisch uitgeprint kunnen worden. Op dit moment loopt er al een basic invoersysteem, waarbij er op de client computer een simpel programma draait dat HTTP requests opvangt en parsed om ze door te sturen naar de label printer. Dat is op zich een werkende methode maar voelt niet heel stable aan, vooral omdat je bepaalde flags aan Chrome dient door te geven om via het invoersysteem, dat op een interne website staat, toestemming te geven requests naar localhost te sturen om labels uit te printen. Het voelt allemaal wat hacky aan en dat is het eigenlijk ook.
Het alternatief is dus om dan native te gaan: een applicatie ontwerpen in C# die communiceert met een API op de server om de database te manipuleren en data weer te geven. Een voordeel hiervan is natuurlijk dat het native is, geen hacks en wellicht logischer dan het draaien van een webbrowser en vage programmaatjes om de label printer werkend te krijgen. Door native te gaan kan je bepaalde onderdelen van het systeem, zoals dus bijvoorbeeld een label printer, simpelweg veel makkelijker aanspreken. Een nadeel is echter wel dat het een stuk minder flexibel is. Updates zijn lastiger uit te rollen, bijvoorbeeld. Alle client computers draaien wel in Active Directory waardoor de applicatie bij te werken is doormiddel van een Group Policy, maar een web app even refreshen is natuurlijk stukken simpeler. Daarnaast vind ik het persoonlijk fijner een interface in HTML e.d. te schrijven dan deze te moeten ontwerpen in (het toch wel wat striktere en wellicht beperktere) WinForms. Laat ik daar wel bij zeggen dat het voor mij alweer zo'n 5 jaar terug is dat ik op die manier een uitgebreide UI heb ontworpen, dus wellicht dat het allemaal wat flexibeler is nu.
Mijn laatste concern is dan nog of het slim is om ons te binden aan 1 platform. Het is een enorm project en als er eenmaal gekozen is om het native of web-based te doen, dan is dat bepaald en is er weinig meer aan te veranderen. Mochten we in de toekomst ervoor kiezen over te stappen naar Linux of OS X, dan zal de applicatie volledig moeten worden gepord als deze niet web-based geschreven is. Als we kiezen voor een web-based oplossing, hoeft enkel het printgedeelte native te worden geschreven. Dat is een stuk minder om te porten, mocht dat ooit nodig zijn.
Bij beide oplossingen zijn zowel voordelen als nadelen te noemen en ik heb dus graag jullie visie op dit probleem. Op het moment draaien alle client computers op Windows 8.1 en zitten ze in een domein, mocht dat een factor zijn.