プロジェクトの概要はこちら
今回の機能に関するIssueはこちらになります。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/issues/9
modules/core/app/services/bases/SiteService.java
を作ります。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/issues/9
ロジック層
まずはデータを取得していく、MVCで言えばMのあたりから作っていきます。modules/core/app/services/bases/SiteService.java
を作ります。
データの件数取得、データの一覧取得の条件は
getSiteCriteria
のメソッドにして共通の処理を呼ぶようにしています。
- public static PagingList<Site> getSiteCriteria() {
- return find.where().orderBy().desc("createDate")
- .findPagingList(ApplicationConfigUtils.MAX_PER_PAGE);
- }
- public static List<Site> getSiteResultList(Integer page) {
- PagingList<Site> pagingList = getSiteCriteria();
- Page<Site> currentPage = pagingList.getPage(page);
- return currentPage.getList();
- }
- public static Integer getSiteResultCount(Integer page) {
- PagingList<Site> pagingList = getSiteCriteria();
- return pagingList.getTotalPageCount();
- }
なかなかPlayFrameworkでページャーを使ってるサンプルがないのですが、このようにして呼ぶみたいです。
つぎにSiteServiceをextendsしたクラス
を作ります。
- public static List<SiteBean> getSiteBeanResultList(Integer page) {
- ArrayList<SiteBean> list = new ArrayList<SiteBean>();
- List<Site> resultList = getSiteResultList(page);
- for (Site site : resultList) {
- list.add(setSiteBean(site));
- }
- return list;
- }
SiteServiceはDBに直接操作を行うクラスという位置づけにしていて、
Controller側ではそのラッパーのSiteBeanServiceを呼ぶようにしています。
このクラスではDBからデータを取得する処理をSiteServiceから呼び出して、SiteBeanにセットする処理をしています。
こうすることで今後例えばキャッシュ機構を組み込む、などのようになった場合にDBアクセス層のSiteServiceはそのままで、SiteBeanServiceにキャッシュ機構を組み込めばいいようになります。
今の段階ではSiteBeanはSiteクラスをextendsしていますが、これはEBeanのModelではないため、多分extendsはやめると思います。。
JavaだとこういったModel,Bean系はsetter,getterを使うのが常ですが、Playはpublicにするのが流儀っぽいので、そういう感じにしています。
1ページに表示する件数については
modules/base/app/utils/base/ApplicationConfigUtils.java
に記述しています。こういうのは1つのサービス上統一するケースが多いと思うので、baseモジュールに書いてあります。
のコントローラ側では
のようにSiteBeanServiceを呼びます。
テンプレート側では
のようにしてリストを渡します。
1ページに表示する件数については
modules/base/app/utils/base/ApplicationConfigUtils.java
に記述しています。こういうのは1つのサービス上統一するケースが多いと思うので、baseモジュールに書いてあります。
- public static final int MAX_PER_PAGE = 10;
コントローラ層
app/controllers/Application.javaのコントローラ側では
- List<sitebean> resultList = SiteBeanService.getSiteBeanResultList(0);
- </sitebean>
のようにSiteBeanServiceを呼びます。
テンプレート側では
- @(message: String, description: String, beanList: List[models.beans.SiteBean])
のようにしてリストを渡します。
- <div class="container">
- <div class="row">
- @if(beanList != null && beanList.size() > 0){
- @for(bean <- beanList){
- <div class="col-sm-6 col-md-4">
- <div class="thumbnail">
- <a href="@{bean.url}"><img title="@{bean.title}" src="@{bean.thumbUrl}" alt="@{bean.url}" /></a>
- </div>
- </div>
- }
- }
- </div>
- </div>
でSiteBeanの一覧を表示します。
出来上がったのがこんなかんじになっています。
0 件のコメント:
コメントを投稿