5

.NET 1.1(C#)でリポジトリパターンを使用するための一般的なアプローチは何ですか?

私はこのStackOverflowの質問に沿って何かを探していますが、.NET 1.1にはジェネリックがないので、それが可能かどうかを調べています(確かにそうです)。それが通常どのように行われるか。

4

2 に答える 2

1

それは非常に可能ですが、共通のインターフェースを使用する必要がないか、多くのキャストを行う必要があります。インターフェースの使用..。

public interface IRepository
{
    public object Get(int id); // or object id
    public void Save(object obj);
}

public class CustomerRepository : IRepository
{
    public object Get(int id) { // implementation }
    public void Save(object obj) { // implementation }
}

これは正常に機能しますが、呼び出しコードはオブジェクトを正しい型にキャストする必要があり、具体的な実装のメソッドは型をチェックして例外をスローする必要があります。直接キャストは実行時の例外を要求しているので、このアプローチは避けます。

私がお勧めするアプローチは、リポジトリに共通のインターフェースを実装させないことです。代わりに、慣例により、一般的に名前が付けられたメソッドを実装してもらいます。

public class CustomerRepository
{
    public Customer Get(int id) { // implementation }
    public void Save(Customer entity) { // implementation }
}

public class EmployeeRepository
{
    public Employee Get(int id) { // implementation }
    public void Save(Employee entity) { // implementation }
}

追加するために編集:リンクされた回答を読み直しました。最後の完全な段落は私を失いますが、DIの使用について少し拡張することができます。ほとんどの場合、DIを使用して「汎用」(この場合は共通インターフェースから派生したことを意味します)リポジトリーを注入することは意味がありません。一般的なメソッドに加えて、リポジトリには、などのエンティティ固有のメソッドがありますGetCustomersWithPastDueAccounts。そのメソッドを使用してICustomerRepositoryを定義し、CustomerRepositoryにそれを実装させることができます。次に、依存性注入を使用して、実行時にCustomerRepositoryを注入できます。それには何の問題もありませんが、私の経験では、リポジトリの実装が複数あることはめったにないので、そうする意味はほとんどありません。

于 2009-07-08T19:52:39.020 に答える
0

私が何かを読み間違えない限り、あなたがリンクした質問で受け入れられた答えはジェネリックを使用していません。彼はインターフェースを定義しており、「汎用」という用語を使用して、インターフェースがモデル内の特定のテーブルに直接関連付けられていないことを意味しています。

于 2009-07-08T19:44:39.897 に答える