前控制器与外墙模式

时间:2009-05-08 11:10:45

标签: design-patterns

好的,我已经在网上搜索了一下并找到了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的忠实粉丝,因为它可以让所有低级别的东西更加受控制。因此,虽然它可能没有更多的意义,但这样做是否完全错误?如果是:为什么?

2 个答案:

答案 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(它用于构建应用程序[模块]的特定功能,并且不会强制整个应用程序使用结构。)