這裏下面是一個Play應用程序的常規項目佈局:用蛋糕圖案時如何構建一個遊戲項目
myProject
+ app
+ controllers
+ models
+ views
我想controllers
,models
和views
內容很清楚,我們中的大多數。現在假設我們需要用蛋糕圖案來實現DAO服務:
DaoServiceComponent.scala
:
trait DaoServiceComponent[A] {
def daoService: DaoService
trait DaoService {
def insert(entity: A): Future[A]
def find(id: Id): Future[Option[A]]
...
}
}
trait DefaultDaoServiceComponent[A] extends DaoServiceComponent[A] {
this: DaoComponent[A] =>
def daoService = new DaoService {
def insert(entity: A) = dao.insert(entity)
def find(id: Id) = dao.find(id)
...
}
}
DaoComponent.scala
:
trait DaoComponent[A] {
def dao: Dao
trait Dao {
def insert(entity: A): Future[A]
def find(id: Id): Future[Option[A]]
...
}
}
UserDaoComponent.scala
:
trait UserDaoComponent extends DaoComponent[User] {
protected val collection: JSONCollection
def dao = new Dao {
def insert(entity: User): Future[User] = {
...
}
def find(id: Id): Future[Option[User]] = {
...
}
}
}
最後,我們在我們的控制器對象連線了一切如常:
object Users extends Controller {
private val userService: DaoServiceComponent[User]#DaoService =
new DefaultDaoServiceComponent[User]
with UserDaoComponent {
val collection = db.collection[JSONCollection]("users")
}.daoService
def create = Action.async(parse.json) { implicit request =>
request.body.validate[User].fold(
valid = { user =>
userService.insert()..
...
}
}
現在回到我們的項目佈局,我們應該在哪裏放DaoServiceComponent
,DaoComponent
,UserDaoComponent
,和任何其他支持類?這些文件是否應該放在services
目錄中?
myProject
+ app
+ controllers
+ models
+ services
+ DaoComponent.scala
+ DaoException.scala
+ DaoServiceComponent.scala
+ EmailServiceComponent.scala
+ RichEmailComponent.scala
+ ServiceException.scala
+ UserDaoComponent.scala
+ ...
+ views