【问题标题】:Using derived abstract classes to define different logic used by Model使用派生抽象类定义Model使用的不同逻辑
【发布时间】:2017-11-15 10:37:44
【问题描述】:

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

我有一个模型,它应该根据属性实现相关类的特定逻辑。

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,因此使用它非常困难并且感觉不一致。

我真的无法找到更好的解决方案,所以也许有人可以帮助我解决这个问题。也许界面会更好?还是泛型类?我都试过了,但都没有更好的结果。

提前谢谢你。

编辑

将我自己的答案移到一个答案中。

【问题讨论】:

  • 这里不需要泛型,因为抽象类已经定义了你的模型应该使用的接口。您需要先实例化您的 Logic 属性,然后才能使用它。
  • 在你的模型中添加一个构造函数来初始化它 - public Model() { Logic = new ActualLogic(); }
  • 没有为 ActualLogic 创建实例,Logic = new ActualLogic();在Model的构造函数中
  • 答案在答案部分,而不是问题

标签: c# .net architecture abstract


【解决方案1】:

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

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

现在我可以像这样访问它Model.LogicType.LogicClass()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2017-06-21
    相关资源
    最近更新 更多