質問: self.db.get({table: "user", id: id}) return User(data) def delete_user(id): self.db.delete({table: "user", id: id}) ...... ``` ご教授いただければ幸いです。
回答: このオブジェクトの名称について =============== `UserFromDatabase` のようなオブジェクトを呼ぶ名前はいくつか存在するようです。 ドメイン駆動設計やクリーンアーキテクチャにおける言葉遣いでは 正に永続化システム(RDBMSなど)からデータを引き出して `Model` のインスタンスを検索・取得・構築するためのクラスのことを `Repository` と呼びます。 また別の有名な名称としては Core J2EE Patternsというデザインパターン集で提起された `DAO` (DataAccessObject) があります。 ただし `DAO` の役割は、永続化システムそのものを後から置き換えできるように準備するものです そのため基本的にはDAOは、永続化システムに対応して1つだけ準備するという考え方をする(傾向がある)ので、 `User` に関するデータベース操作だけを書いたコードでは少し範囲が足りていないかもしれません。 そのためこの場合は `UserRepository` とするのが適切だと思います。 学び方 === さてオブジェクトの責任の分け方を学ぶ方法ですが、 デザインパターンの本や、アーキテクチャの本を読むと良いでしょう。 特にデザインパターンは直接的にうまいやり方をカタログ的に教えてくれるので、最初に学ぶのには良いと思います。