概述
合理应用基础的设计,使项目代码结构清晰,保持低耦合高内聚,能够快速的梳理类之间的关系,忽略细节因素,提升对项目整体的认知,减少团队沟通成本,交接成本。时长思考这些,从这些简单的做起,同时有助于看懂他人代码。
五大原则
单一职责原则SRP(Simple Responsibility Principle):
一个类,最好只做一件事,只有一个引起它变化的原因。如果一个类具有了多个职责,则之间就可能产生状态依赖。依据实际情况,此时就可以考虑重构此类。
见示例:
定义接口:
public interface IAction
{
bool Add();
bool Sub();
}
加入抽象类
public class AbstractAction : IAction
{
public virtual bool Add()
{
return false;
}
public virtual bool Sub()
{
return false;
}
}
实现类,此类中在Add、Sub方法实现中融合了其他规则判断Canxxx,后面一旦判断规则改变则需要修改此类.更好的设计是将判断移出去,单独在一个类中实现,这样指责就更明确。
public class Calc : AbstractAction
{
public override bool Add()
{
if (CanAdd())
return DoCalcAdd();
else
return false;
}
private bool CanAdd()
{
throw new NotImplementedException();
}
private bool DoCalcAdd()
{
throw new NotImplementedException();
}
public override bool Sub()
{
if (CanSub())
return DoCalcSub();
else
return false;
}
private bool CanSub()
{
throw new NotImplementedException();
}
private bool DoCalcSub()
{
throw new NotImplementedException();
}
}
可以使用Proxy模式,加入新的判断类,这样Calc类只需要关注自身的业务逻辑操作。
public class CalcProxy:AbstractAction
{
private AbstractAction abstractAction;
public CalcProxy(AbstractAction abstractAction)
{
this.abstractAction = abstractAction;
}
public override bool Add()
{
if (CanAdd())
return abstractAction.Add();
return false;
}
private bool CanAdd()
{
throw new NotImplementedException();
}
public override bool Sub()
{
if (CanSub())
return abstractAction.Sub();
return false;
}
private bool CanSub()
{
throw new NotImplementedException();
}
}
总结
合理使用单一职责,提升代码工整,职责更加分明。也可以使用Façade模式。