在J2EE设计中,通常我们有视图层,业务层和dao层。在业务层,如果我们需要其他一些数据,我们是应该直接调用DAO还是调用其他数据的业务服务?
答案 0 :(得分:1)
我喜欢这个问题,因为我必须找到答案,后来才能说服其他人......所以我的观点来自于某些项目的经验:
业务层应该由成员(我将其命名为Facades
)构建,这些成员负责某些任务。例如。
Persist(entity)
的种类)CreateNew()
,返回包含一些基本商业设置的新对象(预填充国家/地区,货币......)Find(filter)
我可以继续,但最后,我最终会得到Facades,它们正在完成他们的任务,并对他们负责。这意味着我们有了答案。
如果已经有一些业务对象(Facade)代表某个特定任务......其他业务组件应该使用它。他们不应该再重新实现它。
明确说明:
- 其他图层(演示文稿,预定作业)应仅调用一个Business API(服务/外观)
- 此商业服务/门面应该发挥作用,如果需要,应该致电其他商业服务/门面并要求他们完成工作。
- 如果已在其他地方实施,则该服务不应调用DAO。
因此,如果有一些BL家伙,准备从DAO获取数据或将其他数据传递(并验证)到DAO ......我们应该使用它......
最后,我们制定了DRY和SOLID原则......代码变得易于维护和扩展。例如,如果我们知道只有一个EmployeeFacade.Find(filter)
,那么很容易引入AOP并确保所有结果都可以被拦截......