1

CSLAでファクトリーパターンを実装したいと思います。抽象化には、抽象基本クラスまたはインターフェイスを使用できます。ストアへの保存、ストアからの取得、レコードの削除などの特定の共通機能があるという理由だけで、抽象クラスを使用することにしました。また、実装されたすべてのオブジェクトに適用されるいくつかのプロパティ。

C# では 1 つのクラスからの継承のみが許可されるため、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

Activator.CreateInstance を使用する代わりに、Csla DataPortal を使用する必要があります。

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

この方法では、Csla の方法を使用してビジネス オブジェクトを作成しているため、実行する必要があるすべてのルールが実行されます。

于 2012-08-04T23:39:07.807 に答える