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