3

私はレイアウトマネージャークラスを持っており、このクラスはデータグリッドレイアウトを設定するために設計されています。コード:

class LayoutManager
{
    private object _target;

    public LayoutManager(object aDataGrid)
    {
        _target = aDataGrid;
    }

    public void SaveLayout(string strProfileID)
    {
    }

    public void LoadLayout(string strProfileID)
    {
    }

    //in future I might add below function
    public void ResetLayout()//OtherFunction0
    {
    }

    public void OtherFunction1()
    {
    }

    public void OtherFunction2()
    {
    }


}

OCP によると、「クラスは拡張のために開いている必要がありますが、変更のために閉じている必要があります」。LayoutManager クラスに新しい関数を追加した場合、このアクションは OCP に違反しますか? はいの場合、クラスを設計する適切な方法は何ですか?

4

3 に答える 3

3

クラスにメソッドを追加することは、実際にはクラスの動作を拡張するため、一般に OCP の原則に違反するとは思いません。問題は、既存の動作を変更する場合です。したがって、追加したメソッドのコードが既存のメソッドの動作を変更する可能性がある場合 (オブジェクトの状態が変更されるため)、違反になります。

SOLID プリンシパルに従う正しい方法は、インターフェイスを作成することです。必要なインターフェイスを備えた ILayoutManager と、文書化された動作を備えています。

クラス LayoutManager は、このインターフェースを実装します。他の新しいメソッドは、既存のメソッドで文書化された動作の契約を破らない限り、ILayoutFoo などの新しいインターフェイスに追加されるか、既存のインターフェイスに追加される可能性があります。

于 2013-04-10T04:56:40.250 に答える