业务逻辑在哪里?

时间:2010-12-29 23:32:31

标签: ruby-on-rails business-logic

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

4 个答案:

答案 0 :(得分:13)

使用FatModels和SkinnyControllers的概念。您的模型应该知道它们的行为方式和应该做的事情。

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

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

答案 1 :(得分:7)

“业务逻辑”或某些人可能称之为“域逻辑”并不属于Rails和/或.NET MVC项目附近的任何地方。 Rails和MVC应该依赖于你的域,而不是相反。我建议您阅读杰弗里·巴勒莫的洋葱建筑,或者观看罗伯特·马丁的“建筑失落的岁月”。 (无论如何,我认为那是那个话题)。可能有更多的资源,但你会感谢以后将Rails和.NET MVC视为第三方框架,而不是应用程序的主要部分。

答案 2 :(得分:3)

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

TL; DR

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

我正在努力解决这个问题,尽管Fat Controller模式似乎占上风,但软件中的任何“胖”似乎都是一种气味,违反了单一的责任。

答案 3 :(得分:0)

您可以将业务逻辑放在任何您想要的地方(即使是在视图中!虽然这是一个坏主意)。

我会说逻辑是否与现实世界的物体联系在一起,然后将它放在模型上。否则,请使用控制器。但是由您决定如何为您的应用程序执行此操作。模型用于建模事物,控制器用于控制事物。