仓储是否需要缓存领域对象?

16-06-30 smcdl
              

如题,仓储是否需要缓存领域对象,即每次从仓储里拿出领域对象都是同一个对象而不是每次都从数据源中构造一个新对象,此处的缓存是指JVM的内存,不是Ehcache或者Memcache等。请大家指教。

另外问一下,如果需要缓存的对象里有其他无法缓存的资源怎么办?比如我的领域对象对应现实世界中的一个特殊的设备,这个设备需要通过网络与服务器连接,而当设备上线后系统会将Socket连接设置到领域对象里,表示领域对象拥有这个Socket连接,如果这个领域对象缓存在JVM的内存里还好说(比如HashMap之类的),但是一旦离线缓存,比如Ehcache或者Memcache,那么从Cache取回后,还能通过这个Socket与设备交互吗?

[该贴被smcdl于2016-06-30 09:58修改过]

              

banq
2016-06-30 16:36

是否需要缓存,取决于你的设计,没有强求,使用什么缓存产品更没有关系。JVM内存缓存与外部缓存Memcache只是在性能上有区别。

内存中对象是活跃的,从活跃到离线需要钝化,也就是将一些资源释放,比如socket连接等,当对钝化的对象再度唤醒,加载到内存时,当然也要恢复那些资源占用,比如Socket连接。

[该贴被banq于2016-06-30 16:39修改过]

smcdl
2016-07-01 08:04

2016-06-30 16:36 "@banq"的内容
是否需要缓存,取决于你的设计,没有强求,使用什么缓存产品更没有关系。JVM内存缓存与外部缓存Memcache只是在性能上有区别。 ...

我的设备是与服务器是长连接的,对应设备的领域对象理论上说也应该常驻Java内存的,那么针对这种情况是否可以说Java内存缓存更适合这种场景,由于外部缓存需要序列化,所以一些资源对象比如socket连接、数据库连接之类的恢复回来应该就不可用了,但Java内存缓存不会出现这种状况吧。

另外之所以问这个问题,另一个疑惑是对于多线程来说领域对象是否是唯一的,还是可以通过仓储随时可以从数据源中重构一个领域对象出来?

smcdl
2016-07-01 08:51

或者直接举个例子,比如订单是一个领域对象,而买家要查看、修改、取消,卖家也要查看、发货之类的,平台的管理员也要监控订单的问题,比如有争议的时候需要仲裁之类的,那么问题是,每个人看到的是同一个订单领域对象,还是每次请求的时候都是从数据源中重新构建的订单领域对象?