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

本文关键字:实现 CRUD 何避免 数据 业务 | 更新日期: 2023-09-27 18:04:56

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

如何避免选择:

  • 实现ICreatable, IReadable, IUpdatable, IDeletable,这对每个类来说几乎是相同的,这让我写了很多相同的代码

  • 扩展现有的通用数据类,它具有所有4个CRUD,我不喜欢,因为我想要一些数据是只读的

我真正想要的是多重继承,这样我就可以简单地扩展与可创建,可移动,可更新或可移动的抽象类,当我需要他们

我正在考虑制作抽象的可读类,这似乎是最少的重复编码,同时避免多重继承和维护问题

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

如果我对你的问题理解正确的话,我认为你想要的是利用构图。例如:

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?
    }
}

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

您可以使用Unit-Of-Work,为您的所有类拥有一个实用的存储库。看看我在这里的实现

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