
まず、考慮されている通り、暗号化複合化の知識はドメイン層にもたせたくないですね。 なので基本的には1の実装が良いと思います。 あとは、エンティティ自体が暗号化していること自体を意識する必要があるかどうかによりますね。 エンティティが暗号化を意識せず、あくまで永続化時の問題であれば、リポジトリの実装クラスに閉じ込めるのが良いと思います。その中でも、暗号化、複合化の具体的な処理は別のクラスに移乗してリポジトリの実装クラスからそれを呼ぶだけ、とするとある程度肥大化は抑えられると思います。 一方、エンティティが暗号化を意識する場合、例えば ユーザーオブジェクトがパスワードという属性を持ち、この項目のみ暗号化した値をdbに保持するとします。この場合、エンティティとしては「パスワード」という値をStiringで保持するのではなく「暗号化済パスワード」という型を定義して保持させる方法もあります。 そして、「平文のパスワード」を渡すとに暗号化済パスワード」返してくれるような暗号化処理オブジェクトのインターフェイスをドメイン層に定義して、インフラ層で具体的な実装をします。 「リポジトリはリストのように使う」ので、ユーザーをリポジトリにいれたときは平文、ユーザーをリポジトリから取り出すと一部暗号化、と暗黙的にされると混乱の元になるので、できればそこは明示的に意識できた方がわかりやすいので、このような方針をとります。 この判断の分岐はエンティティに暗号化をドメイン層のオブジェクトを意識させるかどうか、どちらの方が可読性、保守性が高まるか、です。検討してみてください。
スポンサーリンク
質問はquerie.meからお願いします。さんになんでも質問しよう!
質問
スタンプ
利用できるスタンプはありません。
スポンサーリンク
過去に答えた質問
スポンサーリンク