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

时间:2015-06-03 02:34:18

标签: c# asp.net-mvc design-patterns n-tier-architecture business-logic

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

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

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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你对MVC的想法通常是正确的,尽管你为什么会得到循环依赖有点令人困惑。根据你的解释,这是我能看到的:

M(模型) StudentViewModel (位于MVC应用程序项目中)

V(视图) Create.cstml(model是StudentViewModel)(住在MVC app项目中)

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

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

  • 您只需致电StudentViewModel.Save(...)(MVC app project)
  • 视图模型中的save方法可以创建BLL的实例并执行必要的
  • 在BLL中,您可以使用您拥有的信息创建您的学生(实际实体)并通过致电DAL来保留该项目

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

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

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