如何避免在c#中的业务数据层中为每个类实现完整的CRUD?

时间:2015-07-28 06:57:19

标签: c# asp.net-mvc

所以我在我的应用程序中创建了一个业务数据层,因此我显然需要API来访问我的数据。

如何逃避选择:

  • 实现ICreatable,IReadable,IUpdatable,IDeletable,每个类几乎完全相同,这使得我编写相同的代码很多

  • 扩展现有的通用数据类,其中包含我不喜欢的所有4个CRUD,因为我希望只读取一些数据

我真正喜欢的是多重继承,这样当我需要em时,我可以简单地使用Creatable,Removable,Updatable或Removable抽象类进行扩展

我正在考虑制作抽象的CRUDable和Readable类,它们似乎是重复编码的最少量,同时避免了多重继承和维护问题

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,我认为你要找的是使用作文。例如:

public class OrderRepository<Order> : ICreateable<Order>, IReadable<Order>, IUpdateable<Order>, IDeleteable<Order>
{
    private ICreateable<Order> _createable;
    private IReadable<Order> _readable;
    private IUpdateable<Order> _updateable;
    private IDeleteable<Order> _deleable;

    public void Add(Order item)
    {
        _createable.Add(item);
    }

    public Order GetById(int id)
    {
        return _readable.GetById(id);
    }
}

public class Creatable<T> : ICreateable<T>
{
    public void Add(T item)
    {
        //Add to entity framework?
    }
}

public class Readable<T> : IReadable<T>
{
    public T GetById(int id)
    {
        //Get from entity framework?
    }
}

这样你只需编写一次通用组件,并通过实现相应的接口选择哪些存储库支持它们

答案 1 :(得分:0)

您可以使用Unit-Of-Work,为您的所有课程提供实用的存储库。看看我的实施here

如果你想添加更多的模型,你只需要在IUowData接口中放一行,在UowData类中放一个小方法

我希望这会有所帮助。