敏捷软件开发 – FACADE模式和MEDIATOR模式

Posted 顾强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了敏捷软件开发 – FACADE模式和MEDIATOR模式相关的知识,希望对你有一定的参考价值。

FACADE模式

技术分享

  Db类使得Application类不需要了解System.Data命名空间中的内部细节。它把System.Data的所有通用性和复杂性隐藏在一个非常简单且特定的接口后面。

  像Db这样的FACADE类对System.Data的使用施加了许多规约。它知道如何初始化和关闭数据库连接。它知道如何将ProductData的成员变量转换成数据库字段,或反之。它知道如何去构建合适的查询和命令去操纵数据库。它对用户隐藏了所有的复杂性。在Application看来,System.Data是不存在的,它隐藏在FACADE后面。

  使用FACADE模式意味着开发人员已经接受了所有数据库调用都要通过Db类的约定。如果Application的任意一部分代码越过该FACADE直接去访问System.Data,那么就违反了该约定。像这样,该FACADE对Application施加了它的规约。基于约定,Db类称为了System.Data的唯一代理。

  可以使用FACADE对程序的任何部分进行隐藏。不过,最常见的做法是使用FACADE来隐藏数据库,因此该模式也称为TABLE DATA GATEWAY。

MEDIATOR模式

  MEDIATOR模式同样也是施加规约。不过,FACADE模式是以可见且强制的方式施加它的规约,而MEDIATOR模式则是以隐藏切自由的方式来施加它的规约的。

using System;
using System.win.Windows.Form;

public class QuickEntryMediator
{
    private TextBox itsTextField;
    private ListBox itsList;

    public QuickEntryMediator(TextBox t, ListBox l)
    {
        itsTextField = t;
        itsList = l;

        itsTextField.TextChagned += new EventHandler(TextFieldChanged);
    }

    private void TextFieldChanged(object sender, EventArgs args)
    {
        String prefix = itsTextField.getText();

        if (prefix.length() == 0)
        {
            itsList.ClearSelection();
            return;
        }

        ListBox.ObjectCollection listItems = itsList.Items;
        boolean found = false;
        for (int i = 0; found == false && i < listItems.Count; i++)
        {
            Object o = listItems[i];
            String s = o.ToString();
            if (s.StartsWith(prefix))
            {
                itsList.SetSelected(i, true);
                found = true;
            }
        }

        if (!found)
        {
            itsList.ClearSelection();
        }
    }
}

  ListBox和TextBox的使用者并不知道该MEDIATOR的存在。它安静的呆着,把它的规约施加在那些对象上,而无需它们的允许或知晓。

结论

  如果规约涉及的范围广泛并且可见,那么可以使用FACADE模式从上施加规约。另一方面,如果规约设计的范围较小并且可以自由定制,那么MEDIATOR模式是更好的选择。FACADE模式通常是约定的关注点。每个人都同意去使用该FACADE而不是隐藏于其下的对象。另一方面,MEDIATOR则对用户是隐藏的。它的规约是既成事实而不是一项约定事务。

 

 

摘录自:[美]RobertC.Martin、MicahMartin著,邓辉、孙鸣译 敏捷软件开发原则、模式与实践(C#版修订版) [M]、人民邮电出版社,2013、240-243、

以上是关于敏捷软件开发 – FACADE模式和MEDIATOR模式的主要内容,如果未能解决你的问题,请参考以下文章

外观(Facade)模式

设计模式的征途—11.外观(Facade)模式

外观模式 Facade

Facade 设计模式

Facade模式

外观模式(Facade)