2

나는 그냥 내가 깊은 다이빙 익사하기 전에 물어보고 싶은게비즈니스 규칙 엔진을 빌드 할 때 확장 메소드를 사용할 수 있습니까?

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

또는

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

productBiz.ApplyRules(rulesetDelegate); 

으로 사용하는 클라이언트 코드에서 다음이

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

같은 것을 할을 찾고 있습니다.

이 방법으로 잠재적 인 함정은 무엇입니까 ???

미리 감사드립니다.

+2

첫 번째 코드 블록에 오타가 있습니까? 두 번째 Rule1은 실제로 Rule2일까요? – MusiGenesis

+0

thanks..corrected – Perpetualcoder

답변

2

나는 무엇을 의미하는지 확신하지 못합니다. 이런 식으로 규칙 엔진을 작성하는 것은 가능하며이를 달성하는 방법에 대한 개요를 demo'd했습니다.

확장 메서드가 정적 메서드 위에 구문 방식의 설탕임을 잊지 마십시오. 확장 메소드로 X 유형의 프로그래밍을 할 수 있는지 묻는 것은 정적 메소드로 X 유형의 프로그래밍을 할 수 있는지 묻는 것과 다릅니다. 정적 메서드는 멋지게 보이지 않을 수도 있지만 강력합니다.

2

런타임에 규칙을 변경하려는 경우 MEF 또는 그와 비슷한 것을 고려할 수 있습니다.

솔루션을 컴파일 할 때까지 문제가 없으며 실행 시간 유연성을 원하는 의견의 소리에서 설정되고 잠겨 있습니다.

+0

준비된 출시 준비가되어 있습니까 ?? 방금 사이트에서 미리보기를 보았습니다. 그래도 좋은 생각이야. – Perpetualcoder

2

CSLA http://lhotka.net/의 비즈니스 규칙 구현을 살펴보십시오. 특정 서명이있는 규칙을 정의하고 클래스 레벨 또는 인스턴스 레벨에서 오브젝트의 룰 스토어에 추가하십시오. 당신이하려고하는 구문은 불쾌하지만, (런타임에 실행되는 정적 메서드를 통해 비즈니스 규칙을 정의하는) 방법은 CSLA가하는 것과 정확히 같습니다.