joe*_*nez 31 spring service-layer
我查看了http://solitarygeek.com/java/developing-a-simple-java-application-with-spring/comment-page-1#comment-1639上的示例
我试图找出他提供的示例中首先需要服务层的原因.如果你把它拿出来,那么在你的客户端,你可以这样做:
UserDao userDao = new UserDaoImpl();
Iterator users = userDao.getUsers();
while (…) {
…
}
Run Code Online (Sandbox Code Playgroud)
看起来服务层只是DAO的包装器.有人可以给我一个案例,如果服务层被删除,事情会变得混乱吗?我只是没有看到开始使用服务层的重点.
Nat*_*hes 31
让服务层成为DAO的包装器是一种常见的反模式.在你给它的例子中肯定不是很有用.使用服务层意味着您可以获得以下好处:
您可以明确区分控制器中最佳完成的Web类型活动与非Web相关的通用业务逻辑.您可以与控制器逻辑分开测试与服务相关的业务逻辑.
您可以指定事务行为,因此如果您调用多个数据访问对象,则可以指定它们出现在同一事务中.在你的例子中,首先调用dao后跟一个循环,这可能包含更多的dao调用.将这些调用保留在一个事务中意味着数据库执行的工作较少(不必为每次调用Dao创建新事务),但更重要的是,这意味着检索到的数据将更加一致.
您可以嵌套服务,以便如果一个人具有不同的事务行为(需要自己的事务),您可以强制执行该操作.
你可以使用postCommit拦截器来做发送电子邮件之类的通知,这样就不会破坏控制器.
通常,我的服务包含单一类型用户的用例,服务上的每个方法都是单个操作(在单个请求 - 响应周期中完成的工作),该用户将执行该操作,并且与您的示例不同,通常不仅仅是在那里进行简单的数据访问对象调用.
Jon*_*Jon 20
看看下面的文章:
http://www.martinfowler.com/bliki/AnemicDomainModel.html
这一切都取决于您希望将逻辑放在您的服务或域对象中.
如果您具有复杂的体系结构并且需要与DAO和数据不同的接口,则服务层方法是合适的.为客户端调用提供课程粒度方法也很好 - 这可以调用多个DAO来获取数据.
但是,在大多数情况下,您需要的是一个简单的体系结构,因此请跳过服务层并查看域模型方法.Eric Evans的Domain Driven Design和InfoQ文章在此扩展:
http://www.infoq.com/articles/ddd-in-practice
| 归档时间: |
|
| 查看次数: |
30114 次 |
| 最近记录: |