play framework 2.3でレイヤードアーキテクチャを強制する

記事「Play2.1でsbtのマルチプロジェクトビルド機能を利用してレイヤードアーキテクチャを強制する方法を」参考に, play2.3でのBuild.scalaの記述をマイグレーションガイドを見ながら試してみました.

GitHub:53ningen/LayeredArchitectureInPlay2.3

今回ためしてみたこと

以下のようなディレクトリ構造を持たせ,application/domain/infrastructureという3層のレイヤー構造でアプリケーションを構築します. このときapplicationからはdomainとinfrastructure, domainからはinfrastructureしか参照出来ないようにプロジェクトの設定をします. 当然infrastructureから上位層にはアクセスできず,IDEの補完もでない状態になります.

build.sbt

以下のように書けばおk. 一旦ビルドするとmodules以下のlayeredApplication, layeredDomain, layeredInfrastructureが勝手に生成されビルドが失敗するので, 出来た各サブモジュールのなかにまたbuild.sbtを作る.

import play.PlayScala

name := """Layered"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayScala)
  .aggregate(layeredApplication, layeredDomain, layeredInfrastructure)
  .dependsOn(layeredApplication, layeredDomain, layeredInfrastructure)

lazy val layeredApplication = (project in file("modules/layered-application"))
  .enablePlugins(PlayScala)
  .dependsOn(layeredDomain, layeredInfrastructure)

lazy val layeredDomain = (project in file("modules/layered-domain"))
  .enablePlugins(PlayScala)
  .dependsOn(layeredInfrastructure)

lazy val layeredInfrastructure = (project in file("modules/layered-infrastructure"))
  .enablePlugins(PlayScala)

scalaVersion := "2.11.1"

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  ws
)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください