Aplikační logiky raději méně nebo více? rubrika: Folklór
Občas se stane, že zákazník své požadavky nespecifikuje zcela přesně a můžeme se svobodně rozhodnout zda nějakou funkčnost uděláme jako součást aplikační logiky, či zda ji uděláme jako nějakou pomocnou nápovědnou funkci UI. Příklad:
Mějme klasickou aplikaci MVC, kde zákazník vytváří třeba nějakou kalkulaci (nebo fakturu). Tato kalkulace má rozpis položek, kde se z nějakého selectu/popupu vybírá z katalogu jaká položka to je a zadává se tam cena této položky. Nicméně v katalogu položek je u každé této položky uvedena jakási "výchozí cena", kterou obchodník tvořící kalkulaci použije "nenastanou-li specifické podmínky" (které nastávají dost často)
Požadavek podle mne lze řešit dvěma způsoby:
-
Patří to do aplikační logiky, tj. dám to do modelu. Takže zadání ceny (na formuláři) udělám nepovinné (v databázi cena je samozřejmě povinná je - tj. NOT NULL) a když ji obchodník nezadá tak tam prostě (v objektu řádek kalkulace / v triggeru) dám cenu z katalogu.
- Nepatří to do aplikační logiky, je to prostě jenom nějaká nápověda, která zpříjemní UI. Takže prostě, když obchodník ze selectu/popupu vybere položku z katalogu, tak rovnou vyplním (není-li vyplněna) javascriptem cenu.
Zákazníkovi je to jedno, které řešení bude zvoleno, programově jsou obě řešení triviální.
Nicméně rozdíl je v API modedu (jednou ta cena povinná je jednou ne), takže ten rozdíl určitě není úplně zanedbatelný. Rozdíl je třeba už v testování, pokud to nechám na UI, tak automatizované testy nejsou úplně triviální, kdežto v modelu to lze (aspoň podle mne) udělat snáz. Ruční testy jsou podle snadnější zase v UI, prostě na první pohled vidíme, zda se do políčka cena ta cena sepsala (a pokud nemusíme testovat vlastní save) tak je tím vlastně hotovo a není potřeba nic mockovat, či vracet db atd...
Moc neočekávám, že by se zadání během života aplikace změnilo a místo katalogové ceny se to přehodilo třeba na poslední fakturovanou cenu za toto zboží nebo za poslední fakturovanou cenu za toto zboží právě tímto obchodníkem, ale znáte to, zákazník má vždy pravdu a změní se vždy to co nečekáte...
Dali by jste to do doménové logiky nebo do UI? Kromě toho čemu byste dali přednost jako programátoři, tak klidně ohodnoťte i to čemu byste dali přednost jako uživatelé.
View by nemělo mít žádnou logiku kromě vzhledové (takovéto - když je tento checkbox odškrtnut, tak tento box schovej). "výzhozí cena" na mě působý jako nějaký datový prvek. Je to předpokládám reálná hodnota, třeba 42. Může (ale nemusí) se vypočítávat. Tudíž zodpovědnost za to by měl nést model.
Pro zobrazení všech 6 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře