문제

나는 이런 일을하고 싶다

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

깊고 익사하기 전에 물어보고 싶었습니다.

이 접근법의 잠재적 인 함정은 무엇입니까 ???

미리 감사드립니다

도움이 되었습니까?

해결책

당신이 가능한 의미가 무엇인지 잘 모르겠습니다. 이런 식으로 규칙 엔진을 작성할 수 있으며이를 달성하는 방법에 대한 개요를 시행했습니다.

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

다른 팁

런타임에 규칙을 변경하려는 경우 더 좋아하는 것을 고려하고 싶을 수도 있습니다. Mef 또는 유사합니다.

솔루션은 컴파일 될 때까지 정상적으로 정상적으로 런타임 유연성을 찾고있는 의견의 소리에서 설정하고 잠겨 있습니다.

CSLA의 비즈니스 규칙 구현을 살펴보십시오 http://lhotka.net/ . 특정 서명이있는 규칙을 정의하고 클래스 레벨 또는 인스턴스 레벨에서 객체의 규칙 저장소에 추가합니다. 당신이 시도하는 일의 구문은 오프 푸팅이지만, 방법 (실행 시간에 실행되는 정적 메소드를 통한 비즈니스 규칙을 정의 함)은 CSLA가하는 일입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top