現在、作成済みのクラスをどのように編成/構造化するべきかを理解するのに苦労しています。クラスは次のことを行います。
- コンストラクターでの入力として、ログのコレクションを受け取ります
- コンストラクターでは、ビジネス ロジックを実装する一連のアルゴリズムを使用して、ログを検証およびフィルター処理します。
- すべてのフィルタリングと検証が完了すると、有効でフィルタリングされたログのコレクション (リスト) が返されます。これは、UI でグラフィカルにユーザーに表示できます。
ここに私がやっていることを説明するいくつかの単純化されたコードがあります:
class FilteredCollection
{
public FilteredCollection( SpecialArray<MyLog> myLog)
{
// validate inputs
// filter and validate logs in collection
// in end, FilteredLogs is ready for access
}
Public List<MyLog> FilteredLogs{ get; private set;}
}
ただし、このコレクションにアクセスするには、次のことを行う必要があります。
var filteredCollection = new FilteredCollection( specialArrayInput );
//Example of accessing data
filteredCollection.FilteredLogs[5].MyLogData;
その他の重要な入力事項:
- これらのフィルタリングされたコレクションのうち、アプリケーションに存在するのは 1 つだけだと思います (したがって、それを静的クラスにする必要がありますか? それともシングルトンにする必要がありますか?)
- オブジェクトの作成におけるテスト容易性と柔軟性は重要です (おそらく、テスト容易性のためにこれをインスタンス化されたクラスにしておくべきでしょうか?)
- 実際の変数名は非常に長く、実際のデータに到達するまでに 60 ~ 80 文字かかるため、可能であればログの逆参照を簡素化したいと考えています。
- このクラスをシンプルに保つための私の試みは、このクラスの唯一の目的が、この検証済みデータのコレクションを作成することであるということです。
ここに「完璧な」解決策がないことはわかっていますが、この設計で自分のスキルを向上させようとしているので、そのためのアドバイスをいただければ幸いです。前もって感謝します。
編集:
すべての回答者のおかげで、Dynami Le-Savard と Heinzi の両方が、私が最終的に使用することになったアプローチ (拡張メソッド) を特定しました。最終的に MyLogsFilter 静的クラスを作成しました
namespace MyNamespace.BusinessLogic.Filtering
{
public static class MyLogsFilter
{
public static IList<MyLog> Filter(this SpecialArray<MyLog> array)
{
// filter and validate logs in collection
// in end, return filtered logs, as an enumerable
}
}
}
そして、コードでこれの読み取り専用コレクションを作成するには、次のようにします
IList<MyLog> filteredLogs = specialArrayInput.Filter();
ReadOnlyCollection<MyLog> readOnlyFilteredLogs = new ReadOnlyCollection<MyLog>(filteredLogs);