0

コードが2つの部分に分割されているクラス構造があるとすると、コンピュータサイエンスとビジネスと言えますが、これは国の観点からもさらに分割されます。たとえば、インド(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)これが違反しているオブジェクト指向の原則よりも間違っている場合

3)もしそうなら、それはSOLIDの原則に違反しますか?

4)共通コードを親クラスに配置すると、子クラスの一貫性が低下しますか?

できるだけ詳しく説明してください。ありがとう

4

1 に答える 1

2

クラス図:

クラス図

x違反が表示されます:

  1. 継承よりも構成を優先する
  2. 実装ではなく、インターフェースへのプログラム
  3. ソフトウェアエンティティは拡張のために開いている必要がありますが、変更のために閉じている必要があります

したがって、AbstractFactoryパターンを使用することをお勧めします。コード:

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

そして、クラス図は次のようになります。

ここに画像の説明を入力してください

于 2013-01-27T13:42:27.440 に答える