好的,我已经在网上搜索了一下并找到了this帖子,但它对我来说还是不太清楚。
前控制器模式和外墙模式之间究竟有什么区别?
据我所知,到目前为止: Façade模式不包含任何业务逻辑,只是集中访问多个对象。
前端控制器执行相同的操作,但可能包含业务逻辑,以便根据输入数据等方式决定所调用的内容。
为了理解这一点,下面简单的伪代码片段是否意味着drawLine是一个Façade来简化将坐标转换为点然后实现实际完成工作的draw方法?
private void drawLine(Int32 StartX, Int32 StartY, Int32 EndX, Int32 EndY)
{
Point Start = new Point(StartX, StartY);
Point End = new Point(EndX, EndY);
Draw(Start, End);
}
Façade可以调用应用程序的较低层,还是仅仅集中访问同一层上的许多组件?
据我了解,前端控制器协调完整的函数调用过程。
示例:Front控制器将检查数据,然后决定要采取的操作。然后它会为每个后续调用低级类编译数据,直到它到达可以提供给调用系统的合适响应。
我认为我对外墙模式的理解是错误的或过于简单化。如果我错了,请纠正我。
如果我对此的理解是正确的,那么将应用程序外观更改为Microsoft Application Architecture Guide 2.0中的前端控制器会不会更有意义?我在第18章中特别关注服务架构。(虽然我有Beta 2版本)
更新:感谢Rune的响应。为什么说将Facade更改为Front控制器是不正确的?我是Front-controller的忠实粉丝,因为它可以让所有低级别的东西更加受控制。因此,虽然它可能没有更多的意义,但这样做是否完全错误?如果是:为什么?
答案 0 :(得分:15)
Front Controller模式定义了一个负责处理应用程序请求的组件。通常用作(例如)通道请求的“瓶颈”来整合每次需要执行的标准行为。
请参阅以下链接,简要说明一点:
另一方面,外观用于包装其他方法/服务以提供统一的界面,隐藏复杂性或减少对外部系统的依赖(在DDD的反腐败层中示例:http://www.goeleven.com/blog/entryDetail.aspx?entry=168)等。
Facade是一个瘦包装器,除了用于在两个系统之间进行转换的逻辑外,不应包含任何逻辑。前端控制器没有这样的要求。
例如参见:http://en.wikipedia.org/wiki/Facade_pattern
回答有关AppArchGuide的问题:不,这不正确。
答案 1 :(得分:7)
前端控制器模式是architectural pattern(它在您的应用程序中强加了架构结构)。
相比之下,Façade模式是design pattern(它用于构建应用程序[模块]的特定功能,并且不会强制整个应用程序使用结构。)