没有存储库模式的 Net Core MVC 干净架构
Net core MVC clean architecture without repository pattern
我正在尝试使用 eshoponweb 示例应用程序在 net core 2.1 中创建一个 MVC 应用程序。我在 entity Framework 核心中读到,将存储库层放入并直接使用 ef dbcontext 并没有太大的好处。我将如何在干净的架构场景中执行此操作。在示例应用程序中,DB 上下文位于基础架构层中,业务服务逻辑全部位于应用程序核心中。我考虑过移动其中任何一个,但这不会阻止干净架构希望实现的分离。 https://github.com/dotnet-architecture/eShopOnWeb and https://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework-core/
我认为很多开发人员感到困惑的地方在于认为您需要自己的层。在洋葱架构中,您通常会有一个 "data" 层,通常称为 DAL。当您使用像 EF 这样的 ORM 时,那是您的数据层。换句话说,EF 不是您创建的单独的 class 库来处理数据库,而是那个库,因此,您可以像使用自己的 DAL 库一样使用它,如果您有一.
尽量不要过于关注层和 "clean" 架构。事实上,cleanest 架构是一个单一的项目。只有当事情开始变得难以处理时,才有意义突破 "layers"。换句话说,尽可能构建最简单的功能单元。如果涉及到一堆代码,你会发现自己在重复代码,你有太多的依赖关系等等,然后在重构过程中开始分解一些东西。最终,您可能会得到所有花哨的层和 100 个不同的 class 库,或其他任何东西,但是尝试从那里 start 是愚蠢的。如果您的应用程序实际上并不需要某些东西,那么添加它是愚蠢的。简单明了。
就其价值而言,这可能是 TDD 或测试驱动开发最鲜为人知的好处之一。您编写测试以确保发生您想要的特定事情,然后编写代码来满足该测试。重要的是,您 仅 编写代码来满足该测试。这自然意味着,您从简单开始,然后转向复杂。旧的红-绿-重构 TDD 方法的重构周期是您清理代码、在必要时抽象事物、将逻辑移出到可重用库等的地方。即使您不采用整个测试先行的编码方法,以这种方式看待开发仍然非常有益。你知道你需要构建什么,所以构建技术上满足该要求的最简单的东西。然后重构。构建下一个需求,然后再次重构。让您的应用程序自然地成长为它实际需要的样子,而不是从一开始就试图断言某种架构、模式或流程。
我正在尝试使用 eshoponweb 示例应用程序在 net core 2.1 中创建一个 MVC 应用程序。我在 entity Framework 核心中读到,将存储库层放入并直接使用 ef dbcontext 并没有太大的好处。我将如何在干净的架构场景中执行此操作。在示例应用程序中,DB 上下文位于基础架构层中,业务服务逻辑全部位于应用程序核心中。我考虑过移动其中任何一个,但这不会阻止干净架构希望实现的分离。 https://github.com/dotnet-architecture/eShopOnWeb and https://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework-core/
我认为很多开发人员感到困惑的地方在于认为您需要自己的层。在洋葱架构中,您通常会有一个 "data" 层,通常称为 DAL。当您使用像 EF 这样的 ORM 时,那是您的数据层。换句话说,EF 不是您创建的单独的 class 库来处理数据库,而是那个库,因此,您可以像使用自己的 DAL 库一样使用它,如果您有一.
尽量不要过于关注层和 "clean" 架构。事实上,cleanest 架构是一个单一的项目。只有当事情开始变得难以处理时,才有意义突破 "layers"。换句话说,尽可能构建最简单的功能单元。如果涉及到一堆代码,你会发现自己在重复代码,你有太多的依赖关系等等,然后在重构过程中开始分解一些东西。最终,您可能会得到所有花哨的层和 100 个不同的 class 库,或其他任何东西,但是尝试从那里 start 是愚蠢的。如果您的应用程序实际上并不需要某些东西,那么添加它是愚蠢的。简单明了。
就其价值而言,这可能是 TDD 或测试驱动开发最鲜为人知的好处之一。您编写测试以确保发生您想要的特定事情,然后编写代码来满足该测试。重要的是,您 仅 编写代码来满足该测试。这自然意味着,您从简单开始,然后转向复杂。旧的红-绿-重构 TDD 方法的重构周期是您清理代码、在必要时抽象事物、将逻辑移出到可重用库等的地方。即使您不采用整个测试先行的编码方法,以这种方式看待开发仍然非常有益。你知道你需要构建什么,所以构建技术上满足该要求的最简单的东西。然后重构。构建下一个需求,然后再次重构。让您的应用程序自然地成长为它实际需要的样子,而不是从一开始就试图断言某种架构、模式或流程。