通用职责分配软件原则之1-信息专家原则
信息专家原则(Information Expert Principle)
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/369 访问。
(1)问题
给对象分配职责的通用原则是什么?
(2)方案
将职责分配给拥有履行一个职责所必需信息的类,即信息专家。
(3)分析
信息专家原则是面向对象设计的最基本原则。通俗点来讲,就是一个类只做自己应该做的事。在系统设计时,需要将职责分配给具有实现这个职责所需要信息的类。信息专家原则对应于面向对象设计原则中的单一职责原则。
示例:
public class AES {public string Decrypt(string ciphertext, string salt) {throw new NotImplementedException();}public void Post(string url, string cleartext, Dictionary<string, string> heads) {throw new NotImplementedException();}}
AES解密类,Decrypt方法为解密方法,需要传递密文和盐,这个类中包含了另外一个方法Post以向某个url发送明文数据。
显然Post方法不应该属于AES类,因为职责分配不合理。解密类应专注于解密动作,发送数据的Post方法应该封装在另外一个类中。以下是解决方案:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/369 访问。
public class AES {public string Decrypt(string ciphertext, string salt) {throw new NotImplementedException();}}
public class PostUtil {public static void Post(string url, string content, Dictionary<string, string> heads) {throw new NotImplementedException();}}
经过简单的改造,AES类变成了AES解密的信息专家,而PostUtil工具类变成了发送数据的信息专家。
通用职责分配软件原则之1-信息专家原则相关推荐
- 通用职责分配软件原则之4-高内聚原则
高内聚原则(High Cohesion Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/375 访问 ...
- 通用职责分配软件原则之3-低耦合原则
低耦合原则(Low Coupling Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/373 访问. ...
- 通用职责分配软件原则之7-纯虚构原则
纯虚构原则(Pure Fabrication Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/381 ...
- 通用职责分配软件原则之6-多态原则
多态原则(Polymorphism Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/379 访问. ...
- 通用职责分配软件原则之2-创造者原则
创造者原则(Creator Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/371 访问. (1)问 ...
- 通用职责分配软件原则之9-受保护变量原则
受保护变量原则(Protected Variations Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archiv ...
- 通用职责分配软件原则之5-控制器原则
控制器原则(Controller Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/377 访问. ( ...
- GRASP通用职责分配软件模式
1. 概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...
- 通用职责分配软件原则之8-中介原则
中介原则(Indirection Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/383 访问. ( ...
最新文章
- Android Acitivity 生命周期
- java双目运算符重载,c++类的单目和双目运算符的重定义
- YOLOV5 的小目标检测网络结构优化方法汇总(附代码)
- python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos
- 1-4 无监督学习(Unsupervised Learning)
- linux free命令详解(一)
- 大数据分析体系由哪些层级构成
- H.264标准(二)FLV封装格式详解
- NLP数据预处理——同义词替换程序
- 蛋白质组学检测发展前景
- OSChina 周三乱弹 —— 我在 if 里,你却在 else
- Qt实现屏幕中间显示小点,打游戏瞬狙,你还在屏幕中间贴红点吗?
- 如何与其他用户共享SkyBell HD访问
- 80C51引脚功能及片内RAM、片内ROM简介
- python 发红包import random用redenv_python 发红包
- mysql l查看历史等锁信息_查看锁信息(开启InnoDB监控)
- LeetCode-1104. Path In Zigzag Labelled Binary Tree
- labelimg闪退解决方法(多人检测有效,根本原因)
- 如何在群晖NAS上安装cpolar内网穿透(群晖7.X版)
- SAAS平台构建-后端方案
热门文章
- PL/SQL中的=作用
- LeetCode 766. Toeplitz Matrix
- 【AI视野·今日NLP 自然语言处理论文速览 第十五期】Fri, 25 Jun 2021
- JAVA—HTTP客户端警告:Going to buffer response body of large or unknown size.
- 类与对象的关系 java 1615134802
- 实例方法 java 1614780086
- 案例 员工演奏乐器 c# 1614191419
- 钉钉下载与安装过程 适用于windows系统 20200718
- requests-处理不信任的ssl证书
- django-反向查询-后端反向-前端反向