記事「Play2.1 で sbt のマルチプロジェクトビルド機能を利用してレイヤードアーキテクチャを強制する方法を」参考に, play2.3 での Build.scala の記述をマイグレーションガイドを見ながら試してみました.
GitHub:53ningen/LayeredArchitectureInPlay2.3
以下のようなディレクトリ構造を持たせ,application/domain/infrastructure という3層のレイヤー構造でアプリケーションを構築します. このとき application からは domain と infrastructure, domain からは infrastructure しか参照出来ないようにプロジェクトの設定をします. 当然 infrastructure から上位層にはアクセスできず,IDE の補完もでない状態になります.
以下のように書けばお 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 )
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです