【问题标题】:Where to write Database and Business logic in MVC?在 MVC 中哪里写数据库和业务逻辑?
【发布时间】:2010-09-09 18:02:22
【问题描述】:

在学习和开发 Asp.Net MVC 应用程序时,我想知道在 MVC 中编写 Business LogicData Access logic 的更好地方是什么。

三层之间的DataAccess和Business Logic应该写在哪里(Model, View and Controller)??

谁能告诉我编写代码的正确方法。

场景:我想retrieve all the employees where employee name like 'Mi%'(我有SQL procedure to execute and retrieve the data.

PS:想知道我应该在哪里创建业务逻辑类的实例以及我应该在哪里创建数据访问层类的实例?

提前致谢。

【问题讨论】:

  • 请务必查看NerdDinner tutorial.
  • 查看用于创建 BL 和 DAO 对象的 IoC 模式,Steven Sanderson 在他的《Pro ASP.NET MVC 框架》一书中很好地涵盖了这个主题,或者尝试谷歌搜索“asp.net mvc ioc”

标签: asp.net-mvc asp.net-mvc-2


【解决方案1】:

业务逻辑 (BL) 和数据访问 (DAO) 应该位于不同的层中。模型应该只保留数据并且不包含任何逻辑。控制器应该只从视图接收数据并将其发送到 BL 层(或从 BL 发送到视图)。
这不是一个严格的规则,但最近使用的方法

【讨论】:

  • 没错! MVC != 3 层开发。 MVC 只是 UI 级别。业务逻辑和数据库访问应该放在其他地方。
【解决方案2】:

业务逻辑应该在模型中。

数据访问可以在您的 Controller 调用之后自己进行,也可以在您的 Controller 将通过存储库调用的 ORM 中自动进行。

可以在Nerd Dinner 中找到有关此内容的演练,查找free download section

【讨论】:

  • 谢谢 Blu,我只想知道我应该在哪里创建业务逻辑类的实例以及我应该在哪里创建数据访问层类的实例?
  • DAL 类将在控制器中创建。如果您的 BLL 类是 DAL 之上的一个层,那么控制器将创建它们,而 BLL 将创建它需要的 DAL 组件。
  • @nunu:不要将业务逻辑视为“业务逻辑类”,而是将其视为模型中的逻辑。书呆子晚餐教程的第 3 部分有一些基本示例:nerddinnerbook.s3.amazonaws.com/Part3.htm
  • 根据我的经验,在 MVC 中通常不使用 UI、BLL、DAL 方法。业务逻辑被整合到模型中,DAL 在 ORM 中实现,该 ORM 可通过存储库访问。您可能会在架构方面发生转变,而 pdf 将有很大帮助。为了帮助您入门,您可以在控制器中使用 BLL/DAL 类,并在您了解有关 MVC 的更多信息时进行重构。
  • @blu 在结构良好的应用程序中,您应该能够将 MVC 换成 WCF 或任何其他 UI/访问策略,并且逻辑仍然存在。如果您将逻辑包装到您的视图模型/控制器中,您就违反了这一点。
【解决方案3】:

视图是您放置界面代码的位置。

Controller 是连接视图和模型的地方。

模型存储业务逻辑和可能的数据库访问。 (也可以使用一些 ORM 层)

【讨论】:

    【解决方案4】:

    你可以完全跳过三层思维,换一种思维方式;

    用户行为;将命令或事件发送到后台服务。对于初学者,您可以在进程中运行后台服务。后台服务再次在内存中发布事件。您创建多个从后台服务订阅事件的视图。每个视图都有一个“最后一次看到”事件;它是一个整数。每次启动它读取“全局日志”中的所有后续事件。

    视图是一次性的,因为您有来自 GUI 和后台服务的事件/命令的全局日志,无论如何,它们会在您启动时读取所有错过的事件。

    这相当于“做某事,我希望在另一种观点中看到‘改变’”。你还有:

    交互是指当您从 GUI 或后台服务中获得一个或多个事件时,如果该操作失败,您让某些参与者(最有可能是 Saga)执行某些操作,并可能基于其他事件进行补偿。

    另外,我可以推荐浏览this presentation

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2012-03-07
      • 1970-01-01
      • 2013-04-01
      • 2011-05-30
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多