【问题标题】:Where does business logic go in rails?Rails 中的业务逻辑在哪里?
【发布时间】:2011-06-01 07:44:48
【问题描述】:

我是一名 ASP.NET MVC 开发人员,刚开始我在 Rails 上的第一个大项目,但是我对将业务逻辑放在哪里感到困惑?在 ASP.NET 上,我创建了一个包含处理业务逻辑的服务(域驱动设计)的库,我听说 Rails 使用胖模型瘦控制器的概念,但我在 ASP.NET 中有一些项目,将所有逻辑添加到控制器会造成很大的混乱,还有其他方法吗?

【问题讨论】:

  • “业务逻辑”是什么意思?
  • 你也可以尝试创建模块并将它们放在你的lib目录中

标签: ruby-on-rails business-logic


【解决方案1】:

使用 FatModels 和 SkinnyControllers 的概念。你的模型应该知道他们的行为方式和他们应该做什么。

当你的模型变得太胖时,将它们提取到可重用的模块中并将它们包含在你的模块中。

您可以使用 RSpec(或 test/unit 或 shoulda)轻松测试模型的行为。然后您可以使用 Cucumber 测试应用程序的行为是否正确。

【讨论】:

【解决方案2】:

“业务逻辑”或某些人可能称之为“域逻辑”不属于 Rails 和/或您的 .NET MVC 项目附近的任何地方。 Rails 和 MVC 应该依赖于您的域,而不是相反。我建议阅读 Jeffery Palermo 的 Onion Architecture 或观看 Robert Martin 的“Architecture the Lost Years”。 (无论如何,我认为这就是谈话)。可能还有比这更多的资源,但您稍后会感谢自己将 Rails 和 .NET MVC 都视为它们是第 3 方框架,而不是应用程序的主库。

【讨论】:

  • 我已经看过演讲,也多次听到过这个想法,但我从未见过具体的例子或演示如何实现这一目标。作为一个新手,原则上是有道理的,但我无法真正概念化如何将其付诸实践。您是否有我可以查看的遵循这种做法的 Rails 应用程序示例,或者有更具体示例的文章?
  • 这是真的,但对于 ruby​​ 来说也有点不正确。 Ruby(尤其是活动记录)旨在将 MVC 用作整个应用程序架构,而不仅仅是作为表示层模式。因此 M(业务逻辑和 DAL)C(应用程序逻辑)和 V(表示逻辑)。对于大型复杂的应用程序(例如,需要 DDD 的地方),这当然有缺点。但是 ruby​​ 是为简单快速实现的应用程序而设计的,它带有许多基于 Active Records 的开箱即用的功能
【解决方案3】:

我认为这篇博客文章很好地概述了将域驱动设计与 Rails 框架结合的策略:http://www.smashingboxes.com/domain-logic-in-rails/

TL;DR

将您的经典 Rails 模型重构为存储库,并使用控制器中的外观层与您的域模型进行交互。

我自己也在为此苦苦挣扎,尽管胖控制器模式似乎盛行,但软件中的任何“胖”似乎都是一种气味,违反了单一职责。

【讨论】:

    【解决方案4】:

    您可以将业务逻辑放在您想要的任何位置(甚至在视图中!虽然这是个坏主意)。

    我会说如果逻辑与真实世界的对象相关联,然后将其放在模型上。否则,请使用控制器。但如何为您的应用程序执行此操作取决于您。模型用于建模事物,控制器用于控制事物。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2011-10-05
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 2011-05-30
      • 2013-04-01
      相关资源
      最近更新 更多