Java传递大对象的最佳实践

时间:2017-06-28 12:08:19

标签: java

我已经在Java上使用了大约一年的遗留应用程序。随着我对语言和应用程序的理解越来越好,我开始对最佳实践提出一些问题。这是一个例子:

应用程序有点像案例管理器,其中案例是一个包含许多嵌套对象和字段的大对象。应用程序中的大多数操作都围绕此案例的状态来确定行为。

我们有很多基本上可以获取的大量方法 - >更新状态 - >对其他方法进行辅助调用,或者通过Web服务调用来通知其他应用程序 - >持续状态更改为DB。

当我尝试拆分这些大型方法时,我发现自己经常需要通过引用传递大案例对象来使用其数据和嵌套对象,而不是传递其ID并通过许多连接从数据库中提取它。

但是,如果我只传递ID并让他们从数据库中查找案例信息,这些方法也可能更具可重用性。

例如:

methodA:
 - fetch case from DB
 -> notificationManager.sendCaseStatusChange(case, status)
    - send update with data from case

在这种情况下,可以从不同区域调用sendCaseStatusChange,其中大小写可能并不总是被加载到内存中

methodA:
 - fetch case from DB
 -> notificationManager.sendCaseStatusChange(caseID, status)
    - fetch case from DB
    - send update with data from case

这里sendCaseStatusChange更独立,因为它可以自己提取所需的信息。但是,由于我们已经在方法A中使用了这种情况,因此会引发另一个数据库命中。

如何最好地处理此案例的任何建议,或类似权衡的经验将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

重载方法sendCaseStatusChange,因此您可以公开可以从不同客户端调用的两个方法。在内部你会有这样的东西

public void sendCaseStatusChange(Case case, Status status) {
...
...
}

public void sendCaseStatusChange(Long caseId, Status status) 
    Case case = findCase(caseId);
    sendCaseStatusChange(case,status);
}

因此,如果客户端已经加载Case,则可以使用不会访问数据库的版本