敏捷软件开发 – 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模式的主要内容,如果未能解决你的问题,请参考以下文章