2011-06-09 17 views
10

En Grails tenemos clases de servicio que contienen lógica de negocios que se llama desde los controladores. ¿Dónde pongo las clases de servicio en el proyecto Play Framework? Y si defino métodos en el controlador que no son acciones de solicitud sino métodos de utilidad como int findMax (int a, int b) en el controlador, ¿es posible definirlo dentro del controlador y cómo declaro tales métodos?¿Dónde poner clases de servicio en Play Framework?

Respuesta

8

La lógica de negocios en general debería implementarse como métodos en las clases de modelo, sea estáticamente o no, según el contexto.

Si bien no existen reglas al respecto, los métodos de utilidad deben ir en su propia clase de utilidad en un paquete, o pueden ser parte de las clases de modelo según el contexto.

Como ejemplo, un método de utilidad simple que compara dos primitivos, como su clase findMax(int, int), es mejor en una clase de utilidad, aunque un método como findOldest(Person, Person) es más adecuado para ser un método estático en la clase de modelo de persona .

+2

Supongamos que creo una carpeta de utilidades en raíz_proyecto/app, ¿jugaría framework a recoger automáticamente las clases definidas allí o tendré que poner algo en la configuración? ¿Qué sucede si creo una carpeta de utilidades en raíz_proyecto y no debajo de la aplicación? – ace

+0

La carpeta de la aplicación es donde va todo el código fuente de Java, por lo que su carpeta de utilidades debe colocarse allí. No necesita cambiar la configuración, Play la recogerá automáticamente. Cualquier código aquí estará en el paquete util. – Rich

+0

Me interesaría saber por qué esta respuesta ha tenido un voto negativo. – Rich

2

No hay reglas para esto. Yo personalmente pondría los métodos de utilidad en clases de utilidad. Las clases de utilidad y las clases de servicio deben seguir las reglas de paquete normales, es decir, com.stackoverflow.services.statistic.UsageCalculator.

0

puede crear un paquete en la carpeta de aplicaciones y escribir su propia clase de servicio o clase lógica. Luego puede usar esta clase y su método en el controlador de aplicaciones.

Hacer paquete en la carpeta de aplicaciones: por ej. play.service.chiken y hacer nueva clase en este paquete

{

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; 
      } 
      } 

      } 

a continuación, utilizar esta clase en Controlador de aplicación:

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())); 
} 

Cambio en el router y application.conf archivo:

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

Enrutador:

# Home page 
     GET /       controllers.Application.index() 
    GET  /addbar    controllers.Application.addBar() 
    GET  /entryindb    controllers.Application.entryInDB()