如何将数据从表示层传递到业务逻辑层? (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 引用实体层。
还有很多其他方法可以使用依赖注入等使上述结构更好,但这至少应该回答一些问题(并创建很多其他问题):)
我正在使用 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 引用实体层。
还有很多其他方法可以使用依赖注入等使上述结构更好,但这至少应该回答一些问题(并创建很多其他问题):)