Skip to content

Instantly share code, notes, and snippets.

@j5ik2o
Last active July 29, 2018 01:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save j5ik2o/cdd64b77af60ad52226fa4fdcc2578f2 to your computer and use it in GitHub Desktop.
Save j5ik2o/cdd64b77af60ad52226fa4fdcc2578f2 to your computer and use it in GitHub Desktop.
case class Room(id: Long, members: Seq[Member])
// このロジックはRoomが持つべき振る舞いだった場合(ドメインロジックがドメインオブジェクトの外側にある状態)
room.copy(members = room.members :+ newMember)
// ほんとは、こうしたらよいのでは
case class Room(id: Long, members: Seq[Member]) {
def addMember(value: Member): Room =
copy(members = this.members :+ value)
}
room.addMember(newMember)
// membersがpublicのままだと気づかずに書いてしまう
// だいたいこういうコードはRoomのすぐ隣ではなく、かなり離れたところに分散して記述されることが多い。
// Roomに対して何が行われるか結局わかりにくいコードになる。
room.copy(members = room.members :+ newMember)
// privateにできるならいいけど、現実的じゃない場合
// breachEncapsulationOfプレフィックスを付けるという手もあるが悩ましい(あ、これは仕方ないときは使っていいけど、乱用すると危険だよーみたいなのがわかる)
room.copy(breachEncapsulationOfMembers = room.breachEncapsulationOfMembers :+ newMember)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment