类与类之间的隔离-不要与陌生人说话。
根据我的理解,要降低类之间的耦合,那么应该尽量让他们之间不要直接打交道。
或者正确的说,两个分工很明确的类,应该各自管理自己的东西,而不要去“打听”其他类的东西。
举个例子:
需求是这样的:
当一个类更新了数据后,需要发送邮件通知相关人员。
代码一:
public DataAccess()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void UpdateData(Data data)
{
//
//直接初始化myMail类,并调用发邮件方法。
//完成数据更新后,利用mail通知
new myMail().SendMail(mail);
}
}
public class myMail
{
public myMail()
{
}
public void SendMail(MailArgs ex)
{
}
}
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void UpdateData(Data data)
{
//
//直接初始化myMail类,并调用发邮件方法。
//完成数据更新后,利用mail通知
new myMail().SendMail(mail);
}
}
public class myMail
{
public myMail()
{
}
public void SendMail(MailArgs ex)
{
}
}
代码二
专门定义一个事件类,来接受来之于数据处理类的触发事件,并在事件类里面来发送邮件。
那么作为数据更新类,只负责做好数据更新。
交由一个中间类来处理它的事件。
public class DataAccess
{
protected eventClass e;
public DataAccess()
{
//
// TODO: 在此处添加构造函数逻辑
//
e = new eventClass(this);
}
public void UpdateData(Data data)
{
//
//利用事件通知
if(updateEvent!=null)
updateEvent(this);
}
定义事件
}
public class eventClass
{
public eventClass(DataAccess a)
{
a.updateEvent +=new Fiberxon.HR.Biz.DataAccess.UpdateEventHandler(a_updateEvent);
}
private void a_updateEvent(object sender)
{
new myMail().SendMail(ex);
}
}
public class myMail
{
public myMail()
{
}
public void SendMail(MailArgs ex)
{
}
}
}
{
protected eventClass e;
public DataAccess()
{
//
// TODO: 在此处添加构造函数逻辑
//
e = new eventClass(this);
}
public void UpdateData(Data data)
{
//
//利用事件通知
if(updateEvent!=null)
updateEvent(this);
}
定义事件
}
public class eventClass
{
public eventClass(DataAccess a)
{
a.updateEvent +=new Fiberxon.HR.Biz.DataAccess.UpdateEventHandler(a_updateEvent);
}
private void a_updateEvent(object sender)
{
new myMail().SendMail(ex);
}
}
public class myMail
{
public myMail()
{
}
public void SendMail(MailArgs ex)
{
}
}
}