Jeden projekt pro více zákazníků

Krtek + Krtek

Jeden projekt pro více zákazníků
« kdy: 03. 08. 2012, 13:40:08 »
Zdravim,

chystam se na jeden projekt (webova applikace v Jave), pricemz pro tuto aplikaci budu mit nekolik zakazniku v radu jednotek (5 - 10 zakazniku). Pro kazdeho zakaznika bude aplikace bezet na jemu vyhrazenych serverech (tyto servery budu mit ve sve sprave ja, zakaznici budou pouzivat pouze danou aplikaci). A jedna se mi o to, co je "best practice" pro vyvoj takoveto aplikace, kde priblizne 90% kodu bude spolecneho pro vsechny zakazniky a tech zbyvajicich 10% kodu budou specifika jednotlivych zakazniku.
Zajima me treba jak se nejlip popasovat s drobnymi odchylkami databazoveho schematu (napr. nutnost pro nektereho zakaznika evidovat navic nektere attributy urcitych entit z duvodu mistni legislativy apod.). ORM framework chci pouzit JPA z cehoz vyplyva urcita zavislost Javovskych trid mezi sebou. Moje idea zatim je takova, ze pro tech specifickych 10% kodu na zakaznika bych narval do oddeleneho jar souboru, pricemz pri deployi aplikace pro daneho zakaznika by se takto pribalil jeho specificky jar soubor.
Na buildovani projektu chci vyuzit Maven a pocitam ze s vyuzitim profilu by toho mohlo jit dosahnout.
Dalsi vec je repository se source codem (svn?, git?) a bug fixing, pripadne vytvareni novych features prave v te spolecne casti kodu? Vidite zde nejaka uskali a ktery z danych nastroju je podle vas vhodnejsi? Bohuzel ja sam mam zkusenosti pouze s svn, takze nemuzu moc porovnavat.
Diky za odpovedi.
« Poslední změna: 03. 08. 2012, 14:36:26 od Petr Krčmář »


Re:Project management - 1 projekt, vice zakazniku
« Odpověď #1 kdy: 03. 08. 2012, 13:54:55 »
javu neznam, reknu jedine: svn pro novy projekt je nesmysl (pokud to nema dlouhodobou historii ve firme, napojeni na infrastrukturu a tak.)
Děkuji za možnost editace příspěvku.

Re:Project management - 1 projekt, vice zakazniku
« Odpověď #2 kdy: 03. 08. 2012, 13:59:44 »
Jak to nejlíp řešit v javě neporadím, ale co se týče VCS, v gitu se branchování, mergování apod. dělá hodně dobře, včetně rebase a cherrypick* a díky jednoduchosti formátu je to krásně přehledný.

Se SVN porovnat neumím, ale git mi přijde jako hodně dobrej nástroj, se kterým se pěkně pracuje, včetně případnýho ručního vrtání se v jeho vnitřnostech (v případě, že nevím, jak něco udělat automaticky, potřebuju něco ručně opravit atd...).

Myslím, že s GITem neprohloupíš :)

*
http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html
http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html


none_

Re:Jeden projekt pro více zákazníků
« Odpověď #3 kdy: 03. 08. 2012, 15:26:14 »
S tím programováním je to vždycky těžký. Záleží na tom, jak moc se toho liší mezi těmi klienty. Pokud je to alespoň v jedné specifické oblasti, tak by to mělo být v pohodě. Pokud se každý bude lišit v něčem jiném, tak jsi v pytli.

Jinak to s těma jar-kama je podle mě správná cesta. Konkrétní implementace záleží na tom, jestli se liší v nějaké službě nebo mají specifickou celou část od DB po View. Takhle bez dalších informací se nedá víc říct.

Re:Jeden projekt pro více zákazníků
« Odpověď #4 kdy: 03. 08. 2012, 15:27:05 »
ja jsem obcas donucen neco s SVN delat, bohuzel :o . uz ve dvou vyvojarich mame obcas problem. s gitem je to uplne jinde.
Děkuji za možnost editace příspěvku.


Ivan

Re:Jeden projekt pro více zákazníků
« Odpověď #5 kdy: 03. 08. 2012, 16:05:59 »
Pokud zacinas, tak bych doporucil git. Na verzovani db schematu se poduk mozno vykaslej. Je to spousta prace a navic budes muset resit modifikace stavajich dat, pri zmene DB struktury. Urcite si usetris spoustu casu pokud navrhnes DB schema dostatecne univerzalni aby mohlo slouzit vsem zakaznikum najednou.

Krtek + Krtek

Re:Jeden projekt pro více zákazníků
« Odpověď #6 kdy: 03. 08. 2012, 18:10:12 »
Tak na git jsem slysel/cet spoustu chvaly oproti svn, takze se v nem chci trochu pohrabat tak jako tak (diky za linky, kouknu na to).
Co se db tyka, tak pocitam, ze velka vetsina struktury dat bude spolecna, nimene jak jsem psal, z duvodu mistni legislativy ocekavam drobne rozdily v podobe sem tam nakyho atributu na tabulku navic. Pak se totiz nejedna jen o tu db, ale souvisi s tim i "drobna" odlisnost ve view (nejake fieldy navic ve formulari, jejich validace apod. + sem tam nejake to tlacitko navic pro urciteho zakaznika). Ale ocekavam opravdu odlisnost jen v detailech. Jelikoz se dany projek teprve chystam vytvorit, tak by me prave zajimalo predem jak se vyporadat s temito drobnymi odlisnostmi pro urcite zakazniky, jak nastavit strukturu projektu, abych s tim uz pocital dopredu, protoze ty odlisnosti urcite vzniknou, a nesnazil se to nejak haluzove napasovat pozdeji az teprve vznikne nejaky problem.

Ok, abych to trochu zkonkretizoval, tak uvedu priklad, kterej me ted rychle napadnul:
Mam dva zakazniky A a B. A potrebuje evidovat osoby (jmeno, datum narozeni). B potrebuje evidovat taky osoby (jmeno, datum narozeni a rodne cislo).
No, a ted mi jde o to, jak se jednoduse vyporadat jednak v Jave a jednak v gui (html) s timhle drobnym rozdilem v podobe rodneho cisla. Nedej boze, abych mel zakaznika C, kterej potrebuje evidovat osoby (jmeno, datum narozeni a taky rodny cislo, ale uplne jinej format rodneho cisla nez zakaznik B).
Je to sice rozdil pouze v jednom jedinym atributu, ale ma to vliv jak na Javovej kod, tak na generovani html vystupu, tak na validaci vstupnich dat od uzivatele. Fakt mi z toho jde hlava kolem a moc nevim jak se s tim poprat, abych se do toho zbytecne moc nezamotl..

nohous

Re:Jeden projekt pro více zákazníků
« Odpověď #7 kdy: 03. 08. 2012, 18:27:47 »
Ok, abych to trochu zkonkretizoval, tak uvedu priklad, kterej me ted rychle napadnul:
Mam dva zakazniky A a B. A potrebuje evidovat osoby (jmeno, datum narozeni). B potrebuje evidovat taky osoby (jmeno, datum narozeni a rodne cislo).
No, a ted mi jde o to, jak se jednoduse vyporadat jednak v Jave a jednak v gui (html) s timhle drobnym rozdilem v podobe rodneho cisla. Nedej boze, abych mel zakaznika C, kterej potrebuje evidovat osoby (jmeno, datum narozeni a taky rodny cislo, ale uplne jinej format rodneho cisla nez zakaznik B).
Je to sice rozdil pouze v jednom jedinym atributu, ale ma to vliv jak na Javovej kod, tak na generovani html vystupu, tak na validaci vstupnich dat od uzivatele. Fakt mi z toho jde hlava kolem a moc nevim jak se s tim poprat, abych se do toho zbytecne moc nezamotl..

Jestli jsou rozdili takhle trivialni, tak drz kod spolecnej - bude umet vsechno a pro konkretni zakazniky budes featury disablovat compile-time nejakym "#define" (ja vim, java), pripadne parametrem v nastaveni.

Ivan

Re:Jeden projekt pro více zákazníků
« Odpověď #8 kdy: 03. 08. 2012, 19:04:04 »
Tak na git jsem slysel/cet spoustu chvaly oproti svn, takze se v nem chci trochu pohrabat tak jako tak (diky za linky, kouknu na to).
Co se db tyka, tak pocitam, ze velka vetsina struktury dat bude spolecna, nimene jak jsem psal, z duvodu mistni legislativy ocekavam drobne rozdily v podobe sem tam nakyho atributu na tabulku navic. Pak se totiz nejedna jen o tu db, ale souvisi s tim i "drobna" odlisnost ve view (nejake fieldy navic ve formulari, jejich validace apod. + sem tam nejake to tlacitko navic pro urciteho zakaznika). Ale ocekavam opravdu odlisnost jen v detailech. Jelikoz se dany projek teprve chystam vytvorit, tak by me prave zajimalo predem jak se vyporadat s temito drobnymi odlisnostmi pro urcite zakazniky, jak nastavit strukturu projektu, abych s tim uz pocital dopredu, protoze ty odlisnosti urcite vzniknou, a nesnazil se to nejak haluzove napasovat pozdeji az teprve vznikne nejaky problem.

Ok, abych to trochu zkonkretizoval, tak uvedu priklad, kterej me ted rychle napadnul:
Mam dva zakazniky A a B. A potrebuje evidovat osoby (jmeno, datum narozeni). B potrebuje evidovat taky osoby (jmeno, datum narozeni a rodne cislo).
No, a ted mi jde o to, jak se jednoduse vyporadat jednak v Jave a jednak v gui (html) s timhle drobnym rozdilem v podobe rodneho cisla. Nedej boze, abych mel zakaznika C, kterej potrebuje evidovat osoby (jmeno, datum narozeni a taky rodny cislo, ale uplne jinej format rodneho cisla nez zakaznik B).
Je to sice rozdil pouze v jednom jedinym atributu, ale ma to vliv jak na Javovej kod, tak na generovani html vystupu, tak na validaci vstupnich dat od uzivatele. Fakt mi z toho jde hlava kolem a moc nevim jak se s tim poprat, abych se do toho zbytecne moc nezamotl..

Pokud jde o neco takovyho tak bych - alespon na neco - doporucil pouzit EAV. Zvlast jestli ta DB bude mala.
Takze budes mit tabulku PERSON s pevnyma sloupcema a pak tabulku CUSTOMER_PERSON_DETAIL
kde bude "PERSON_ID", "DETAIL_NAME", "DETAIL_VALUE". Dulezity je aby ty pridavny atributy nebyly soucasti PK ani FK.
Jakmile budes mit u ruznych zakazniku ruznou verzi DB schematu tak se z toho drive nebo pozdeji zblaznis.
Po par aktualizacich uz ani nebudes tusit, v jakym poradi jsou ktery sloupecky u kteryho zakaznika.

Videl jsem i systemy, kde se DB schema generovalo primo z objektoveho modelu aplikace. Po par letech to ale vetsinou skouncilo.
Jakmile mas v produkcni databazi nekolik GB dat, tak musis zmeny ve schematu resit "rucne" a chytre - zadny tool ti nepomuze.

Kit

Re:Jeden projekt pro více zákazníků
« Odpověď #9 kdy: 03. 08. 2012, 21:09:30 »
Mam dva zakazniky A a B. A potrebuje evidovat osoby (jmeno, datum narozeni). B potrebuje evidovat taky osoby (jmeno, datum narozeni a rodne cislo)...

Udělej si další tabulku, do které si uložíš konfiguraci daného zákazníka. Ve Factory si nejprve načteš tuto konfiguraci a podle ní vyrobíš ty správné objekty.