4/29

Repositoryについて

RDBのOR Mapperとしてmybatisを使用しているのですが、
SQLのselect結果をそのままドメインオブジェクトにマッピングして返却してもよいのでしょうか?
それとも、一度プレーンなPOJOクラスを作成してそこにマッピングした後、
ドメインオブジェクトにマッピングして返すような処理にすべきでしょうか?

これがリポジトリの実装クラス内の話であれば、その通りです! まず、リポジトリはインターフェイスと実装クラスに分かれます。 インターフェイスはドメイン層、実装クラスはインフラ層です。先述したのは、後者の話ですね。 リポジトリは、 `User findById(UserId id)`といったシグニチャを定義し、そのhow(どのORMを使うか、など)の知識は一切持ちません。「ユーザーIDを渡すとユーザーが帰ってくるんだな」ということだけ示しており、ユースケースはそこに書いてある通りにユーザーIDを渡します。 インフラ層の実装クラスは、userIdが来た時にsqlを組み立て、結果をUserクラスに詰め替えて返すことで、インターフェイスに定義されているシグニチャを実現します。そのため、返すオブジェクトはUserオブジェクトである必要があるわけです。 なお、インフラ層の実装の工夫として、中間的なプレーンなpojoに詰め替えた方が良いことがあれば詰め替えても構いません。結局は戻り値がUserオブジェクトであれば、あとはインフラ層の事情なので、その中で最適化することができます。

スポンサーリンク

スポンサーリンク

スポンサーリンク