📘DDDを実践するためのリポジトリ層の設計(Go言語による例)2024/01/01に公開2025/03/143件GoDDDクリーンアーキテクチャドメイン駆動設計techDiscussionjundayo2024/03/01素晴らしい記事をありがとうございます。 集約の設計に頭を悩ませていたので、とても参考になりました!! 一点質問させて下さい。 Repositoryに実装したGetByUserIDを利用して、UserIDに紐づいたショッピングカートの一覧情報をJSON形式で返すような実装を実現したいとします。クリーンアーキテクチャのようなアーキテクチャを採用していると、 Usecase層でRepositoryを利用し対象となるドメインモデルの一覧を取得 1で取得したモデルをInterface層に渡す Response用に定義した構造体にマッピングしてJSONに変換する 3で生成したJSONを返す みたいな流れになるかと思います。ドメインモデルをインターフェースで定義した際、上記ステップ3のようなインターフェースから構造体へのマッピング・変換はどのようにして実装するのが良いでしょうか? ドメインモデルのインターフェースに package domain type ShoppingCart interface { ID() uuid.UUID GetUserID() uuid.UUID GetItems() []*CartItem AddItem(Product Product, Quantity int) error } といった所謂Getterメソッドを定義する方法を思いつきましたが、Getterメソッドを定義してしまうと、モデルの知識が外部に流出してしまい、インターフェースとして定義したうま味が無くなってしまう気がしています。 私では他に良いアイデアが思い浮かばなかったので、質問させて頂きました🙇♂️ YotaHamada2024/12/06に更新jundayoさん ご質問いただき、ありがとうございます。 ご質問の点は確かに悩みどころですね。 とくに正解はないかと思いますが、記事に追記させていただきました。 少しでもご参考になりましたら幸いです。 jundayo2024/03/02濱田さん お忙しい所、ご回答して頂きありがとうございます。 なるほど。プロパティ用の構造体を別途定義して、それを介してモデルの属性の取得等を行えば、確かに各属性ごとにメソッドを定義する必要はなくなりますし、公開したくない属性に関しても隠蔽できていますね! 私1人では思いつかなかったので大変勉強になります。是非参考にさせて頂きます🙇♂️ 返信を追加
jundayo2024/03/01素晴らしい記事をありがとうございます。 集約の設計に頭を悩ませていたので、とても参考になりました!! 一点質問させて下さい。 Repositoryに実装したGetByUserIDを利用して、UserIDに紐づいたショッピングカートの一覧情報をJSON形式で返すような実装を実現したいとします。クリーンアーキテクチャのようなアーキテクチャを採用していると、 Usecase層でRepositoryを利用し対象となるドメインモデルの一覧を取得 1で取得したモデルをInterface層に渡す Response用に定義した構造体にマッピングしてJSONに変換する 3で生成したJSONを返す みたいな流れになるかと思います。ドメインモデルをインターフェースで定義した際、上記ステップ3のようなインターフェースから構造体へのマッピング・変換はどのようにして実装するのが良いでしょうか? ドメインモデルのインターフェースに package domain type ShoppingCart interface { ID() uuid.UUID GetUserID() uuid.UUID GetItems() []*CartItem AddItem(Product Product, Quantity int) error } といった所謂Getterメソッドを定義する方法を思いつきましたが、Getterメソッドを定義してしまうと、モデルの知識が外部に流出してしまい、インターフェースとして定義したうま味が無くなってしまう気がしています。 私では他に良いアイデアが思い浮かばなかったので、質問させて頂きました🙇♂️ YotaHamada2024/12/06に更新jundayoさん ご質問いただき、ありがとうございます。 ご質問の点は確かに悩みどころですね。 とくに正解はないかと思いますが、記事に追記させていただきました。 少しでもご参考になりましたら幸いです。 jundayo2024/03/02濱田さん お忙しい所、ご回答して頂きありがとうございます。 なるほど。プロパティ用の構造体を別途定義して、それを介してモデルの属性の取得等を行えば、確かに各属性ごとにメソッドを定義する必要はなくなりますし、公開したくない属性に関しても隠蔽できていますね! 私1人では思いつかなかったので大変勉強になります。是非参考にさせて頂きます🙇♂️ 返信を追加
YotaHamada2024/12/06に更新jundayoさん ご質問いただき、ありがとうございます。 ご質問の点は確かに悩みどころですね。 とくに正解はないかと思いますが、記事に追記させていただきました。 少しでもご参考になりましたら幸いです。
jundayo2024/03/02濱田さん お忙しい所、ご回答して頂きありがとうございます。 なるほど。プロパティ用の構造体を別途定義して、それを介してモデルの属性の取得等を行えば、確かに各属性ごとにメソッドを定義する必要はなくなりますし、公開したくない属性に関しても隠蔽できていますね! 私1人では思いつかなかったので大変勉強になります。是非参考にさせて頂きます🙇♂️
Discussion
素晴らしい記事をありがとうございます。
集約の設計に頭を悩ませていたので、とても参考になりました!!
一点質問させて下さい。
Repositoryに実装したGetByUserIDを利用して、UserIDに紐づいたショッピングカートの一覧情報をJSON形式で返すような実装を実現したいとします。クリーンアーキテクチャのようなアーキテクチャを採用していると、
みたいな流れになるかと思います。ドメインモデルをインターフェースで定義した際、上記ステップ3のようなインターフェースから構造体へのマッピング・変換はどのようにして実装するのが良いでしょうか?
ドメインモデルのインターフェースに
といった所謂Getterメソッドを定義する方法を思いつきましたが、Getterメソッドを定義してしまうと、モデルの知識が外部に流出してしまい、インターフェースとして定義したうま味が無くなってしまう気がしています。
私では他に良いアイデアが思い浮かばなかったので、質問させて頂きました🙇♂️
jundayoさん
ご質問いただき、ありがとうございます。
ご質問の点は確かに悩みどころですね。
とくに正解はないかと思いますが、記事に追記させていただきました。
少しでもご参考になりましたら幸いです。
濱田さん
お忙しい所、ご回答して頂きありがとうございます。
なるほど。プロパティ用の構造体を別途定義して、それを介してモデルの属性の取得等を行えば、確かに各属性ごとにメソッドを定義する必要はなくなりますし、公開したくない属性に関しても隠蔽できていますね!
私1人では思いつかなかったので大変勉強になります。是非参考にさせて頂きます🙇♂️