Schema di specifiche e principio di apertura chiusa

5

Sto studiando i principi SOLID e sto riscontrando alcuni problemi relativi al Pattern delle specifiche e all'apertura / principio chiuso.

Il fatto è che il pattern Specification introdotto da Eric Evans e Martin Fowlers crea un po 'di astrazione e un modo veramente aperto per gestire le regole aziendali.

Ma mi stavo chiedendo se fosse davvero basato sul principio Aperto / chiuso.

Il fatto è che, quando abbiamo bisogno di una nuova regola, possiamo estenderla dalla nostra classe di specifiche genitore. Quindi, è aperto in estensione, è un buon punto da un punto di vista SOLIDO.

D'altra parte, lo schema delle specifiche si basa sulla combinazione di regole, quindi dobbiamo modificare il codice delle regole, o almeno il codice della regola genitore. In questo modo, siamo aperti in modifica in una classe che, a mio avviso, non dovrebbe essere modificata.

Probabilmente mi sto rendendo conto di qualcosa in questo processo.

Qualcuno può spiegarmi:

  • In che modo (se è il caso) lo schema delle specifiche rispetta il principio OC?
  • Esiste un'alternativa a questo modello?
posta mfrachet 24.08.2016 - 19:18
fonte

2 risposte

2

I principi SOLID sono molto utili per scrivere componenti software riutilizzabili , come librerie o framework, e l'idea degli OCP è di crearli in un modo per evitare modifiche non necessarie in seguito, anche quando i requisiti sono estesi o cambiato.

Il modello di specifica, per quanto ho capito, riguarda la creazione di regole aziendali complesse da piccoli blocchi di regole . Quindi, per questo scenario, le parti riutilizzabili sono i blocchi di regole, non le stesse regole di business aggregate. E come hai detto tu stesso, lo schema delle specifiche ti fornisce un design in cui il set di blocchi di regole può essere facilmente esteso senza alcuna modifica ad altri building block o infrastrutture, quindi segue l'OCP.

Tuttavia, quando una regola aziendale complessa cambia, ovviamente devi cambiare qualcosa nel tuo sistema, e questa è ovviamente la parte in cui viene definita la regola aziendale. Non esiste un modello che possa impedire completamente la necessità di modifiche nel sistema quando le regole cambiano.

L'unica cosa che puoi fare qui è progettare il sistema in modo che la parte che deve essere cambiata non sia sepolta da qualche parte nel profondo del codice, ma spostata in un punto in cui può essere modificata cambiando una configurazione separata anziché. Ciò consente di spostare la responsabilità di cambiare in una certa misura dagli sviluppatori a qualcun altro, ad esempio all'utente del proprio sistema. In questo modo gli utenti possono creare o modificare regole aziendali complesse dagli elementi costitutivi che si forniscono per loro.

L'approccio tipico per questo è creare un DSL per questo in cui gli elementi DSL si riferiscono alle regole elementari e gli operatori che hai definito utilizzando il modello spec. Il codice DSL può quindi essere memorizzato in un file di configurazione che viene mantenuto o esteso da qualcuno che non è lo sviluppatore del sistema, forse un utente o un "utente esperto".

    
risposta data 27.08.2016 - 11:15
fonte
2

Mi è stato chiesto in uno dei commenti di fornire alcuni esempi di linguaggi basati su regole. I collegamenti qui elencano alcune lingue. Ho creato un linguaggio basato su regole personalizzate in passato, specifico per l'industria del controllo di processo. Puoi creare la tua lingua o usarne una esistente, ma è utile capire vari algoritmi se ne crei una tua:

Per me, la cosa più interessante di alcuni sistemi di regole, dal punto di vista dell'utente finale, è il modo in cui essi ripristinano automaticamente lo stato su un valore predefinito quando non si applica alcuna regola.

    
risposta data 31.08.2016 - 03:37
fonte