oo大原则之单一职责原则
发布时间:2020-12-13 20:36:02 所属栏目:百科 来源:网络整理
导读:单一职责原则(SRP,Single Responsibility Principle)强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则。其核心的思想是: 一个类,最好只做一件事,
单一职责原则(SRP,Single Responsibility Principle)强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则。其核心的思想是: 一个类,最好只做一件事,只有一个引起它变化的原因。 一个违背SRP原则的设计实例:对数据库的操作和用户权限判别封装在一个类中实现,如:
public
void
Add()
{ if (GetPermission(id.permission) == " CanAdd " ) { Console.WriteLine( " CanAdd " ); } } 显然这样的实现是很僵化的,一旦权限设置的规则发生变化,则所有的方法都必须跟着改变,这是不可想象的事情。我们应该把权限判断的职责与数据库操作的职责分开。P可以通过实现一个Proxy模式来解决职责交叉的问题
public
interface
IDBAction
{ void Add(); } public class DBManager:IDBAction { #region IDBAction成员 public void Add() { Console.WriteLine( " DBManager.Add() " ); } #endregion public DBManager() { } } public class DBManagerProxy:IDBAction { #region 私有成员 private IDBActiondbManager; #endregion public DBManagerProxy(IDBActiondbAction) { dbManager = dbAction; } public string GetPermission( string id) { return id; } #region IDBAction成员 public void Add() { if (GetPermission( " CanAdd " ) == " CanAdd " ) { dbManager.Add(); } } #endregion } class DBClient { static void Main( string []args) { IDBActionDBManager = new DBManagerProxy( new DBManager()); DBManager.Add(); } } 关于单一职责原则的建议:
参考文献:你必须知道的.NET (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |