Zdravím,
dostal jsem se do poměrně zapeklité situace a rád bych znal váš názor.
Mám poměrně hodněvrstvou aplikaci (kvůli čitelnosti a spravovatelnosti
a rozšiřitelnosti).
Mám implementovanou poměrně hodně složitou logiku vyhledávání, která
funguje poměrně dobře,
přijímá parametry, které má, vrací struktury, které má, prostě paráda.
Jenomže zničehož nic potřebuji nemlich stejnou funkcionalitu ale s
přidáním drobných statistik. Hodně uvnitř ve střevech potřebuji přidat
count(*), min(*),max (*), avg(*) jako další sloupce SQL selectu za
přidání několika podmínek. Ony hodnoty pro původní nasazení nemají
žádný význam.
Otázka zní: jak z toho ven?

a) kompletně zduplikovat kód a přidat patřičné rozšiřující parametry a
návratovou strukturu
b) zavolat původní vyhledávání a na základě výsledků doplnit ony
výpočty separátním kódem. Má to ale háček. Dostat se k výsledkům onoho
selectu na základě použití předešlého vyhledávání nelze nijak
jednoduše,
znamenalo by to implementaci poloviny předchozího vyhledávání, takže
opět Copy&Paste, protože refactoring půjde těžko provést - datová
struktura, kterou by bylo třeba vykostit, se táhne celým kódem jako
červená nit. Navíc díky onomu "dvojímu volání téže funkcionality",
jednou při vyhledávání a podruhé při reportu, snižuji výkon aplikace.
c) rozšířit stávající návratové struktury a přidat parametry a
rozšířit implementaci onoho vyhledávání - pak ale zneužívám kód k
něčemu jinému, předávání více dat, než je nezbytně nutné a hlavně
statistické výpočty jsou volané i tehdy, kdy je volat netřeba -
tisíckrát za sekundu místo 1 x za pět minut.
d) pro omezení zbytečného výpočtu statistik v c) přidat do volání API
boolean (nebo raději int pro více možných stavů) parametr udávající,
zda výpočty volat či nikoli (rozhodování může to být řešeno dědičností
konkrétní datové struktury, ale to je pořád onen boolean či int a s
ním někde svázaný switch či kupa ifů).
e) SQL přidat přímo do implementace jednotlivých beanů, ale
bean-managed persistence není zrovna to, co dělám rád, ale hlavně si
nejsem jist, zda by to úplně řešilo onen problém - opět je tu
copy&paste A onen boolean...

Ani jedno se mi nelíbí, ale pěkné řešení mne nenapadá. Jak toto řešíte vy?
-- 
Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com

Odpovedet emailem