违反SOLID原则

时间:2013-01-17 19:29:28

标签: oop class solid-principles ooad

假设我们有一个类结构,其中代码分为两部分让我们说计算机科学和商业,现在这也进一步划分国家,比如印度(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)如果我将公共代码放在父类中,它是否会降低子类的一致性。

请尽可能详细说明。 感谢

1 个答案:

答案 0 :(得分:2)

你的班级图:

Your class diagram

我看到x违规行为:

  1. 赞成过继承的作文
  2. 程序到接口,而不是实现
  3. 软件实体应开放以进行扩展,但尚未关闭以进行修改
  4. 所以,我建议你使用抽象工厂模式。 代码:

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

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

    enter image description here