在这两种方法中,我的首选方法是第一种方法:
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
原因是只要对这些对象进行更改,只要这些更改保留了这些吸气剂,因此更改在对象外部是透明的,那么您进行更改和测试的代码就更少了,中断应用程序的机会也就更少。
这只是我的思考过程,主要是基于我喜欢如何工作和构造具有这种性质的事物,并且从长远来看,事实证明该过程非常易于管理和维护。
我不打算讨论命名约定,但会指出,尽管此方法中包含“数据库”一词,但这种存储机制可以改变。根据显示的代码,没有将功能与使用的数据库存储平台绑定的内容,即使它是数据库也是如此。我们只是假设了它的名字。同样,假设那些吸气剂始终被保存,改变这些对象的存储方式/位置将很容易。
我会重新考虑函数和两个对象,因为您有一个函数依赖于两个对象结构,尤其是所使用的吸气剂。看起来该函数将这两个对象绑定到一个累积的事物中,该事物将持久化。我的直觉告诉我,第三个对象可能有意义。我需要更多地了解这些对象以及它们在现实中与预期路线图之间的关系。但是我的直觉正朝那个方向倾斜。
就目前的代码而言,问题开始于“此函数将在哪里或应该在哪里?” 它是帐户的一部分,还是其他?去哪儿了?
我猜已经有第三个对象“数据库”,并且我倾向于将此函数放到该对象中,然后它成为该对象的工作,能够处理Account和OtherThing,进行转换,然后还保留结果。
如果您要使第三个对象符合对象关系映射(ORM)模式,那就更好了。对于使用该代码的任何人来说,理解“啊,这就是Account和OtherThing一起粉碎并持久存在的地方”,这将非常明显。
但是引入第四个对象也可能是有意义的,该对象处理组合和转换Account和OtherThing的工作,而不处理持久化的机制。如果您期望与这两个对象进行更多交互,或者这样做,我会这样做,因为随着时间的增长,我希望将持久性因素分解成一个仅管理持久性的对象。
我会努力保持设计,以便可以更改Account,OtherThing或第三个ORM对象中的任何一个,而不必同时更改其他三个对象。除非有充分的理由,否则我希望Account和OtherThing是独立的,并且不必了解彼此的内部工作原理和结构。
当然,如果我知道将要发生的全部情况,那么我可能会完全改变我的想法。再说一遍,这就是我看到这样的事情时的想法,以及多么苗条。