インスタンスフィールドとアプリケーションサービス
from
メソッドの実行と暗黙的なインプットとアウトプット
メソッドを関数として捉えたとき、
ミュータブル
な
インスタンスフィールド
は
グローバル変数
であるかのようである。さらに次を照らし合わせると、
クラス
は
アプリケーションサービス
のようでもある。
「
グローバル変数
」と「関数」との関係
「
ミュータブル
な
インスタンスフィールド
」と「メソッド」との関係
インスタンスフィールド
は当然
インスタンス
に閉じている。その
インスタンス
(世界)において
インスタンスフィールド
は
グローバル変数
であると言える。メソッドには暗黙的なインプットとアウトプットがある。これは
リポジトリ
を利用した
アプリケーションサービス
の実装と同等なのかもしれない。
code:kotlin
fun ApplicationService.doSomething(id) {
val domainObject = repository.findBy(id) // グローバル変数からcopyするのと同じ
domainObject.doSomething() // copyを変更する
repository.save(domainObject) // グローバル変数をswapするのと同じ
}
むしろ、
インスタンスフィールド
をもつ
ドメインオブジェクト
などは
アプリケーションサービス
の延長にあって、「copyを変更する」
役割り
をもつと考えてもいいのかもしれない?
ref
整合性の担保を集約ルート自身の役割りにしなくてもいい
ref
リポジトリとグローバル変数