0

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

请尽可能详细。谢谢

4

1 回答 1

2

Your class diagram:

Your class diagram

i see x violations:

  1. Favor Composition Over Inheritance
  2. Program To An Interface, Not An Implementation
  3. Software Entities Should Be Open For Extension, Yet Closed For Modification
  4. etc

So, i would suggest you use Abstract Factory pattern. Code:

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

And, your class diagram looks like:

enter image description here

于 2013-01-27T13:42:27.440 回答