play框架控制器中的业务方法

时间:2011-05-09 10:47:09

标签: model-view-controller playframework business-logic

有人可以解释是否有可能在playfamewok的控制中有一些受保护的,关键的方法,除了:

  

public static void method-action-name(){}

例如,如果我有这样的方法:

  

protected static int doSomeWork(){}

此方法将在 method-action-name ()中调用..

public static void method-action-name() {
  ...
  int resul = doSomeWork();
  ...
}

我不想使用长动作方法,因此我想将其拆分为较小的动作方法,然后在其他动作方法中重复使用它。

我的意思是(从playframework的角度来看)在控制器端有这样的方法而不是在域类中使用它们是否正常?例如,在Spring Framework中,我们使用BP(业务流程)bean。

在playframework控制器中为业务方法提供这样的辅助方法是否可以?

在回答后添加&评论 的 例如,如果我有SearchController类,那么对于那个类很好的方法,比如 preSearch1() preSearch2() search()方法会使用,但如果我将这些方法(1,2)移动到另一个类,那么它应该是名为 SearchHelper 的类吗?在名为 / src / helpers 的包中......不是很好,因为它们也与搜索有关。但也许然后进入 / src / bp / SearchBP (bp =业务流程)。然后在 controllers / Search 中使用 / bp / SearchBP ,使用一些Model对象和.save()DAO方法(SearchBP可以使用Domain方法,Search类可以使用Domain方法也是如此)

这里的问题:什么类的ant包对这些方法很好? (我只是在示例中看到它 - 总是非常简单地使用使用域对象的控制器,这就是我要问的原因)

2 个答案:

答案 0 :(得分:4)

是的,你可以。控制器是普通的类,你可以添加你想要的任何东西。可能不建议用辅助方法使它们混乱,我个人会将它们移到另一个类,但你可以按照你说的做。

回答编辑:

包的名称是“无关紧要的”,不会改变太多:)。您可以将它们放在controllers.support.search下,这意味着controllers.support是一个包含辅助类的包,子包搜索包含与搜索相关的辅助类和方法。

一种替代方案(我更喜欢)是在“服务”包中为其创建服务层。你似乎来自Spring背景,所以它应该是你自然而然的。这些服务根据需要在控制器中实例化,或者可以仅通过静态方法使用,并执行主要业务逻辑。这样控制器只能处理“更高级别”的逻辑。

另一种选择是将尽可能多的逻辑移入模型(避免使用Anemic Domain Model),并使用控制器中的Model类。

正如开发中的大多数决策,哪一个更好取决于您的经验,代码库中可能的影响/限制,项目中的实践......无论如何,您总是可以重构。只需选择您更习惯的那​​个(似乎是服务方法)并编写代码:)

答案 1 :(得分:1)

任何复杂到足以被描述为“业务逻辑”(而不是“表示逻辑”)的行为都属于模型,而不是控制器。如果您的模型除了映射到一组数据库表之外什么都不做,那么它就无法正常工作。特别是权限和访问控制之类的东西应该由模型强制执行。