.NET 3.5 を検討し始めたばかりなので、この種の質問が以前に行われたことがある場合はご容赦ください。suteki shop から MVC e コマース製品をダウンロードしたばかりなので、拡張メソッドの適切な使用法に苦労しています。このプロジェクトには、IRepository を拡張する非常に標準的なリポジトリ パターンがあります。
このインターフェースによって公開される基本機能を拡張するために、拡張メソッドが使用されます。
public static class CategoryRepositoryExtensions
{
public static Category GetRootCategory(this IRepository<Category> categoryRepository)
{
return categoryRepository.GetById(1);
}
}
これで問題ありませんが、インターフェイスは、私が考える限り、それらを実装するオブジェクトへのコントラクトとして機能します。
リポジトリがインターフェース化されているという事実は、データ層にとらわれないアプローチの試みを示唆しています。とはいえ、独自のデータ レイヤーを作成する場合、リポジトリ クラスを実装するクラスに対する契約上の要件を確実に満たすために、どの拡張メソッドを作成する必要があるかについて混乱するでしょう。
IRepository を作成してから拡張する古い方法では、必要なものの可視性が大幅に向上するようです。
ICategoryRepoitory : IRepository<Category>
{
Category GetRootCategory();
}
だから私の質問は、この拡張メソッドの使用は他の人にとって間違っているように見えるのでしょうか? そうでない場合、なぜですか?私はこれについてうめき声を上げるべきではありませんか?
編集:
上記の例は、拡張メソッドが非常に役立つ理由の良い例のようです。
私の問題は、データ アクセス メカニズム アセンブリの拡張メソッドでデータ アクセス固有の実装が動かなくなった場合だと思います。
そうすれば、別のメカニズムに交換する場合、そのアセンブリで同様の拡張メソッドを作成する必要があります。