我正确地考虑MVC吗?

时间:2013-09-21 05:32:41

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

我正在编写一份申请,通过Salesforce详细说明申请人在我们公司的地位;当我们的一名员工输入他们的查询ID时,它会显示他们的状态(已清除,未清除),如果没有清除,则表明申请人需要先解决的问题才能进入他们的计划。

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

  • 模型:申请者类具有动态功能,例如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代码来执行基于返回数据的检查,主要是着色而且还显示某些错误。这样可以/这是否符合标准?或者我应该尝试重构我的应用程序并将其推送到控制器?

3 个答案:

答案 0 :(得分:0)

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

我建议更改的一件事是缩短模型上的方法名称。更短的方法名称更容易理解,并且正如您所拥有的那样,方法名称非常长且难以处理。除此之外,我认为你做得很好!

答案 1 :(得分:0)

在视图中显示正确的类很好,在其他任何地方都无法真正完成。如果您认为自己的观点变得混乱,请考虑将其分为部分或使用Haml作为观点而不是ERB。

答案 2 :(得分:0)

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

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

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

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

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

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

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