Se incontriamo un caso in cui il nostro design, che utilizza un pattern specifico, non può soddisfare un nuovo requisito senza alcune modifiche, non significa che il pattern (non importa quale) sia cattivo e viola un buon design i principi.
Significa solo che il nostro design non è preparato per gestire con grazia tali casi.
Si tratta di un errore del nostro design iniziale?
In alcuni casi sì. Ma più spesso è un segno di uno dei due:
- Modifica dei requisiti.
- Conoscenza insufficiente del dominio.
Potresti e dovresti considerare attentamente il tuo progetto, ma non importa quanto sia adattivo il tuo sistema, una volta i requisiti cambieranno o alcune conoscenze oscure del dominio ti obbligheranno a cambiare anche il sistema più ben progettato.
È male che dobbiamo modificare il nostro sistema in questi casi?
Probabilmente no. Non è possibile progettare un sistema che possa essere esteso in qualsiasi modo possibile senza compromettere altri principi di buon design. Perché tali sistemi di solito sacrificano le prestazioni e (o) la facilità di comprensione.
È un divertimento colpevole leggere su sistemi troppo adattativi simili su thedailywtf , ma non si vuole finire per mantenere uno.
Non trasformerà il sistema in un Big Ball of Mud ?
Se tali modifiche verranno apportate senza alcuna considerazione sul design più grande, probabilmente sì. Ma se applichi tali modifiche con il dovuto impegno a riconsiderare e, possibilmente, a refactoring durante la fase di consolidamento allora sarai in grado di tenere sotto controllo l'entropia.
Quindi , il schema di comando viola il Open-Closed principle ?
No . Nella maggior parte dei casi sono i requisiti del sistema che rendono specifico l'uso di questo pattern non come open-closed come avremmo voluto che fosse.