Possiamo utilizzare i Metodi di Estensione per la costruzione di regole di business dei motori?
-
20-09-2019 - |
Domanda
Sto cercando di fare qualcosa di simile a questo
public class ProductBiz: BizBase<Product> {
public List<String> BrokenRules {get;set;}
// Some kind of data + biz operation implementation
}
public static class ProductBizExtensions{
public ProductBiz Rule1(this ProductBiz prodBiz)
{}
public ProductBiz Rule2(this ProductBiz prodBiz)
{}
public bool ApplyRules (this ProductBiz prodBiz, Func<ProductBiz,bool> ruleset){}
}
Poi nel codice del client di utilizzare come
productBiz.Rule1().Rule2();
productBiz.Rule2().Rule1();
O
// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate
productBiz.ApplyRules(rulesetDelegate);
Volevo solo chiedere prima di immergersi in profondità e annegare.
Quali sono i potenziali problemi con questo approccio???
Grazie in anticipo
Soluzione
Non sono sicuro di cosa si intende per possibile.È certamente possibile scrivere un motore di regole in questo modo e hai demo avevo uno schema di come raggiungere questo obiettivo.
Non dimenticate che i metodi di estensione sono solo " zucchero sintattico sulla cima di metodi statici.Chiede se si può fare X tipo di programmazione con i metodi di estensione non è diverso da quello che chiede se si può fare X tipo di programmazione con i metodi statici.I metodi statici possono non sembrare bello, ma sono altrettanto potenti.
Altri suggerimenti
Se stai cercando di cambiare le regole a run-time, allora si potrebbe desiderare di prendere in considerazione qualcosa di più simile a MEF o simili.
La tua soluzione va bene fino fino a quando si compila, quindi è impostato e bloccato, dal suono dei tuoi commenti stai cercando di run-time, flessibilità.
All'attuazione delle norme in CSLA http://lhotka.net/ .In quella che si definisce una regola di w/ un particolare firma, e aggiungere in oggetto regola store, sia a livello di classe o livello di istanza.La sintassi di ciò che si sta tentando di fare è scoraggiante, ma il metodo (la definizione di regole di business attraverso metodi statici che vengono eseguiti in fase di esecuzione) è esattamente quello che CSLA fa.