2つのうち、私の好みは最初の方法です。
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
その理由は、変更がそれらのゲッターを保持し、変更がオブジェクトの外部で透過的である限り、いずれかのオブジェクトに変更が加えられるため、変更およびテストするコードが少なくなり、アプリを中断する可能性が少なくなるためです。
これは単なる思考プロセスであり、主に私がこのような性質のものをどのように動作させ、構築するのが好きで、長期的には非常に管理しやすく維持できることが証明されています。
命名規則には触れませんが、この方法には「データベース」という単語が含まれていますが、そのストレージメカニズムは将来変更される可能性があることを指摘します。示されたコードから、使用されているデータベースストレージプラットフォームに関数を結び付けるものはありません。それがデータベースであってもです。それは名前にあるからだと思いました。繰り返しますが、これらのゲッターが常に保持されると仮定すると、これらのオブジェクトの保存方法/場所の変更は簡単です。
ただし、2つのオブジェクト構造、特に採用されているゲッターに依存する関数があるため、関数と2つのオブジェクトを再考します。また、この関数は、これらの2つのオブジェクトを1つの累積的なものに結び付けて永続化するように見えます。私の腸は、3番目のオブジェクトが意味をなすかもしれないと言っています。これらのオブジェクトと、それらが実際にどのように関連しているか、および予想されるロードマップについてさらに知る必要があります。しかし、私の腸はその方向に傾いています。
現在のコードでは、「この関数はどこにあるべきですか?」アカウントの一部ですか、それともその他のものですか?どこに行くの?
すでに3番目のオブジェクト「データベース」があり、この関数をそのオブジェクトに入れることに傾いていると思います。それから、そのオブジェクトがAccountとOtherThingを処理し、変換し、結果を永続化できるようになります。
3番目のオブジェクトがオブジェクトリレーショナルマッピング(ORM)パターンに準拠するようにした場合、さらに良い結果が得られます。これにより、コードで作業している人なら誰でも、「ああ、これはAccountとOtherThingが一緒に壊されて永続化される場所」を理解することが非常に明白になります。
しかし、AccountとOtherThingを組み合わせて変換するジョブを処理するが、永続化の仕組みを処理しない4番目のオブジェクトを導入することも意味があります。これらの2つのオブジェクトとの間で、またはこれらの間でさらに多くの相互作用が予想される場合は、それが大きくなると、永続性ビットを永続性のみを管理するオブジェクトに含めることを望みます。
Account、OtherThing、または3番目のORMオブジェクトのいずれか1つを、他の3つも変更せずに変更できるように設計を維持するために撮影します。正当な理由がない限り、AccountとOtherThingは独立していて、お互いの内部の仕組みや構造を知る必要はありません。
もちろん、これがどうなるかについて完全な文脈を知っていれば、私の考えを完全に変えるかもしれません。繰り返しますが、これは私がこのようなものを見たときの私が考える方法であり、どのように無駄がありません。