面向对象编程之单一原则解析

在面向对象编程中,六大设计原则,旨在使软件设计更易于理解、灵活和可维护。这些经验是前人踩过无数次坑,总结出来的经验。

六大设计原则如下:

· 单一职责原则

· 开闭原则

· 里氏替换原则

· 接口隔离原则

· 依赖反转原则

· 迪米特原则

本文我们来介绍单一原则。

单一职责原则

存在的问题

类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 条评论) “”
   
验证码:

相关文章

推荐文章