Ich versuche, eine einfache Aggregation Wurzel in Slick zu implementieren. Aber ich weiß nicht wirklich, was der beste Weg ist, das zu tun.Zusammenfassung Wurzel-Implementierung mit Slick
Hier ist meine Domain-Objekte:
case class Project(id: UUID,
name: String,
state: ProjectState,
description: String,
team: String,
tags: Set[String]
Ich möchte die "Tags" speichern, in einer separaten Tabelle, und stellen Sie "Projekt" Objekte aus "projects_table" und "project_tags_table" up
Hier ist meine Tabellendefinition:
class ProjectTable(tag: Tag) extends Table[ProjectTableRecord](tag, Some("octopus_service"), "projects") {
def id: Rep[UUID] = column[UUID]("id", O.PrimaryKey)
def name: Rep[String] = column[String]("name")
def state: Rep[ProjectState] = column[ProjectState]("state")
def description: Rep[String] = column[String]("description")
def team: Rep[String] = column[String]("team")
override def * : ProvenShape[ProjectTableRecord] = (id, name, state, description, team, created, lastModified) <> (
(ProjectTableRecord.apply _).tupled, ProjectTableRecord.unapply
)
}
class ProjectTagTable(tag: Tag) extends Table[ProjectTag](tag, Some("octopus_service"), "project_tags") {
def projectID: Rep[UUID] = column[UUID]("project_id")
def name: Rep[String] = column[String]("name")
def project = foreignKey("PROJECT_FK", projectID, TableQuery[ProjectTable])(_.id, onUpdate = ForeignKeyAction.Restrict, onDelete = ForeignKeyAction.Cascade)
override def * : ProvenShape[ProjectTag] = (projectID, name) <> (
ProjectTag.tupled, ProjectTag.unapply
)
}
Wie kann ich "Projekt" Objekte aus dem Verbinden dieser 2 Tabellen generieren?
Vielen Dank im Voraus :)
ActiveRecord ist kein angemessenes Persistenzmuster für DDD-ARs. – plalx
Genau - das ist der Sinn der obigen Antwort. Ihr root muss (muss) nicht zu einem bestimmten db-Tupel passen, aber Slick funktioniert grundsätzlich auf dieser Ebene. Daher hältst du keine blanke Slick-Ebene als AR. –
Ich meinte, dass ARs nicht auf die db zugreifen sollten. Persistenzdetails sollen in einem Repository abstrahiert werden. Nun, das ist, wenn Sie reines DDD machen wollen, wo sich das Modell nur auf das Geschäft konzentriert. Es gibt keine definitive Regel, aber bei einer komplexen Domänenlogik wollen Sie keine Persistenzlogik hineinwerfen. – plalx