プロジェクトの概要はこちら
今回の機能に関する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のコントローラ側では
ListresultList = SiteBeanService.getSiteBeanResultList(0);
のように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 件のコメント:
コメントを投稿