現在、DDD でアプリケーションの作成を試みています。初めての取り組みなので、いろいろつまずいているのですが、首題の件で質問があります。

DDD では、状態の保持はリポジトリを用いて行うのかなという認識です。
その際、DB を用いずに、メモリ上で一時的に保存する必要がある場合の、 in-memory リポジトリ(オンメモリリポジトリ?)の実装方法について悩んでいます。

基本的にリポジトリで保存したり取得したりする対象は集約ルートになると思うのですが、集約ルートは参照型になると思います。
愚直に実装すると、参照型をそのままリポジトリ上に保持することになるので、取得時にオブジェクトの再構築が不要になります。(というか再構築のしようがない)
この場合、取得したオブジェクトの状態を変更すると、参照型でそのままオブジェクトを取得するため、オブジェクトがダイレクトに変更されます。

Web 上や IDDD 本に出てくる例では、リポジトリはコレクションのようにして扱えるようにする というのがよく挙がっています。つまり、 AddUpdate など、明示的な API をコールしたときに初めてリポジトリが更新されるという認識です。
そのため、上記のダイレクトで変更が反映される点に違和感があります。

そこで、メモリ上に集約ルートを保存する場合の実装方法としては、どのようなやり方がよいのでしょうか。
ご助力いただければ助かります。宜しくお願い致します。