Можем ли мы использовать методы расширения для создания механизмов бизнес-правил?

Я ищу, чтобы сделать что-то вроде этого

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

Затем в клиентском коде используйте его как

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

OR

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

productBiz.ApplyRules(rulesetDelegate);

Просто хотел спросить, прежде чем я нырну глубоко и утону.

Каковы потенциальные ловушки с этим подходом???

заранее спасибо


person Perpetualcoder    schedule 07.10.2009    source источник
comment
Есть ли опечатка в вашем первом блоке кода? Должен ли второй Rule1 быть Rule2?   -  person MusiGenesis    schedule 07.10.2009


Ответы (3)


Я не уверен, что вы имеете в виду под возможным. Безусловно, таким образом можно написать механизм правил, и вы продемонстрировали схему того, как этого добиться.

Не забывайте, что методы расширения — это просто синтаксический сахар поверх статических методов. Спросить, можете ли вы программировать X-тип с помощью методов расширения, ничем не отличается от вопроса, можете ли вы программировать X-тип со статическими методами. Статические методы могут выглядеть не так красиво, но они не менее эффективны.

person JaredPar    schedule 07.10.2009

Если вы хотите изменить правила во время выполнения, возможно, вы захотите рассмотреть что-то более похожее на MEF. или похожие.

Ваше решение в порядке до тех пор, пока вы не скомпилируете его, а затем оно будет установлено и заблокировано, судя по вашим комментариям, вы ищете гибкость во время выполнения.

person Timothy Walters    schedule 07.10.2009
comment
у меня есть готовый релиз?? Я только что видел превью на сайте. хорошая идея, хотя - person Perpetualcoder; 07.10.2009

Посмотрите на реализацию бизнес-правил в CSLA http://lhotka.net/. В этом вы определяете правило с определенной подписью и добавляете его в хранилище правил объекта либо на уровне класса, либо на уровне экземпляра. Синтаксис того, что вы пытаетесь сделать, отталкивает, но метод (определение бизнес-правил с помощью статических методов, которые выполняются во время выполнения) — это именно то, что делает CSLA.

person chris.w.mclean    schedule 07.10.2009