Ruby和Ruby on Rails中的三层架构

6
我是一个ASP.NET MVC开发者,决定学习Ruby和Ruby on Rails。我已经学到了一些东西,并在RoR上创建了一个网站。在ASP.NET MVC上开发时,我始终使用三层架构:数据层、业务层和UI(或表示)层。
尝试在Ruby on Rails应用程序中使用此方法时,我发现没有相关信息(或者可能我只是找不到?)。
也许有人可以建议我如何在Ruby on Rails上创建或使用三层架构?
P.S. 我使用ruby 1.9.3和Ruby on Rails 3.2.3。
3个回答

5
我建议在制作RoR应用程序时遵循Ruby on Rails(RoR)的风格。Rails看待MVC架构的方式并不完全适合Asp.net 3层架构。 UI(表示层|视图)
这两者遵循相同的逻辑,没有太大区别。 Controller(业务层|控制器)
业务层和控制器都接收来自UI的请求,并发送响应。在Asp.net中,业务层负责验证和业务逻辑。但在Rails中,验证和业务逻辑属于Model。 Model(数据层|模型)
Rails的Model比Asp.net的Data Layer做得更多。Model处理业务逻辑和验证。数据层和模型负责将数据传输到存储中。
从Asp.net转移到RoR时,请尽量保持你的控制器薄。RoR对如何构建Web应用程序设置了严格的限制。一旦你坚持这些限制,你将制作出更专业的RoR应用程序。

1
这有点误导人,因为大部分业务逻辑应该集中在模型中,而不是控制器中。 - Peter Brown
感谢您的评论。这正是我所说的:“但在Rails中,验证和业务逻辑属于模型。”为了澄清我的回答,删除了一个“too”单词。 - hade
很好的编辑@Amit。我想听更多关于Ruby和Ruby的内容。 - hade

4
经过四年多的时间,这仍然是一个相关的问题。似乎人们对于应用程序层次结构的含义存在混淆。
当我们考虑MVC层次结构时,之前的回答当然是正确的,如果一个应用程序具有适当的模型、视图和控制器,则可以将其定义为3层应用程序。当然,Rails在这个意义上默认是3层的,但与其他框架如ASP.NET MVC有明显的区别。
然而,我有一种感觉,原始问题是指部署方式(当然我也可能错了,但查看此问题的人仍然可能正在寻找答案)。企业应用程序通常需要在某种意义上是三层的,即Web应用程序(表示层)只能与服务(业务逻辑)通信,后者只能由于网络级别限制和安全原因而与数据库通信。
在这种模型中,前端Web应用程序执行安全功能(保护免受多种攻击类型的攻击,如CSRF或Clickjacking,可能是会话管理等),并在应用程序服务器上呈现从服务读取的任何数据。这些应用程序服务器不能直接被最终用户访问,通常是信任的Web服务器(或不信任的,具体取决于安全模型),并将其数据持久化在数据库中,Web服务器无法直接访问数据库。在Windows环境中,Web、应用程序和数据库服务器通常位于不同的域中。
Rails,如几乎所有教程中所述,同时是Web和应用程序服务器,这与后一种模型不符,并且没有太多资源可用于如何正确地执行此操作。然而,特别是在Rails 5中,将Rails转换为适用于具有API的应用程序服务器非常容易(请参见API-only Applications Guide),并且还可以创建另一个Rails应用程序以用作Web层(表示层)。但是,您必须自己解决很多问题,从Web和应用程序之间的身份验证到从Web查询服务的问题,特别是现在ActiveResource已经被淘汰。

4
Ruby on Rails是一个三层(MVC)架构。在Rails中,数据层称为Model,业务层称为Controller,用户界面层称为Views。
以下是几个不错的入门指南: Rails指南Rails 3.2教程

在我看来,Asp.net的业务层比Rails的控制器做得更多。 - hade
3
这句话有些误导,因为大部分业务逻辑应该集中在模型中,而不是控制器中。 - Peter Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接