MVC应用架构的数据流

Data flow of MVC application architecture

尝试验证我正在清理和简化的 MVC 应用程序中的数据流方法,(经过一些重构之后)目前看起来像下图(数据流由箭头指示)。有些部分是为了访问存储库服务而编写的。 (就像 HTML 助手直接访问存储库服务以查找数据)

几个问题。

  1. 这是一个典型的设计吗?有什么陷阱吗?
  2. 可以为了小事跳层吗?
  3. 数据流在架构上是否合理?
  1. 这似乎是一个常见的设计。不幸的是,我没有足够的经验来指出设计的缺陷,因为我目前正在进行的项目是我第一次接触这种架构。

  2. 如果说存储库服务是多层访问的,是不是少了几个箭头?理想情况下,您不希望从控制器(或 Razor 帮助程序)访问您的存储库,因为这会使您的代码更加紧密地耦合并混淆您原本良好的关注点分离。然而,这并不是说在多个模块中有一些有限的存储库访问是可怕的。最佳做法是将这些存储库调用移动到您的业务逻辑中,然后从那里将其传递给控制器​​。

  3. 我目前正在进行的 ASP.NET 项目使用的是非常相似的体系结构,我们正在使用它取得成功。

好像已经很不错了

通常我有以下分层:

  • 表示层:包含具有模型、控制器、视图和视图模型的 MVC 网站。
  • 服务层:包含向表示层中的所有内容公开的服务(以 WCF 服务或 Web API 甚至只是一个 class 库的形式).
  • 应用层:包含应用程序逻辑,在我的例子中,这些是使用底层域模型和基础设施服务的命令和查询处理程序。
  • 领域层:领域实体和服务,不依赖于其他层并包含领域逻辑。
  • 基础设施层:包含基础设施问题,如数据访问、日志记录等...

为了最小化依赖性,我针对接口进行编程;其中具体实现是由一个IoC容器注入的。这意味着每个组件也非常可测试。

您的表示层控制器很薄,仅使用服务层(和基础设施层)。

这是一种非常灵活的方法,但足够简单,适用于大多数类型的应用程序。此外,如果您使用 entity framework,您可能需要考虑是否真的需要存储库和工作单元。