使用派生的抽象类来定义Model

时间:2017-11-15 10:37:45

标签: c# .net architecture abstract

我目前正在建立一个架构,允许我设置抽象基类的多个派生类。这些类将实现方法的实际逻辑并为属性赋值。

我有一个模型应该根据属性实现尊重类的特定逻辑。

public abstract class AbstractLogic
{
    protected String Prop1 { get; set; }
    public abstract String Method1();
}


public class ActualLogic : AbstractLogic
    {
        public ActualLogic()
        {
           Prop1 = "Test";
        }

        public override string Method1()
        {
            throw new NotImplementedException();
        }

    }

public class Model
{
    public string LogicType { get; set; }
    private AbstractLogic Logic { get; set; } //I need to have something like this to use the logic inside of the model
}

我想以通用方式使用这些类,例如在某处调用Model.logic.Method1(),它应该从ActualLogic类中提取逻辑

我对这个架构的问题是,当我加载Model时,Logic属性始终为null,因此使用它非常困难并且感觉不一致。

我无法真正解决一个更好的解决方案,所以也许有人可以帮我解决这个问题。也许界面会更好?还是通用类?我尝试了两种方法,但无法获得更好的结果。

提前谢谢。

修改

将我自己的答案移到答案上。

1 个答案:

答案 0 :(得分:0)

我找到了一种更好的方法来访问正确的逻辑类: 在我的模型中,我定义了一个属性枚举LogicType,并且只使用扩展方法访问尊重的LogicClass。

user_id: bbbbb

现在我可以像public enum LogicType { actuallogic, actuallogic2 } public static class LogicExtensions { public static AbstractLogic LogicClass(this LogicType self) { switch (self) { case LogicType.actuallogic: return new ActualLogic(); case LogicType.actuallogic2: return new ActualLogic2(); default: return null; } } }

那样访问它