Quoting Jiří Kotal <[EMAIL PROTECTED]>:
Tato citace (z definice třívrstvé architektury na Wikipedii) říká, že je
výhodné budovat systém tak, aby obsahoval co nejméně závislostí (částí
systému) a izoloval jednotlivé funkčnosti navzájem (jedna komponenta slouží
vždy pouze k jednomu účelu) - víme, že vše podléhá změně, a proto by měly
změny způsobit opravy co nejmenšího počtu míst v systému.
<<<<<<<<
Toto ma obecnou platnost a netyka se pouze trivrstve architektury.
Provazanost komponent (coupling) se snazime minimalizovat vzdy (nelze
ji ovsem uplne odstranit, protoze pak by nam zustaly izolovane
komponenty).
Take "jasne definovana zodpovednost" patri mezi osvedcene navrhove
principy. A to na urovni komponent i trid. Pokud ma trida zodpovednost
"Customer", nemela by mit soucasne i zodpovednost napr. "Account".
Zlepsuje to flexibilitu, tj. system lze snadneji prizpusobit. Tj.
presne jak pisete.
V reakci na toto sdělení jeden architekt uvedl:
Je to otázka optimismu či skepse při návrhu vnitřních rozhraní. Tato mají
smysl pokud jsou stabilní. Pokud každý nový zákazník přináší změny v těchto
rozhraních, pak je někdy lepší, když takováto rozhraní nejsou.
<<<<<<<<
Co byste takovému architektu odpověděli?
Pokud jde o to, zda ma ci nema cenu definovat interface ke tride, na
kterou se chceme odkazovat z jineho baliku, tak zalezi na konkretni
situaci.
Priklad:
package a;
public class A { }
package b;
public class B {
A p;
}
Trida B ma odkaz na tridu A, tj. mezi tridami je vazba. Lze ji
zeslabit zavedenim rozhrani:
package a;
public interface IA { }
class A implements IA { }
package b;
public class B {
IA p;
}
Pokud existuje byt i nepatrna moznost, ze bychom pridali jinou
implementaci rozhrani IA, napr.:
class A2 implements IA { }
pak je zavedeni rozhrani IA prinosem. Je potreba ovsem videt i
nevyhody: je to dalsi interface a navic pokud nechceme svazat tridu B
s konkretni implementaci rozhrani IA, je potreba zajistit nejakym
zpusobem inicializaci promenne p ve tride B (napr. pomoci navrhoveho
vzoru Factory method ci Abstract factory).
Moc nerozumim co je mysleno tim, ze "kazdy novy zakaznik prinasi zmeny
v techto rozhranich", takze na to nemuzu odpovedet. Jiste ale je, ze
rozhrani by mela byt pokud mozno stabilni.
Z.T.
--
Zdenek Tronicek
Department of Computer Science and Engineering
Prague tel: +420 2 2435 7410
http://cs.felk.cvut.cz/~tronicek