更改注入对象的状态是否是不好的做法?

时间:2019-12-05 03:09:16

标签: java design-patterns dependency-injection

比方说,我在整个代码中的多个不同类中注入了一个相同实例。在一个类中操作列表(例如添加/删除项目)以使其他类可以在列表的新状态下工作是不好的做法吗?除了并发问题,这是在类之间传达更改的正确方法吗?还是我应该在函数和不同层之间传递列表(如果我必须在许多层之间传递很多变量,这可能很难看;相比之下,在底层更改列表并在实例所在的位置更改状态注入,而不污染任何方法签名。

2 个答案:

答案 0 :(得分:1)

我认为更好的解决方案是使用同步访问,这在实例同时更改列表的情况下会有所帮助,但是让我告诉您,允许实例直接更改列表是一种非常糟糕的做法,理想的做法是使对象不可变,然后每个实例都可以使用它们自己的列表工作而不会出现问题,但是如果您需要这种行为,则在您的业务逻辑中,我建议创建一个持久性策略,一个封装列表并对其进行更改的对象,全局,无需共享状态,然后其他实例可以在列表更改时获得列表的新副本,或者,您还可以创建一个sub / notify策略,以在列表状态更改时通知实例,然后更新其列表对象

答案 1 :(得分:0)

是的。你是对的。如果您进入任何并发模型,对注入的对象(实例级属性)进行突变实际上可能是有害的。

要与其他线程通信,建议使用具有ACID属性的持久性来存储和检索状态更改。

如果您希望在不同的对象之间但在同一执行线程之间传递值,则也可以尝试使用本地线程存储值。 https://dzone.com/articles/painless-introduction-javas-threadlocal-storage