Business Delegate和View Helper之间的区别

时间:2013-05-05 00:02:58

标签: design-patterns

他们似乎做同样的事情 - 从业务层的复杂性中分离表示层逻辑。那有什么区别?

1 个答案:

答案 0 :(得分:3)

两者都试图分离组件的复杂性,但是:

  • 查看助手的目的是让视图更轻松(仅限显示的东西,真的);
  • 业务代表打算将任何两个组件分离(将管道工作的详细信息留给介于之间的第三个组件 )。

我可以看到你的困惑来自哪里,因为它们在某种程度上看起来很像。但是,在实践中,它们解决了两个不同的问题:

查看助手

随着系统的发展,人们倾向于开始在View上放置代码,比如JSP,它开始变得越来越复杂。视图不应该有很多代码。它们应该只显示数据。例如,如果在JSP中进行繁重的计算,一方面代码将隐藏在HTML标记中,另一方面,您无法在系统中的任何位置重复使用它。想象一下,必须在这样的代码中进行一些维护。你会发疯的。

查看助手通过创建Helper类来完成繁重的工作并使其成为可能,通过使视图更简单来教您一种避免这种情况的方法JSP调用它而不是将所有复杂的代码保留在JSP内。

业务代表

如果你有一个组件,比如MyCalculator,它调用了一个变化很大的外部组件(比如一个EJB WeatherEJB),你最终也需要更改你的组件。

例如,将MyCalculator视为系统中非常重要的一类,您不会一直想要改变它。怎么打破别的怎么办?如果有人也在另一个分支机构改变它会怎么样?

此外,您只需要在 业务发生变化时更改MyCalculator,而不是每当其他人更改时都更改。{/ p>

MyCalculator调用十个其他组件时,您会发现这更加疯狂。你每天都会改变它!

业务代表来救援建议:添加一个可以执行WeatherDelegate调用的课程WeatherEJB并让MyCalculator使用它而不是调用{{ 1}}直接。

这样,每次WeatherEJB更改时,您都无需更改WeatherEJB。您需要做的就是相应地修改MyCalculator(另外,如果有一天你希望改变你获取天气的方式,比如说,网络服务,你需要编辑的所有内容都是WeatherDelegate。) < / p>

最后......

......他们都说:创造一个人为你做一些工作。但是 View Helper 表示你不会对View做不必要的工作;和业务代表告诉您解耦某些组件,以便更好地分配系统的职责。两者都使系统更易于维护。