Где разместить классы обслуживания в Play Framework?

В Grails у нас есть классы обслуживания, которые содержат бизнес-логику, вызываемую из контроллеров. Где я могу поместить классы обслуживания в проект Play Framework? И если я определяю методы в контроллере, которые не являются запросами, но такие методы, как int findMax (int a, int b) в контроллере, можно ли определить внутри контроллера и как объявить такие методы?

Ответ 1

Бизнес-логика в целом должна быть реализована как методы в классах моделей, статически или нет, в зависимости от контекста.

В то время как правил нет, методы полезности должны либо идти в свой собственный класс утилиты в пакете, либо быть частью классов модели в зависимости от контекста.

В качестве примера, простой утилитный метод, который сравнивает два примитива, например ваш класс findMax(int, int), лучше в классе утилит, хотя метод, такой как findOldest(Person, Person), лучше подходит для статического метода на Класс персональной модели.

Ответ 2

Для этого нет правил. Я лично поместил бы утилиты-методы в служебные классы. Утилиты-классы и классы обслуживания должны следовать нормальным правилам пакетов, т.е. com.stackoverflow.services.statistic.UsageCalculator.

Ответ 3

вы можете создать пакет в папке приложения и написать свой собственный класс обслуживания или логический класс. Затем вы можете использовать этот класс и его метод в контроллере приложений.

Сделать пакет в папке приложения: например. 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;
            }
           }

           }

Затем используйте этот класс в Application Controller:

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

Изменение в файле router и 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()