基本上,DAL(数据访问层)应该提供简单的CRUD(创建/读取/更新/删除)方法,但我总是想要创建更复杂的方法,以便最大限度地减少业务逻辑层的数据库访问往返。
你对扩展到CRUD有什么看法(我想大多数都可以):
您通常在哪里实施实体缓存功能? DAL还是BLL? (我的选择是BLL,但我也见过DAL实现)
当您决定时,边界在哪里:此操作过于具体,因此我应该在业务逻辑层中将其作为DAL多次调用实现?我经常发现在十二个数据库往返中实现的BLL操作不足,因为开发人员害怕创建更复杂的DAL。
提前谢谢!
答案 0 :(得分:1)
我认为它应该像那样复杂,你需要它。
管理这个问题最简单的方法可能是创建某种基类(取决于你的框架,可以是一个需要覆盖的方法的抽象类),它具有最基本的CRUD方法,例如,
除此之外,为每个特定对象创建子类,例如
...但所有这些仍然应该纯粹是数据访问。任何类型的业务规则实施(通常都知道何时开始放置if语句和切换案例)应保留在业务层中。
答案 1 :(得分:1)
我不确定'复杂'是否是正确的词,它实际上取决于您定义为“业务逻辑”并确保您保持清洁Separation of Concerns。
阅读:GetById,GetByName,GetPaged, GetByFilter ... e.t.c.方法
和你一样,我会把这些都称为Read,我认为它们很好(尤其是GetById)。 只要它们是以数据为中心的,你在那里看到的一些比较模糊的东西也可能很好。
RE缓存:我主要是在BL中完成的,虽然我没有看到为什么你不能在DAL中做到这一点,如果那是合适的。如果你有一堆客户端敲击数据存储库并且数据不会经常变化 - 那么肯定,为什么不呢。
RE边界:我想到了一些事情。
最后( imporant ) - 关于BL的事情是,虽然它经常很复杂,但它也特定于你正在处理的app / service;数据本身可以拥有自己的规则,有时这些规则最好在数据级别实施 - 而不是在单个应用程序中实施。