【问题标题】:violation of SOLID principles违反 SOLID 原则
【发布时间】:2013-01-01 10:28:08
【问题描述】:

假设我们有一个类结构,其中代码分为两部分让我们说计算机科学和商业,现在这也进一步划分为国家,比如印度(cs 或 MBA)和美国(cs 或 MBA) . 现在让我们考虑一个我创建类的场景

1)教育类(父类)

2) MBA 课程扩展了教育课程

3) BS (cs) 类扩展了教育类

现在就国家而言,我也做了课程

4) INDIA_BS 类扩展了 BS (cs) 类

5)INDIA_MBA 类扩展了 MBA 类

6) US_BS 类扩展了 BS (cs) 类

7) US_MBA 类扩展了 MBA 类

现在让我们说我编写代码,其中国家在层次结构中最低的类方法中设置(即国家类 INDIA_BS、INDIA_MBA、US_BS、US_MBA)
但逻辑类似。我通过国家名称并设置它。

所以我的问题是
1)将公共逻辑放在父类中(如果我这样做的话)并从层次结构最低的子类中调用该方法是否明智。

2) 如果这是错误的,那么它违反的 OOPS 原则是什么

3) 如果是的话,它是否也违反了 SOLID 原则?

4) 如果我将公共代码放在父类中,是否会降低子类的连贯性。

请尽可能详细。 谢谢

【问题讨论】:

  • 你听说过类图吗?
  • 是的,但我如何在 SO 中表示它
  • 你可以在SO中添加图片
  • 您可以将其添加为图像,然后将其嵌入到帖子中

标签: oop class solid-principles ooad


【解决方案1】:

你的类图:

我看到 x 次违规:

  1. 优先组合优于继承
  2. 编程到接口,而不是实现
  3. 软件实体应该对扩展开放,对修改关闭

所以,我建议您使用抽象工厂模式。 代码:

    class Test
    {
        static void Main(string[] args)
        {
            IEducationFactory india = new IndianEducation();
            IEducationFactory newYork = new USEducation();

            IDiplom d1 = india.Create_BSC();
            IDiplom d2 = newYork.Create_MBA();
        }
    }

    public interface IDiplom
    {
    }

    public interface IEducationFactory
    {
        IDiplom Create_MBA();
        IDiplom Create_BSC();
    }

    public class IndianEducation : IEducationFactory
    {
        public IDiplom Create_MBA()
        {
            throw new NotImplementedException();
        }

        public IDiplom Create_BSC()
        {
            throw new NotImplementedException();
        }
    }

    public class USEducation : IEducationFactory
    {
        public IDiplom Create_MBA()
        {
            throw new NotImplementedException();
        }

        public IDiplom Create_BSC()
        {
            throw new NotImplementedException();
        }
    }

而且,您的类图如下所示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多