4个接口的接口?

时间:2011-06-10 07:10:19

标签: c# .net design-patterns repository-pattern

我有一个非常大的数据库应用程序,并尝试使用存储库模式。

我有4个接口:IProductRepository,IFileRepository ....,我希望为所有4个接口提供一个组合接口,我想把它作为应用程序其他部分的API。

我必须有一个类并输入4个接口的所有方法,并为该类添加接口吗?听起来很多工作。由于4中的每一个都有很多方法,我不想再次输入它们了。

或者我如何以最干净和最好的方式解决这个问题?

5 个答案:

答案 0 :(得分:4)

根据您的描述,听起来像Facade应该符合要求。

http://www.dofactory.com/Patterns/PatternFacade.aspx

答案 1 :(得分:1)

是的,据我所知,没有其他办法。但像Resharper这样的工具让事情变得更容易。

答案 2 :(得分:1)

是。这可能是使用接口的缺点。 让这种可忍受的好方法是使用某种代码生成工具。类似于T4

答案 3 :(得分:0)

如何实现每个类可以使用的通用IRepository?

答案 4 :(得分:0)

另一个选择是使用像Dynamic Proxy这样的工具并混合您的存储库实现。这将减轻您必须创建手动转发实现的工作。

示例:

public class Product 
{
}
public interface IProductRepository
{
    void Save(Product p);
}
public class ProductRepository : IProductRepository
{
    public void Save(Product p)
    {
        Console.WriteLine("Saved Product");
    }
}

public class File 
{
}
public interface IFileRepository
{
    void Save(File f);
}
public class FileRepository : IFileRepository
{
    public void Save(File f)
    {
        Console.WriteLine("Saved File");
    }
}

public class Repository 
{
}

创建mixin:

var options = new ProxyGenerationOptions();
options.AddMixinInstance(new ProductRepository());
options.AddMixinInstance(new FileRepository());
var generator = new ProxyGenerator();
var proxy = (Repository)generator.CreateClassProxy(typeof(Repository), options);
(proxy as IProductRepository).Save(new Product());
(proxy as IFileRepository).Save(new File());

不知怎的,我觉得你也应该能够将你的接口和代理结合起来。这些方面的东西:

public interface IFullRepository : IProductRepository, IFileRepository
{
}

var proxy = (IFullRepository)generator.???

我还没有办法让它发挥作用 - 也许会问动态代理人。