如何将数据从表示层传递到业​​务逻辑层? (ASP.NET MVC 5)

How do I pass data from presentation layer to business logic layer? (ASP.NET MVC 5)

我正在使用 ASP.NET MVC 5 创建我的第一个 Web 应用程序,并希望以正确的方式进行。我计划创建一个具有表示层 (MVC)、数据访问层 (DAL) 和业务逻辑层 (BLL) 的架构。 DAL 和 BLL 将是独立于 MVC 项目的 class 库。这个想法是 MVC 项目将引用 BLL 来执行业务逻辑,然后业务逻辑将引用 DAL 与数据库进行交互。我正在使用存储库模式。

我的问题是,层与层之间的数据是如何传递的?例如,假设我在 MVC 项目中有一个 Entity Framework 模型,用于学生 class,其属性为 FirstName 和 LastName。然后我创建一个强类型视图,用户可以在其中通过填写一个简单的表单并单击 'Save' 添加学生。 Student 模型将发布到 Controller 中相应的操作方法,对吗?那么 Controller 是否不需要将 Student 对象发送到 BLL,然后从那里发送到 DAL 以插入到数据库中?但是当 BLL 和 DAL 对学生一无所知时,那怎么可能 class?

我不明白这在不创建循环依赖的情况下如何工作。有人可以解释或提供代码示例吗?

提前致谢。

我认为您对 MVC 的想法大体上是正确的,尽管对于为什么会出现循环依赖有点令人困惑。从你的解释中,这是我可以看到的:

男(模特) StudentViewModel (存在于 MVC 应用程序项目中)

V(视图) Create.cstml(模型是 StudentViewModel)(存在于 MVC 应用程序项目中)

C(控制器) 使用 StudentViewModel (位于 MVC 应用程序项目中)

导航到 CreatePage

当控制器执行 Post 时,您将填充的 StudentViewModel 注入到您的方法中,这就是可能发生的情况:

  • 您只需调用 StudentViewModel.Save(...) (MVC 应用程序项目)
  • 视图模型中的保存方法可以创建 BLL 的实例并执行必要的操作
  • 在 BLL 中,您可以使用您拥有的信息创建您的学生(实际实体),并通过调用 DAL
  • 保存该项目

所以你最终得到了这样的依赖关系图

MVC 应用引用 BLL 引用 DAL 引用实体层。

还有很多其他方法可以使用依赖注入等使上述结构更好,但这至少应该回答一些问题(并创建很多其他问题):)