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