Separation of concerns 在更高层编写接口是否被认为是一种良好的实践?

Separation of concerns 在更高层编写接口是否被认为是一种良好的实践?,separation-of-concerns,clean-architecture,decoupling,Separation Of Concerns,Clean Architecture,Decoupling,我认为最好在“应用程序”层(业务)上编写工作单元的接口,并在“持久性”层(DAL)上实现它们。目标是使层尽可能地解耦 想象一下,您决定将DAL从EF core更改为Dapper。这一转变将如何减轻痛苦?让接口发出“我需要这个查询,这个查询,那个查询,以便处理我的业务”的声音并将其映射到新的数据访问层不是更好吗?您的想法是正确的,将重点放在业务逻辑上,并将技术细节转化为业务逻辑的插件 另请参见罗伯特·C·马丁的《清洁建筑》,以了解对同一方向更深入的思考 是的,您应该在层中声明接口,该层应独立于基础

我认为最好在“应用程序”层(业务)上编写工作单元的接口,并在“持久性”层(DAL)上实现它们。目标是使层尽可能地解耦


想象一下,您决定将DAL从EF core更改为Dapper。这一转变将如何减轻痛苦?让接口发出“我需要这个查询,这个查询,那个查询,以便处理我的业务”的声音并将其映射到新的数据访问层不是更好吗?

您的想法是正确的,将重点放在业务逻辑上,并将技术细节转化为业务逻辑的插件

另请参见罗伯特·C·马丁的《清洁建筑》,以了解对同一方向更深入的思考


是的,您应该在层中声明接口,该层应独立于基础架构(即业务层)。您通过接口定义契约,较低级别的组件应该实现这些接口。这样,您就可以确保在业务层中,您只依赖于在该层中定义良好的内容。例如,您在业务(域)层中定义了一个存储库接口,该接口的实现在持久性层中定义。如果您还没有看到,我建议您也观看这段视频。我的灵感正是来自您从一开始就提出的建议。非常感谢你!