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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top