【问题标题】:Three-tier architecture in Ruby and Ruby on RailsRuby 和 Ruby on Rails 中的三层架构
【发布时间】:2012-06-02 18:11:26
【问题描述】:

我是一名 ASP.NET MVC 开发人员,决定学习 Ruby 和 Ruby on Rails。我已经知道一些事情并在 RoR 上创建了一个网站。在ASP.NET MVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。

尝试在 Ruby on Rails 应用程序中使用这种方法时,我发现没有关于它的信息(或者我只是找不到?)。

也许有人可以建议我如何在 Ruby on Rails 上创建或使用三层架构?

附:我使用 ruby​​ 1.9.3 和 Ruby on Rails 3.2.3。

【问题讨论】:

    标签: ruby ruby-on-rails-3


    【解决方案1】:

    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 到应用程序进行服务查询,尤其是现在 ActiveResource 已经退休了。

    【讨论】:

      【解决方案2】:

      我建议在制作 RoR 应用程序时遵循 Ruby on Rails (RoR) 风格。 Rails 看待 MVC 架构的方式不太适合 Asp.net 3 层架构。

      UI(表示层 | 视图)

      这两个遵循相同的逻辑。没有重大差异。

      控制器(业务层|控制器)

      业务层和控制器都接收来自 UI 的请求并返回响应。在 Asp.net 中,业务层负责验证和业务逻辑。但在 Rails 中,验证和业务逻辑属于模型。

      模型(数据层|模型)

      Rails 的模型比 Asp.net 的数据层做得更多。模型处理业务逻辑和验证。数据层和模型负责将数据传输到存储。

      从 Asp.net 迁移到 RoR 时,请尽量保持控制器纤薄。 RoR 对如何构建 Web 应用程序设置了严格的限制。一旦你坚持这些,你就会制作出更专业的 RoR 应用程序。

      【讨论】:

      • 这有点误导,因为模型应该集中大部分业务逻辑,而不是控制器。
      • 感谢您的评论。这正是我所说的:“但在 Rails 中,验证和业务逻辑属于模型。”删除了一个“太”字以澄清我的答案。
      • 很好的编辑@Amit。我想了解更多关于 Ruby 和 Ruby 的信息。
      【解决方案3】:

      Ruby on Rails 一个三层 (MVC) 架构。在rails中,数据层称为Model,业务层称为Controller,用户界面层称为Views。

      这里有几个不错的起点: rails guides, rails tutorial for rails 3.2

      【讨论】:

      • 在我看来,Asp.net 的业务层比 Rails 的控制器做得更多。
      • 这有点误导,因为模型应该集中大部分业务逻辑,而不是控制器。
      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多