Можем ли мы использовать методы расширения для создания механизмов бизнес-правил? - PullRequest
2 голосов
/ 07 октября 2009

Я хочу сделать что-то подобное

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 07 октября 2009

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

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

2 голосов
/ 07 октября 2009

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

2 голосов
/ 07 октября 2009

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

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

...