我有类似的问题和关注如何在Web服务返回的Hibernate实体和数据传输对象之间进行转换,如本问题所述:
这里提到的一个因素是,如果域模型发生变化,一组DTO将在Web服务的情况下保护消费者.
即使它似乎会为我的项目添加大量代码,但这种推理似乎是合理的.
有没有一个好的设计模式可以用来将Hibernate实体(实现接口)转换为实现相同接口的DTO?
因此,假设以下两个实现'Book',我需要将BookEntity.class转换为BookDTO.class,以便我可以让JAXB序列化并返回.
同样,这整个前景对我来说似乎都很可疑,但如果有很好的模式来帮助处理这种转换,我很乐意获得一些见解.
是否有一些有趣的方式通过反射转换?还是一个我没想过的"建设者"模式?
我应该忽略DTO模式并传递实体吗?
我已经搜索了一些网站,以帮助理解这一点,但没有找到任何超级明确的东西,所以我想我会发布我的用例,看看是否有人可以解决一些问题.
我有一个关于在akka中用于io操作时jvm线程vs os线程的扩展的问题.来自akka网站:
Akka支持事件驱动的轻量级线程的调度程序,允许在单个工作站上创建数百万个线程,以及基于线程的Actors,其中每个调度程序都绑定到专用的OS线程.
基于事件的Actors目前每个Actor消耗约600个字节,这意味着您可以在4 G RAM上创建超过650万个Actors.
在这种情况下,您是否可以帮助我了解在只有1个处理器的工作站上的重要性(为简单起见).因此,对于我的示例用例,我想获取1000个"用户"的列表,然后查询数据库(或多个)以获取有关每个用户的各种信息.因此,如果我将这些'get'任务分配给一个actor,并且该actor将要执行IO,那么该actor是否会根据工作站的os线程限制阻塞?
在这样的场景中,akka演员模型如何让我解脱?我知道我可能遗漏了一些东西,因为我对vm线程与os线程的交互作用并不是很了解,所以如果这里有一个聪明人可以拼出来,那就太好了.
如果我使用Futures,我是否需要使用await()或get()来阻止并等待回复?
在我的使用案例中,无论演员如何,它最终只是'感觉'就像我正在制作1000个顺序数据库请求一样?
如果代码片段有助于我理解这一点,那么Java将是首选,因为我仍然需要加快scala语法的速度 - 但这是一个很好的明确文本解释,说明这些数百万个线程在执行数据库IO时如何在单个处理器机器上进行互操作也没关系.
在以下文档中,事件处理程序被描述为取代记录 http://akka.io/docs/akka/1.2/general/event-handler.html
有一个事件处理程序取代了Akka的日志系统:
akka.event.EventHandler
具体来说,此链接提供了使用slf4j时如何执行此操作的示例:http://akka.io/docs/akka/1.2/general/slf4j.html
我的问题是'这给了什么优势?"为什么我会这样做而不是仅使用标准模式的记录器?"
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static Logger log = LoggerFactory.getLogger(MyActor.class);
...
log.info("doing something");
Run Code Online (Sandbox Code Playgroud)
基于线程或调度程序内部,通过使用上述记录器模式的事件处理程序,我是否会获得某些潜在的好处,我没有看到?如果没有,使用事件处理程序进行日志记录感觉就像偏离熟悉的模式一样没有明确的原因.
感谢您的任何意见!
当业务层创建一个新实体时,逻辑上表示应该更新的现有实体的实例(比如它们共享相同的业务键),这种合并错误做法的方法是什么?
public User add(User user){
User existingUser = getUserDao().findByBusinessKey(user.getBusinessKey(), false);
user.setId(existingUser.getId());
user = getUserDao().merge(user);
return user;
}
Run Code Online (Sandbox Code Playgroud)
我问,因为在分离的实体上显式设置ID对我来说感觉很奇怪,但即使User实体的equals和hashcode方法被适当地实现,在这里设置ID是确保合并发生的唯一方法.
有更好的做法吗?
这种方法有什么特殊的缺点,以后会咬我吗?
谢谢参观!