をジェネリッククラス継承メソッドを作るために私は2つの基底クラスを持っている:どのように他の一般的なクラスから
DataLogic<T>
{
protected abstract IEnumerable<string> Validate(T o);
protected virtual bool Editable(T o)
{
return true;
}
protected virtual bool Viewable(T o)
{
return true;
}
}
ImportLogic<T>
{
public IEnumerable<string> Import(Stream importFileStream)
{
...
IEnumerable<T> importedObjects;
...
foreach (var importedObject in importedObjects)
{
...
// HERE I WANT TO REACH METHOD FROM DATA LOGIC
var validationResult=Validate(importedObject);
...
}
...
}
protected abstract bool IsStructureValid(Worksheet sheetToValidate);
}
データロジックは、データ検証などのすべてのデータ操作を処理します。だから私はCar
オブジェクトのビジネスロジックを処理するCarLogc : DataLogic<Car>
のようなクラスを持つことができます。
インポートロジックは、ファイルを扱うような操作を処理します。だから私は車のリストをインポートする場合。
ここで、車オブジェクトの検証方法は1か所だけにしたいと思いますが、これはDataLogic
(車の場合はCarLogic
)にする必要があります。
しかし、CarImportLogic
クラスを作成した場合、それはImportLogic<Car>
から継承されます。CarLogic
も継承できません。私が思いついた
一つの解決策は、ImportLogicがDATALOGICプロパティをcontainng与えることですが、それは、コードがはるかに不明確になり、私はデータのメソッドを公開する必要があるので、私は、それを好きではありません。
だから、どのように私は、これらの目標を達成することができます
- は異なるビジネス・オブジェクトの一般的なクラスがあります。
- 一つだけの場所での検証ロジックを持っています。
- はImportLogicクラスから検証ロジックに到達することができます。
- は、エレガントで開発が簡単に自分のコードを保管してください。
私はあなたの代わりに相続の構図をしたいと思いますので、あなたのソリューションは、悪いことではありません。同様のアプローチは、デコレータのように、データとインポートロジックの両方をまとめた別のクラスを作成することです。 – CrudaLilium
@CrudaLilium私は自分の質問でヒットについて書いていますが、構成は現在のコードの明快さと柔軟性を失っています。両方のロジックを一緒にラップするワーキングソリューションを提供できる場合は、 –