2009-08-24 54 views
2

此時,我爲我的「員工」類擁有這段代碼。但對於「客戶」和其他所有人來說,我幾乎是一樣的。類,接口,泛型....需要簡化

有沒有一種方法來創建我的課「EmployeeRepository」,但更多的東西像這樣MyRepo <員工>等價,但在這種情況下實施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 – 2009-08-24 06:41:03

+0

我無法編輯,但是有一些語法錯誤代碼,如果你能糾正。但是,這是工作。再次感謝 – 2009-08-24 08:25:31

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

是在有可能的「公共接口IRepository :IRepositoryActionActor 」的方法添加到根據T值執行? – 2009-08-24 06:54:28

1

在這個時候,我有這塊 代碼爲我的「僱員」類。但是我的 對於「顧客」 和所有其他人幾乎一樣。

找出它們有什麼共同之處,併爲該組數據命名併爲其創建接口。我的猜測是IPerson可能會工作。

然後,您可以創建一個get person存儲庫,該存儲庫返回一個IPerson對象,並且可以是Employee或Customer。

+0

IRepositoryActionActor對所有(Employee,Customer,...)都是通用的,但是IEmployeeRepository(ICustomerRepository,...)添加一些特定的聲明 – 2009-08-24 06:37:10