0

私は OO 設計の実際の経験がないため、次の問題に対して採用したソリューションについてためらっています。

N 個の異なるソースからさまざまな形式のネットワーク テキスト ファイルを処理する必要があります。処理には、従来の読み取り、計算、およびデータベースへの挿入が含まれます。

私が考案した解決策は、コア/ファイル形式に依存しないすべての機能/動作を定義するクラスを作成し、後者から派生したクラスを作成することでした。ここでは、指定されたファイルの種類に応じて、それぞれに適切な形式読み取りロジックが含まれています。クラスハンドル。

すべてのファイルは File.ReadAllLines() を介して読み取られます。相違点は、フィールドをファイルからメイン オブジェクトの変数にマッピングすることです。そのため、基本クラスで File.ReadAllLines() の後に呼び出されるイベントを定義することでこれを行い、すべての派生クラスがマッピング ロジックを継承されたイベントにアタッチします。

しかし、この解決策は設計上正しくないことを理解しています。まず、基底クラスをインスタンス化しても意味がないので、抽象化する必要があります。抽象化しなかったのは、すべての派生オブジェクトの構築コードが同じであるため、ベース コンストラクターとして定義したためです。抽象クラスで「初期化」メソッドを宣言し、すべての派生クラスのコンストラクターでそれを呼び出すだけですか? (奇妙に見える...) おそらくインターフェース?インターフェイスを使用すると、この「コンストラクター」の問題が解決されないだけでなく、ここでどのような利点が得られるかわかりません...

正しい解決策は何ですか?

私のシナリオのコードデモ:

public delegate void myDelegate(object parameter);

class Base
{
   #region Attributes
   ...
   #endregion

   public Base(object p)
   {
     //initialization code
     ...
   }

   #region Methods
   protected void m1() { }
   protected void m2() { }
   ...
   #endregion

   public event myDelegate myEvent;
}

class Child1
{
    public Child1(object o) : base(o)
    {
      this.myEvent += new myDelegate(ChildMethod);
    }

    public void ChildMethod(object o)
    {
      ...
    }
}
4

1 に答える 1