私は 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)
{
...
}
}