为避免副作用:
我不想在我的方法中更改pramaeter对象的属性值。我更喜欢创建一个新的代表结果并将其返回的结果。

避免副作用仅在多线程环境中才是真正重要的,但仍然是良好的实践。 f(X)= Y,可以比较两个对象,一个u作为参数接收,另一个u作为结果比较好。

这意味着,我需要将IN参数对象中的所有属性映射到创建的OUT新实例对象。这将使一些代码如下:

groundCertResult.setExpirationDate(pGroundCertificate.getExpirationDate());
groundCertResult.setValidationDate(pGroundCertificate.getValidationDate());
groundCertResult.setId(pGroundCertificate.getId());


它可以在我的方法中做很多行:$

我也可以不映射那么多值,而只需添加一行

//use findByID without mapping that much
final GroundCertificate groundCertResult =
    groundCertificateDao.findById(pGroundCertificate.getId());


但这最终将导致对数据库的访问和更多处理。

是否有一些使用反射的通用方法将一个对象映射到另一个对象?在性能上,这将是昂贵的。

您会选择什么?根据项目需求。考虑到可维护性,可伸缩性...

最佳答案

您可能想看看CloneableObject.clone()。如果对象的浅表副本已足够,则无需编写任何其他代码。 Object.clone()将为您做到这一点。
确保您确实想要/需要这种方法。如果不确定否则会发生什么副作用,请查看代码以进行查找。
始终如一。不要在实现中混用复制和修改操作。
想一想,如果将来您或某人想使用您的GroundCertificate的后代,该怎么做。

关于java - 如何避免副作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7919468/

10-11 19:58