Visitor pattern.

Evidentně budete zasahovat do kódu, takže místo přidávání and cp a
boolean to udělat trochu jinak.

(Tady se da udelat i extends ale to se provaze s implementaci)

Extrahovat interface (IfaceA) ze současné struktury (StructA) - a přidat
druhou strukturu (StructB) která  implementuje tento interface také
(může i rožšiřovat StructA). 

Interface bude mít navíc metodu jako "setResults(ServiceInterface
serviceA)".

A service bude mít selectResult(IfaceA obj) která zavolá
Iface.setResults(this)

StructA.setResults(ServiceInterface service)
{
    service.selectResults(this); // v tomhle pripade uz "this" je plne
znamy typ
}

StructB.setResults(ServiceInterface service)
{
    service.selectResults(this); // v tomhle pripade uz "this" je plne
znamy typ
}

no a konecne v ServiceInterface bude mit

ServiceInterface.selectResult(Struct A) a
ServiceInterface.selectResult(Struct B)

Takhle nebudete mit zadny if else if else if a v budoucnu pokud pridate
StructC D E F G H
zasahnete kod ServiceInterface. Ono dokonce lze zdetit i
ServiceInterface na ServiceIterfaceCDEF

a v StructCDEF bude mit ServiceIterfaceCDEF - protoze Implementace zna
sebe diky "this" tak to bude dal fungovat. 

Testovani: pokud se zavede boolean (N=2) nebo int (N) a to k tomu kazda
dalsi stuktura (M) melo by se napsat NxM testu. Takhle 2xM. Tohle ma
spis ukazat tu vyhodnost.


Karel

A je to refactoring safe. Coz v pripade booleanu nebo intu neni

Naopak OOP bylo vymysleno tak aby se kod funkcni a odzkouseny pouzival
znova a znova a znova.



> > 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ů).


Reply via email to