Pergunta

Estou procurando fazer algo assim

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){}
}

Então, no código do cliente, use -o como

productBiz.Rule1().Rule2();
productBiz.Rule2().Rule1();

OU

// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate

productBiz.ApplyRules(rulesetDelegate);

Só queria perguntar antes de mergulhar profundamente e me afogar.

Quais são as possíveis armadilhas com essa abordagem ???

desde já, obrigado

Foi útil?

Solução

Não tenho certeza do que você quer dizer com possível. Certamente é possível escrever um mecanismo de regras dessa maneira e você demonstrou um esboço de como conseguir isso.

Não se esqueça de que os métodos de extensão são apenas açúcar sintático sobre os métodos estáticos. Perguntar se você pode fazer X tipo de programação com métodos de extensão não é diferente de perguntar se você pode fazer X tipo de programação com métodos estáticos. Os métodos estáticos podem não parecer tão legais, mas são igualmente poderosos.

Outras dicas

Se você está olhando para mudar as regras em tempo de execução, pode considerar algo mais como Mef ou similar.

Sua solução está bem até você compilar, depois está definido e bloqueado, pelo som de seus comentários que você está procurando por flexibilidade em tempo de execução.

Veja a implementação de regras de negócios na CSLA http://lhotka.net/ . Na medida em que você define uma regra com uma assinatura específica e adicione -a ao armazenamento de regras do objeto, no nível de classe ou no nível da instância. A sintaxe do que você está tentando fazer é desanimador, mas o método (definindo regras de negócios por métodos estáticos que são executados no tempo de execução) é exatamente o que a CSLA faz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top