2011-06-09 41 views
10

在Grails中,我們有包含從控制器調用的業務邏輯的服務類。 我在哪裏可以在Play Framework項目中添加服務類?如果我在控制器中定義了不是請求操作的方法,而是在控制器中定義了諸如int findMax(int a,int b)等實用方法,是否可以在控制器中定義這些方法,以及如何聲明這些方法?在Play Framework中放置服務類的位置?

回答

8

根據具體情況,業務邏輯一般應作爲模型類的方法實現,無論是靜態還是非靜態。

儘管沒有關於此的規則,但實用程序方法應該在包中使用它們自己的實用程序類,或者可以根據上下文成爲模型類的一部分。

作爲示例,比較兩個基元(例如findMax(int, int)類)的簡單實用程序方法在實用程序類中效果更好,但方法(如findOldest(Person, Person))更適合在Person模型類上作爲靜態方法。

+2

假設我在project_root/app下創建了util文件夾,會自動播放框架來獲取那裏定義的類,或者我需要在配置中添加一些東西?如果我在project_root下創建util文件夾而不是在app下創建? – ace 2011-06-10 08:13:50

+0

應用程序文件夾是所有的Java源代碼去的地方,所以你的util文件夾應該放在那裏。您無需更改配置,Play會自動提取。此處的任何代碼都將位於util包中。 – Rich 2011-06-10 10:41:28

+0

我很想知道爲什麼這個答案有一個downvote。 – Rich 2014-09-15 08:49:20

2

對此沒有規定。我個人會將效用方法放在效用類中。實用程序類和服務類應遵循正常的包規則,即com.stackoverflow.services.statistic.UsageCalculator

0

您可以在應用程序文件夾中創建包並編寫您自己的服務類或邏輯類。 然後,您可以在應用程序控制器中使用此類及其方法。

Make Package in app folder: for eg。 play.service.chiken並在此包使新類

{

package play.service.chiken; 

     import java.util.ArrayList; 
     import java.util.List; 

     import models.QuotesModel; 

      public class Utility { 


    public List<QuotesModel> getListOfQuotes(int itemCount) 
      { 
    ArrayList<QuotesModel> list=new ArrayList<QuotesModel>(10); 
    for(int x=0;x<itemCount;x++) 
    { 
     QuotesModel quotesModel=new QuotesModel(); 
     quotesModel.authorName=""; 
     quotesModel.category=""; 
     quotesModel.bookmark="Y"; 
     quotesModel.id=x+""; 
     quotesModel.content="Quotes n umber ,njdsfkhwjd jr x=" +x; 
     list.add(quotesModel); 
    } 
    return list; 
      } 
      } 

      } 

然後使用這個類在應用程序控制器:在路由器

public static Result entryInDB() { 
    Utility util=new Utility(); 
    List<QuotesModel> list=util.getListOfQuotes(50); 

    list.get(2).save(); 

    List<QuotesModel> secondlist=QuotesModel.find.all(); 

    return ok(index.render("Size Of List "+secondlist.toString())); 
} 

變化application.conf文件:

# Ebean configuration 
     # ~~~~~ 
     # You can declare as many Ebean servers as you want. 
     # By convention, the default server is named `default` 
     # 
     ebean.default="models.*" 

在路由器中:

# Home page 
     GET /       controllers.Application.index() 
    GET  /addbar    controllers.Application.addBar() 
    GET  /entryindb    controllers.Application.entryInDB() 
相關問題