Last active
July 29, 2018 01:26
-
-
Save j5ik2o/cdd64b77af60ad52226fa4fdcc2578f2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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