Dobrý den,
rád bych se zeptal na Váš názor na objektově orientovaný návrh řešení mého problému. Jde mi o to že v OOP se sice nějakou dobu pohybuju, ale tento konkrétní problém se mi nedaři nějak smysluplně vyřešit.
Jde o následující problém:
- Mám jisté elementy (objekty) a zprávy, které těmto elementům posílám.
- Elementy jsou instance tříd, které jsou všechny odvozeny od jedné abstraktní "base" třídy a tuto třídu rozšiřují.
- Zprávy jsou taktéž instance tříd, které jsou všechny odvozeny od jedné abstraktní třídy zpráv a tuto třídu rozšiřují.
- Každá třída zpráv (mimo kořenové abstraktní třídy) má v sobě public abstraktní třídu "rozhraní" a pokud chci, aby elementu došla určitá konkrétní zpráva, musí element dědit a tím pádem implementovat toto rozhraní (v opačném případě, kdy pošlu zprávu tomuto elementu a třída elementu by toto rozhraní neimplementovala, se nic nestane).
- Požadavek je na to, aby bylo jednoduché přidávat nové zprávy i elementy (což by dosud nebyl problém, prostě se vytvoří nová třída, která bude dědit od předchozích...).
Problém je ale v tom, že je nutné zajistit určité chování zpráv - například vytvořím zprávu A, pošlu ji elementu X, a teď na základě nějakých podmínek (například, že jsem předchozí zprávu A poslal stejnému elementu) je nutné poslat zprávu B také tomuto elementu. Tento problém jsem řešil tak, že jsem každé zprávě přidal metodu pro "překlad" zprávy, která řešila tyto souvislosti. Pokud ale přidám nové třídy zprávy, je pravděpodobné, že budu muset upravovat tyto metody "překlad" již existujících tříd zpráv, což mi příjde určitě špatně a stejně tak se mi nezdá dobrá závislost tříd zpráv na sobě v tomto případě.
Napadlo mě vytvořit nějaký "controller" který by řešil tyto souvislosti, to mi ale také nepříjde v pořádku, jelikož by všechno zasílání zpráv bylo závislé na nějakém objektu controller, který by se s novými zprávami musel upravovat / měnit a tak podobně.
Pokud jsem to alespoň trochu objasnil, rád bych se tedy zeptal na Váš názor na tento návrh a řešení těch závislostí zmíněných výše a případně co je dle Vás špatně...
Děkuji
Lukáš