业务层呼叫业务层或直接调用DAO

时间:2014-12-28 15:18:18

标签: java java-ee

在J2EE设计中,通常我们有视图层,业务层和dao层。在业务层,如果我们需要其他一些数据,我们是应该直接调用DAO还是调用其他数据的业务服务?

1 个答案:

答案 0 :(得分:1)

我喜欢这个问题,因为我必须找到答案,后来才能说服其他人......所以我的观点来自于某些项目的经验:

业务层应该由成员(我将其命名为Facades)构建,这些成员负责某些任务。例如。

  • 在持久化之前验证实体/对象(调用DAO)(Persist(entity)的种类)
  • 或代表工厂方法CreateNew(),返回包含一些基本商业设置的新对象(预填充国家/地区,货币......)
  • 通过Find(filter)
  • 加载一些数据

我可以继续,但最后,我最终会得到Facades,它们正在完成他们的任务,并对他们负责。这意味着我们有了答案。

  

如果已经有一些业务对象(Facade)代表某个特定任务......其他业务组件应该使用它。他们不应该再重新实现它。

     

明确说明

     
      
  • 其他图层(演示文稿,预定作业)应仅调用一个Business API(服务/外观)
  •   
  • 此商业服务/门面应该发挥作用,如果需要,应该致电其他商业服务/门面并要求他们完成工作。
  •   
  • 如果已在其他地方实施,则该服务不应调用DAO。
  •   

因此,如果有一些BL家伙,准备从DAO获取数据或将其他数据传递(并验证)到DAO ......我们应该使用它......

最后,我们制定了DRYSOLID原则......代码变得易于维护和扩展。例如,如果我们知道只有一个EmployeeFacade.Find(filter),那么很容易引入AOP并确保所有结果都可以被拦截......