在面向对象编程中,六大设计原则,旨在使软件设计更易于理解、灵活和可维护。这些经验是前人踩过无数次坑,总结出来的经验。
六大设计原则如下:
· 单一职责原则
· 开闭原则
· 里氏替换原则
· 接口隔离原则
· 依赖反转原则
· 迪米特原则
本文我们来介绍单一原则。
存在的问题
类A包含两个逻辑:逻辑B1和逻辑B2。当业务发生改变需要修改B1,有可能会影响到B2。
解决方案
遵循单一职责原则,分别创建两个类:B1类和类B2类。各自处理各自的逻辑。这样当修改B1代码的时候就不会影响到B2的功能了。
不同级别中使用的单一职责原则:
方法级别:一个方法只能处理一个逻辑。以添加用户信息为例,校验请求参数、从数据库取用户信息、校验用户信息、保存用户信息、日志等分别建立一个方法
类级别:一个类只负责一件事。
类库级别:一个类库应该职责清晰。如工厂模式中 工厂实例、工厂接口 创建不同的类库
项目级别:一个项目应该职责清晰,比如:客户端、管理后台、API、定时任务、分布式引擎、数据驱动、消息等不要放在一个项目中,应该拆分。
系统级别:为通用功能拆分,比如IP定位、日志、在线统计、消息等。拆分后不仅能保证系统的稳定性还能提高开发效率。
例如,以注册用户信息为,需要校验请求参数、校验用户信息是否存在、保存用户信息、发送短信、消息通知。
创建用户信息实体类、创建注册信息方法。
///
/// 用户信息实体
///
class UserInfo
{
public string Name { get; set; }
public string Pwd { get; set; }
}
class UserInfoManger
{
public bool SetUserInf (UserInfo userInfo)
{
//校验userInfo参数字段是否合法
//从数据库取用户信息
//判断用户信息在数据库是否存在
//保存用户信息至数据库
//添加日志
//发送短信
//消息队列
return true;
}
}
上述注册信息的发SetUserInf方法是不符合单一原则,如果数据库取数据、保存用户信息等业务发生变动,修改这个方法,bug的概率就会变高,可维护性和可靠性就会变得很糟糕。
class UserInfoManger
{
public bool SetUserInf (UserInfo userInfo)
{
CheckUserParam(userInfo);
GetUserData(userInfo);
CheckUserData(userInfo);
SaveUserData(userInfo);
SendMoboile(userInfo);
QuequeMsg(userInfo);
return true;
}
}
public bool CheckUserParam(UserInfo userInfo)
{
//校验输入的用户信息参数
Return true;
}
Public UserModel GetUserData(UserInfo userInfo)
{
//从数据库取用户信息数据
}
public bool SendMoboile(UserInfo userInfo)
{
//发送短信
}
public bool QuequeMsg(UserInfo userInfo)
{
//发送消息通知
}
public bool CheckUserParam(UserInfo userInfo)
{
//校验输入的用户信息参数
Return true;
}
public bool CheckUserData(UserInfo userInfo)
{
//校验用户信息是否已经存在数据库
}
public bool SaveUserData(UserInfo userInfo)
{
//保存用户信息至数据
}
上述示例,每个方法都是单一的原则,,即使单个逻辑修改,也不会影响其他的逻辑,提高程序的可维护性、可靠性。
本文介绍了六大设计原则的单一职责原则,并通过 C# 代码示例简明地诠释了它的含意和实现,希望开发的小伙伴有所帮助。
留言与评论(共有 0 条评论) “” |