2012-06-25 3 views
1

CSLA에서 팩토리 패턴을 구현하고 싶습니다. 추상적 추상 클래스 또는 추상화를위한 인터페이스를 사용할 수 있습니다. 필자는 추상 클래스를 사용하기로 결정했다. 왜냐하면 저장소에 저장, 저장소에서 검색 및 레코드 삭제와 같은 일반적인 기능이 있기 때문이다. 또한 구현 된 모든 객체에 적용되는 일부 속성.CSLA.NET을 사용하여 팩토리 패턴 구현

C#은 한 클래스의 상속만을 허용하므로 BusinessBase 또는 추상 클래스를 사용할 수 있습니다. 또한 구체적인 유형에 비즈니스 규칙을 적용하고 싶습니다. 이것이 CSLA로 어떻게 할 수 있습니까?

내가 아래에 나열한 것을 수행하면 추상 클래스와 구체적인 클래스의 규칙이 모두 해지됩니까?

일부 코드 ...

추상 클래스 :

public class Form : BusinessBase<Form> { 
    private static PropertyInfo<string> FormNameProperty = RegisterProperty<string>(c => c.FormName); 
    public string FormName 
    { 
     get { return GetProperty(FormNameProperty); } 
    } 

    public abstract void LoadContent(); 

    protected override void AddBusinessRules() 
    { 
     // business rules that are commmon for all implementations 
    } 
} 

콘크리트 구현 :

public class FormA : Form { 
    private static PropertyInfo<string> FirstNameProperty = RegisterProperty<string>(c => c.FirstName); 
    public string FirstName 
    { 
     get { return GetProperty(FirstNameProperty); } 
    } 

    public override void LoadContent(){ 
     // some custom code 
    } 

    protected override void AddBusinessRules() 
    { 
     // business rules that only apply to this class 
    } 
} 

공장 :

public static class FormFactory{ 
    public static Form GetForm(string formanmae) { 
     Type formType = GetFormType(formName); 
     if(formType == null) 
     return null; 

     var form = Activator.CreateInstance(formType) as ReferralForm; 
     return form; 
    } 
} 

답변

1

대신 사용 Activator.CreateInstance로, 당신Csla DataPortal을 사용해야합니다.

var form = (Form)Csla.DataPortal.Create(formType, new Csla.Server.EmptyCriteria); 

이렇게하면 Csla 방식으로 비즈니스 개체를 만들 수 있으므로 실행해야하는 규칙이 적용됩니다.