在更高层编写接口是否被认为是一种好的做法?

Does it considered as a good practice to write interfaces in a higher layer?

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

想象一下您决定将 DAL 从 EF 核心更改为 Dapper 的场景。这种转变如何不那么痛苦?让接口声明“我需要这个查询、这个和那个,以便开展我的业务”并将其映射到新的数据访问层不是更好吗?

你的想法是正确的,会把重点放在你的业务逻辑上,把技术细节变成plug-ins你的业务逻辑。

另请参阅 Robert C. Martin 的“Clean Architecture”,了解对同一方向的更深入思考。

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html