2009-08-24 12 views
2

現時点では、私はこの「従業員」クラスのコードを持っています。しかし、私は "顧客"と他のすべての人とほぼ同じです。クラス、インタフェース、ジェネリックス....単純化が必要

このMyRepo <従業員>のような私のクラス「EmployeeRepository」が、より多くの何かに相当するものを作成するが、この場合にはIEmployeeRepositoryを実装する方法があり、ICustomerRepository私はこのMyRepo <カスタマー>をすれば。もちろん、getメソッドの戻り値の従業員、お客様や他の...あなたができる

public class EmployeeRepository : NHRepository<Employee>, IEmployeeRepository 
{ 
    public Employee Get(Guid EmployeeId) 
    { 
     return base.Get(EmployeeId); 
    } 
} 

public interface IEmployeeRepository : IRepositoryActionActor<Employee> 
{ 

} 

public interface IRepositoryActionActor<T> 
{ 
    T Get(Guid objId); 
} 

答えて

2

私が行ったようにはい、すでに述べたスペンサーRuportのように、インターフェイスまたは抽象基本クラスでコードを収集しますにメソッドを追加する:

public interface IPerson 
{ 
    void DoSomething(); 
} 

public abstract class Person : IPerson 
{ 

    public virtual void DoSomething() 
    { 
     throw new NotImplementedException(); 
    } 
} 

public class Employee : Person 
{ 
    public override void DoSomething() 
    { 
     base.DoSomething(); 
     /* Put additional code here */ 
    } 
} 

public class Customer : Person { } 

public class PersonRepository<T> : System.Collections.Generic.List<T> where T : IPerson, new() 
{ 
    public T Get(Guid id) 
    { 
     IPerson person = new T(); 
     return (T)person; 
    } 
} 
+0

IoCを使用しているインターフェイス –

+0

編集できません。コードを修正することができます。しかし、それは仕事です。再度、感謝します –

1

- あなたが持っているだろうので、あなたは、同様に一般的なIEmployeeRepositoryインタフェースになるだろう除い:

public class MyRepo<U> : NHRepository<U>, IRepository<U> 
{ 
... 

} 

public interface IRepository<T> : IRepositoryActionActor<T> 
{ 

} 

public interface IRepositoryActionActor<T> 
{ 
    T Get(Guid objId); 
} 

希望に役立ちます:)

+0

が、それは「IRepositoryActionActor パブリックインターフェイスIRepository 」で可能ですT値に依存して実装しますか? –

1

現時点では、この「」のコードを私の「従業員」クラスに使用しています。しかし、私は は "顧客"のためにほとんど同じを持っています と他のすべて。

共通点とそのデータセットに名前を付け、そのためのインターフェイスを作成します。私の推測では、IPersonがおそらく働くだろう。

次に、IPersonオブジェクトを返すget personリポジトリを作成できます。このリポジトリには、EmployeeまたはCustomerのいずれかを指定できます。

+0

IRepositoryActionActorはすべての(従業員、顧客、....)に共通ですが、IEmployeeRepository(ICustomerRepository、...)は特定の宣言を追加します –

関連する問題