Sto scoprendo l'artigianato e sto cercando di impararlo, e ho deciso prima di tutto di capire come lavorare con i principi SOLID.
In realtà sto affrontando alcuni problemi mentre si tratta del principio Open / Closed.
Come sto lavorando
In effetti, di solito sto sviluppando applicazioni come le seguenti:
- Livello di presentazione con Angolare
- Livello aziendale con Node.js (utilizzando servizio / repository)
- A questo punto estraiamo il DAL, solo per scopi di apprendimento
In realtà, inserivo le mie regole aziendali nei miei servizi, utilizzando più if
e else
istruzioni. Ma il fatto è che sono davvero aperto alle modifiche ma non all'estensione in quel caso. Voglio cambiarlo, in modo buono e aperto.
Le mie regole
Facciamo un semplice esempio in cui nella mia domanda devo raccogliere un indirizzo mail che deve corrispondere alle seguenti regole aziendali:
- Il dominio dovrebbe essere esempio.com
- La prima parte dell'indirizzo e-mail dovrebbe contenere un "." come "firstname.lastname"
- La prima parte dell'indirizzo email deve essere inferiore a 100 caratteri
Come ho provato a ridefinire le mie istruzioni multiple if:
class BusinessMail{
checkMail(){
const ruleArray = []
ruleArray.push(new MailCheckDomain(mail))
ruleArray.push(new MailCheckLength(mail))
ruleArray.push(new MailCheckDot(mail))
for(const rule of ruleArray){
if(!rule.apply()) return false
}
return true
}
}
Proprio lì, sto lasciando le mie dichiarazioni if / else. Ma la mia funzione di controllo della posta è davvero aperta alle modifiche, perché se ho bisogno di avere una regola, devo averla nel mio corpo della funzione.
Un'altra soluzione sarebbe quella di iniettare il mio array nel mio servizio:
class BusinessMail {
constructor (mailRules = []) {
this.mailRules = mailRules
}
checkMail () {
for (const rule of this.mailRules) {
if (!rule.apply()) return false
}
return true
}
}
In questo modo, non sono obbligato a creare le mie regole all'interno del mio servizio.
Ma cosa succede se ho una grande quantità di materiale all'interno di questa classe? Voglio dire, il mio dominio aziendale è davvero piccolo in quel caso. Ma cosa succede se ho un servizio che deve controllare come 50 regole diverse, su diverse funzioni? Significa che probabilmente dovrei inizializzare più matrici di regole.
Non mi sento bene con questa soluzione e sto cercando qualcosa di meglio se possibile.
Qualcuno sa come dovrei fare questo per applicare il mio principio OP al mio livello aziendale senza questa sensazione di "mancanza di fiducia"?