[ alfa-pro @ 20.02.2016. 14:18 ] @
| Odneo vrag salu...
Pre tri do cetiri godine sa kolegom sam radio OMS software koji je stvarno dobar ali ispod haube nije bas onako kako sam zamisljao.
Nisam koristio design patterne vec samo kroz forme i po koju klasu koju sam pisao za loggere, db itd.
Kada klijen kupi osnovni paket on obije osnovne stvari na programu i ima mogucnost da dokupi dodatke kao sto su finansije, obracuni itd...
Moja neka zamisao u to vreme kad sam pisao program je bila da izbegnem komplikacije i da ne ulazim previse u komplikovan kod koriscenja
module i plugin aritekture jer nisam bio dovoljno strucan da odvojim program u delove na solucije u VS. Svaki dodatak je posebna solucija koja se povezuje pomocu reference.
Da bi problem bio jos veci nakon godinu dana marketinga mi smo skupili nekih 14 klijenata i svaki klijent se i dan danas javlja da mu se doda nesto novo na programu
jer oni prate trenutno trziste i moraju non stop da dodaju nove opcije. Da bi ja to uradio ja sam pravio updejtove gde je novi .exe fajl koji klijent pomocu FTP-a preuzme i
instalira na svoj racunar. Malo je to glupo i predugo traje a i sam pristup je glup.
Problem u svemu ovome je sto sam 90% dnevno na telefonu sa klijetima, daj ovo, dodaj ono, izmeni ovo i tako meni ceo dan, dva do tri ode oko jedne sitnice.
Posto sada sam upoznat u problematiku i imam vise iskustva u c# ,moja ideja je da objavim novo verziju gde cu pisati kod od nule pa mi je potreban savet od
iskusnijih programera koji su radili na vecim projektima da me upute kako bi najbolje bilo da organizujem sve to. Da kada neki klijent trazi da se nesto doradi
da to ne oduzima previse vremna, da sam program moze lako da se prosiri uz samo jedan update...
Hvala vam na svakom predlogu. |
[ jablan @ 20.02.2016. 22:23 ] @
Veb aplikacija i subscription model?
[ alfa-pro @ 20.02.2016. 23:38 ] @
Nije app za web, nisam napomenuo u poruci moja greska. U pitanju je Desktop App pisana u C# takodje i podrzava POS sistem za stampanje fiskalnih racuna.
[ jablan @ 21.02.2016. 06:51 ] @
Pa ako pišeš kod od nule, onda može da bude, ne?
[ alfa-pro @ 21.02.2016. 12:09 ] @
Pa planiram da ga opet napisem od nule ali mi je potreban savet strucnijeg lica kako najbolje organizovati sve to.
Bas juce nesto razmisljam u programu imam brdo naloga koji se popunjavaju (Nalog za uplatu, isplatu, blagajnu, Ni obrazci itd) i u svakom novom modulu sam pisao
ponovo taj nalog kad god mi je trebao. Jel bi ja mogao da napravim jedan interface ili abstraktnu klasu Obrazac i da definisem metode i clanove koje oni dele i da se razlikuju samo po tipu, jer svaki obrazac ima neka dodatna polja. Hteo bi da izbegnem DRY
[ dusans @ 21.02.2016. 12:58 ] @
Možeš tako kako si napisao - ako je filozofija i struktura različitih tipova naloga slična - poželjan pristup.
"Hteo bi da izbegnem DRY" -> mislio si na -> "Hteo bih da primenim DRY princip".
Nemoj da se držiš DRY principa kao pijan plota pošto će ti u nekim situacijama otežati
i bezpotrebno zakomplikovati rešenje.
Prvo gledaj da napraviš dobro rešenje koje ispravno radi pa tek onda refactoring
u DRY do određene-smislene mere.
Isto tako, izbegavaj više od tri nivoa nasleđivanja - usložnjavaju rešenje
i obično debelo otežavaju kasnija proširenja.
Manje, nezavisne, dobro dizajnirane komponente koje se kombinuju u use-case-u su mnogo bolje
od složenih-super-komponenti do kojih si došao specijalizacijom putem nasleđivanja.
Inače, ako praviš desktop aplikaciju, postoji ClickOnce deployment mehanizam,
vrlo je prost i lak za implementaciju. Međutim, ostaje problem upgrade-a
baze podataka kod klijenta koji moraš da radiš ili manuelno ili custom procesom.
[ alfa-pro @ 21.02.2016. 18:27 ] @
Pa u sustini ja se od MySQL-a ne odvajam. Imam svoj server za back-upove koji svakog dana u 23h automacki rade backup.
Ako su klijenti sa jednom radnjom ili dve njih stavljam na VPS dok klijente koji imaju po desetak radnji i vise magacina stavljam na posebnu dedicated masinu.
Baza ko baza, komplikovanije stvari sam radio kroz store procedure i dosta na programu moze da se izmeni kroz bazu online.
Sto se tice ClickOnce mehanizma nisam ga nikada koristio. Dugo sam se bavio Web dizajnom i pokusavao sam da implementujem MVC pattern.
Hteo sam da pojednostavim logiku modularnosti. Jel bi ja mogao npr da napravim neki dir nazovem ga modules i kada ocu neki modul da dodam ja napravim novu
soluciju koju kompajliram kao dll lib i da je pomocu assebly samo ucitam? I to da mi bude kao modul? Ali opet sada dali to ide sve u runtime i koliki je live tog modula?
Nesto sam gledao da PRISM na WPF-u ima podrsku za modularnost.
[ Shadowed @ 21.02.2016. 19:17 ] @
Citat: alfa-pro: Hteo sam da pojednostavim logiku modularnosti. Jel bi ja mogao npr da napravim neki dir nazovem ga modules i kada ocu neki modul da dodam ja napravim novu
soluciju koju kompajliram kao dll lib i da je pomocu assebly samo ucitam? I to da mi bude kao modul? Ali opet sada dali to ide sve u runtime i koliki je live tog modula?
Mozes. Napravi poseban projekat koji ce imati interfejse koji definisu sta plugin/modeul mora da ima. Onda referenciraj taj projekat u svom glavnom projektu. Plugin pravis tako sto u zasebnom projektu (sve jedno da li je isti solution ili ne) referenciras projekat sa interfejsima i implementiras interfejs.
Onda u svojoj aplikaciji preko refleskije ucitas assembly iz dll-a i nadjes klase koje implementiraju interfejse i instanciras. I.. voila :)
U projektu sa interfejsima definises i interfejs svega sto ces iz glavne aplikacije davati plugin-u. Tako sama glavna aplikacija i plugin uopste nisu zavisni jedan od drugog vec samo od projekta sa interfejsima. On im dodje kao neki ugovor.
[ alfa-pro @ 21.02.2016. 20:27 ] @
Da jasno mi je to da moram da imam neki inteface da im napravim neka pravila sta moraju da imaju da bi ispostovali ugovor(Inerface).
Cek a sto se tice live time modula koji se ucita putem assemply? Ja u sustini sam mislio da kad instaliram novi modul da ga povezem sa bazom npr u tabeli modules da imam koji su instalirani i koji nisu. I na osnovu baze podataka ako taj modul postoji onda da ucitam sve module koji nasledjuju IModule inteface. Pomocu assembly.load da ga ucitam ako upit vrati true...
Pa nesto cu skarabudzim samo da bude bolje od trenutne verzije.
[ Shadowed @ 21.02.2016. 21:42 ] @
Pa, mozes. Ti mozes informacije o plugin-u dobiti kako zelis, bilo iz baze, bilo citanjem sadrzaja direktorijuma, bilo na neki treci nacin.
[ dusans @ 22.02.2016. 10:07 ] @
Citat:
Cek a sto se tice live time modula koji se ucita putem assemply?
Jednom učitan assembly (modul) živi dokle god je živ proces koji ga je učitao.
Ne postoji mogućnost da ga unload-uješ niti da recimo promeniš-obrišeš
nejgov dll na disku dokle god stoji učitan u nekom procesu.
Ovakvo ponašanje je by-design i tu ne možeš ništa. Hot-patch je nemoguć.
[ mmix @ 22.02.2016. 10:30 ] @
Cisto radi rasprave, postoji mogucnost i za temp module ako si spreman da prihvatis mali penal u performansama. Istina, asembliji koji su ucitani ostaju u memoriji procesa do kraja, ali to ne znaci da ne mozes da pokrenes koliko hoces procesa, mozes da napravis process wrapper za asembli i da njega lansiras kao skriveni podprocess, i onda sa njim komuniciras preko nekog mehanizma (recimo WCF preko named pipes). Ako treba da zamenis neki plug-in, oboris taj process i startujes novi wrapper sa novim asemblijem.
[ ravni @ 22.02.2016. 11:32 ] @
Ne bih da budem kvaritelj raspolozenja, ali ne vidim kako ce ti plaginovi i moduli resiti problem sto si 90% dana na telefonu.
Pogotovo ako krenes da pises program od nule, tada ces imati jos manje vremena. Pre nego sto krenes u taj poduhvat, obavezno procitaj
http://www.joelonsoftware.com/articles/fog0000000069.html
Koliko sam shvatio, glavni problem je sto se funkcionalnosti ponavljaju u 'dodacima' osnovne verzije tvog softvera. Mozda je za tebe bas resenje da napravis monolitni softver, a onda ogranicis koriscenje delova softvera licencom, umesto fizicke, time sto exe/dll nije isporucen.
Takodje, ClickOnce je super dok radi. Kad ne radi, ili ti treba nesto sto on ne podrzava out-of-the-box onda bas ume da smara.
[ alfa-pro @ 24.02.2016. 22:25 ] @
@RAVNI
Kod men je u kodu ista prica kao sa linka koji si mi preporucio
Citat: It’s harder to read code than to write it.
Nazalost ali tako je...
Pa zbog toga sto sam 90% na telefonu sa klijentima i zelim da odradim novu verziju da ne bude vise takvih sitnica i problema.
Vec sam dosta upucen u problematiku i potrazivanja klijenata i tako da znam kako sada da postupim. Te njihove potraznje dodaj ovo skloni ono sam razmisljao da sredim pomocu plugin arhitekture. Napravim module koji ce biti osnova nekog dela a plugin da bude zakacen na dati modul. I sada mene neko zove e aj dodaj ovo izmeni ovo ja vec unapred uradjene pluginove samo dodam pomocu update za odredjenu licencu na tom racunaru i eto promenim stvari ocas posla. To je neka moja prica pa sam hteo da vidim sa vama. Vidim ima dosta iskusnih momaka koji mi mogu stvano dobar savet da mi pruze. Dosada sam vam stvarno zahvalan na ovoliko odgovora..
Trenutna verzija ispod haube je nedaj ti boze... da bi nesto izmenio moram da jurim forme i pomocu forme da vatam evente u kodu itd. SQL upiti takodje u istom fajlu.
Tako da sada sa novom verzijom imam u planu da uvedem ORM. Lakse mi sa objektima da baratam
[ ravni @ 25.02.2016. 08:49 ] @
Jos koja rec o plugin pristupu. Za mnoge situacije ti je verovatno overkill dinamicko ucitavanje asemblija, dovoljno je samo (na osnovu nekog parametra) instancirati klasu koja implementira odredjenu strategiju resenja problema.
U svakom slucaju, ako krenes iznova, mozda bi ti valjalo da napravis mini pilot projekat kao test da vidis koje probleme ti resava a koje nove donosi. Npr, ORM je super ideja, ali ce ti mozda uvesti neke svoje bubice.
Onda bi mogao da ekstrapoliras koliko vremena ce ti trebati za celu aplikaciju.
[ alfa-pro @ 25.02.2016. 20:11 ] @
off
Gledajuci po onom tekstu sa linka stvarno se sada i plasim da krenem od nule :D
Mnogo veci giganti popum MS-a su napravili slicnu gresku. Oni su bar veliki i imaju cime da se pokriju a sta ja mogu da sednem i da placem. Da izgubim i ovo malo prihoda :D
[ Shadowed @ 25.02.2016. 22:23 ] @
Ima ih onih koji su gresili krecuci od nule. Ali nije greska u kretanju od nule, nego u proceni da li je u toj konkretnoj situaciji trebalo krenuti od nule. I ta greska moze da ide u oba smera (da krenes od nule a nije trebalo ali moze da se desi i da to ne uradis a da je trebalo).
[ stankons @ 26.07.2016. 13:27 ] @
MEF (ili Prism) i Dependency injection?
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|