【问题标题】:Am I thinking about MVC correctly?我是否正确地考虑了 MVC?
【发布时间】:2013-09-21 05:32:41
【问题描述】:

我正在编写一份申请,详细说明申请人通过 Salesforce 在我们公司的状态;当我们的一名员工输入他们的查询 ID 时,它会显示他们的状态(已清除、未清除),如果未清除,则显示申请人在继续其计划之前需要解决的问题。

我想确保我正确地考虑了我的应用程序的不同区域。这是我所拥有的:

  • Model:申请者类有动态函数,如Application.find_by_Enquiry_Token__c_and_Account_dot_LastName_from_Opportunity,请求时返回来自Salesforce的信息
  • 控制器:解析 Salesforce 返回的数据,并使用信息创建哈希,例如@applicant[:general_information] = {:first_name = data[:Account].first[:FirstName], :last_name = data[:Account].first[:LastName]}
  • 查看:显示控制器生成的信息。但是,它有自己的逻辑和检查,例如更改 div 的颜色,具体取决于它们是否清晰 (class="success")、它们是否不清晰 (class="danger") 或它们是否有一些条件信息 ( class="warning")。

我认为我的观点是正确的,只是我有点担心自己的观点,因为我有一些 Ruby 代码可以根据返回的数据执行检查,主要是为了着色但也显示某些错误。这可以吗/这是否符合标准?还是应该尝试重构我的应用程序并将其推送到控制器?

【问题讨论】:

  • 您正在使用 Rails。为什么你会关心 MVC?!

标签: ruby-on-rails model-view-controller


【解决方案1】:

我想说,只要您不在视图中执行长查询或设置实例变量,就可以像在视图中那样使用一些 ruby​​ 代码。另一个开始将代码从视图移动到控制器的迹象是,如果您觉得视图变得混乱且难以理解。不过从你说的情况来看,这似乎不是问题。

我建议更改的一件事是使模型上的方法名称更短。较短的方法名称更容易理解,并且您拥有它,方法名称非常长且笨拙。除此之外,我认为你做得很好!

【讨论】:

  • 啊,方法名是动态的。它的工作原理类似于Railsfind_by SQL 数据库方法。
【解决方案2】:

在视图中显示正确的类很好,在其他任何地方都无法做到。如果您觉得您的视图变得杂乱无章,请考虑将它们分成部分或使用Haml 而不是 ERB 来获取视图。

【讨论】:

    【解决方案3】:

    模型是您的应用程序的业务逻辑所在,包括解析数据以及与您的域相关的所有内容。

    控制器处理与用户的交互。因此,基本上,在 web 应用程序中,如果用户访问 URL,您的应用程序应该做什么。除了将任务交给其他类然后渲染视图之外,这不应该做任何事情。

    视图就是这样。它们应该尽可能简单明了。您可以将视图中的逻辑提取到助手甚至演示者/装饰器中。视图处理向用户显示的内容。

    在您的应用中,我会: 处理与 Salesforce 通信的 SalesforceApiGateway 类,如果已经有一个 gem 来处理这个,我不会感到惊讶。

    您正在访问的每个 Salesforce 资源的模型类。这些将设置对 API 网关的正确调用,以提取给定资源的正确数据。 这可能会很快变得棘手,并且可能需要进一步提取:1 个用于与网关接口的类和一个模型类,用于您希望从应用程序访问它们的资源。

    您的控制器不应解析任何 Salesforce 数据,而是接受用户请求并将其连接到正确的模型。

    要记住的最重要的一点是,您的课程应该只做一件事且只做一件事。如果你不能在不说“和”的情况下谈论你的课程,那么它可能做得太多了。 所以你有一个与 API 接口的类。您有一个解析 API 的类。您有一个类可以将 api 的资源带入您的域等。

    【讨论】:

    • 所以我的很多处理都应该转移到各种模型上?
    • 如果要解决的问题实际上并不存在于您的域中,那么它应该在 lib 中。您应该将 lib 视为可以轻松提取到 gem 中的东西
    猜你喜欢
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多