2014年2月19日水曜日

PlayFrameworkで会員制ギャラリーサイトを作る習作:アプリケーションの雛形を準備する

さて、アプリケーションの作成に先立って、PlayFrameworkのアプリケーションの準備をしておきます。

  • Typesafe Activatorを元にプロジェクトを作成する
  • Bootstrapの3系を組み込む
  • Ebeanを組み込む
  • 各種設定ファイルを管理がしやすいように分割しておく
ところまでやったのがこのリビジョンです。(料理番組的・・・)

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/cbd6850947c7d31fc3d4cb9899a4ee197aeaf57f

今回のアプリケーションではユーザー側と管理者側とを同じ1台のサーバで処理する想定です。
この場合、データベースは一緒になりますが、ルーティング及びコントローラは別になるため、サブプロジェクトとして予め準備をしておきます。

このエントリーはこのチケットの解説です。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/issues/7

サブプロジェクトの作り方はこちらのエントリーを参照して下さい。
Play Frameworkでサブプロジェクトを使い倒す

このエントリーと同じ設計思想で

  • common:自作ライブラリ系
  • base:Controller共通処理系・Filter系
  • core:ORM・DB操作系
  • admin:管理画面

のサブプロジェクトを用意します。

common

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/master/modules/common

どうやらコンパイルをすると自動的に

  • .classpath
  • .project

ファイルが生成される模様。多分あとで消す。
src/main/javaなどのフォルダも自動的に生成されていました。とりあえずGitで管理したいので、 .gitkeep を置いておきます。

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/master/modules/common/src/main/java/components

にあるような、Javaで使いまわせるようなUtilityを配置します。

base

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/master/modules/base

これはPlayのサブプロジェクトになります。
各ディレクトリの形式もPlayの形式に従っています。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/master/modules/base/app/cache/base

にあるような、Playのapiを使用する共通処理を配置します。
わざわざcacheフォルダの中にサブプロジェクト名と同じサブフォルダを掘っているのは、後述のadminプロジェクトの構成と合わせるためこのようにしています。

  • Cache処理
  • Filter処理

などのように、Playのプロジェクトで共通して使えるような処理系を配置します。
これはPlay形式のサブプロジェクトになるので、build.sbtを配置しておきます。

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/blob/master/modules/base/build.sbt

とりあえずnameをサブプロジェクト用に書き換えたものを置いてみました。

ちなみにPlay Framework2.2.xでcacheを使うときには
libraryDependencies ++= Seq(
  // Select Play modules
  javaJdbc,  // Java database API
  javaEbean, // Java Ebean plugin
  //javaJpa,   // Java JPA plugin
  javaCore,  // The core Java API
  cache,
 "org.webjars" %% "webjars-play" % "2.2.0",
 "org.webjars" % "bootstrap" % "3.1.1",
   "org.webjars" % "font-awesome" % "4.0.3",
  "mysql" % "mysql-connector-java" % "5.1.29")

のようにlibraryDependenciesにcacheを追加しておきます。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/blob/master/build.sbt

core

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/master/modules/core

ここにはフロントエンド側、管理画面側で共通で使えるDB操作系の処理を配置します。
model周りやmodelを操作するservice周り、modelのラッパー的に使用するbeansを置くことになると思います。

admin

お待たせしました、やっとそれっぽいサブプロジェクトの登場です。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/tree/master/modules/admin

ここでは管理画面の処理を起きます。
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/blob/master/modules/admin/app/controllers/admin/ApplicationController.java

のような感じですね。個人的にControllerのクラス名にはXXXControllerとしたいのは僕だけでしょうか?
さて、ちょっとControllerのパッケージがフロントエンド側とかぶると、ルーティングとかがめんどくさくなるので、controllers/admin/ApplicationController.java みたいな感じの場所においています。viewも同様です。

ルーティングですが、
https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/blob/master/conf/routes

->  /admin admin.Routes

みたいな感じでサブプロジェクトのルーティングルールを呼びます。

https://github.com/YoshiteruIwasaki/PlayFrameworkRecruitConsole/blob/master/modules/admin/conf/admin.routes

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

GET /index                  controllers.admin.ApplicationController.index()

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)
GET     /webjars/*file              controllers.WebJarAssets.at(file)

assets,webjarsについてはadminとフロントエンドと分ける方法が未だによくわかりません・・・・。

Play Framework 2.2.x では以前ブログに書いた2.1.x系とサブプロジェクトの作り方が変わっていたので大変でした。以上。


0 件のコメント:

コメントを投稿