1

我想在 CSLA 中实现工厂模式。我可以使用抽象基类或抽象接口。我决定使用抽象类,只是因为我具有某些通用功能,例如保存到存储、从存储中检索和删除记录。此外,一些适用于所有已实现对象的属性。

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;
   }
}
4

1 回答 1

1

您应该使用 Csla DataPortal,而不是使用 Activator.CreateInstance。

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

这样,您将使用 Csla 方式创建业务对象,因此应该运行的任何规则都将是。

于 2012-08-04T23:39:07.807 回答