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

2

Я хочу сделать что-то вроде этого

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();

ИЛИ

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

productBiz.ApplyRules(rulesetDelegate);

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

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

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

  • 2
    Есть ли опечатка в вашем первом блоке кода? Должно ли второе Rule1 действительно быть Rule2 ?
  • 0
    thanks..corrected
Теги:
business-objects
business-rules
rule-engine
business-logic-layer

3 ответа

2
Лучший ответ

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

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

2

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

2

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

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

  • 0
    у меня есть готовый релиз? Я только что видел предварительный просмотр на сайте. хорошая идея, хотя

Ещё вопросы

Сообщество Overcoder
Наверх
Меню