首页 > 代码库 > 敏捷软件开发 – FACADE模式和MEDIATOR模式

敏捷软件开发 – 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模式