信息专家原则(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-信息专家原则相关推荐

  1. 通用职责分配软件原则之4-高内聚原则

    高内聚原则(High Cohesion Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/375 访问 ...

  2. 通用职责分配软件原则之3-低耦合原则

    低耦合原则(Low Coupling Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/373 访问. ...

  3. 通用职责分配软件原则之7-纯虚构原则

    纯虚构原则(Pure Fabrication Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/381 ...

  4. 通用职责分配软件原则之6-多态原则

    多态原则(Polymorphism Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/379 访问. ...

  5. 通用职责分配软件原则之2-创造者原则

    创造者原则(Creator Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/371 访问. (1)问 ...

  6. 通用职责分配软件原则之9-受保护变量原则

    受保护变量原则(Protected Variations Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archiv ...

  7. 通用职责分配软件原则之5-控制器原则

    控制器原则(Controller Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/377 访问. ( ...

  8. GRASP通用职责分配软件模式

    1.  概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...

  9. 通用职责分配软件原则之8-中介原则

    中介原则(Indirection Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/383 访问. ( ...

最新文章

  1. Android Acitivity 生命周期
  2. java双目运算符重载,c++类的单目和双目运算符的重定义
  3. YOLOV5 的小目标检测网络结构优化方法汇总(附代码)
  4. python -opencv 使用滑动条 cv2.createTrackbar,cv2.getTrackbarPos(), cv2.setTrackbarPos
  5. 1-4 无监督学习(Unsupervised Learning)
  6. linux free命令详解(一)
  7. 大数据分析体系由哪些层级构成
  8. H.264标准(二)FLV封装格式详解
  9. NLP数据预处理——同义词替换程序
  10. 蛋白质组学检测发展前景
  11. OSChina 周三乱弹 —— 我在 if 里,你却在 else
  12. Qt实现屏幕中间显示小点,打游戏瞬狙,你还在屏幕中间贴红点吗?
  13. 如何与其他用户共享SkyBell HD访问
  14. 80C51引脚功能及片内RAM、片内ROM简介
  15. python 发红包import random用redenv_python 发红包
  16. mysql l查看历史等锁信息_查看锁信息(开启InnoDB监控)
  17. LeetCode-1104. Path In Zigzag Labelled Binary Tree
  18. labelimg闪退解决方法(多人检测有效,根本原因)
  19. 如何在群晖NAS上安装cpolar内网穿透(群晖7.X版)
  20. SAAS平台构建-后端方案

热门文章

  1. PL/SQL中的=作用
  2. LeetCode 766. Toeplitz Matrix
  3. 【AI视野·今日NLP 自然语言处理论文速览 第十五期】Fri, 25 Jun 2021
  4. JAVA—HTTP客户端警告:Going to buffer response body of large or unknown size.
  5. 类与对象的关系 java 1615134802
  6. 实例方法 java 1614780086
  7. 案例 员工演奏乐器 c# 1614191419
  8. 钉钉下载与安装过程 适用于windows系统 20200718
  9. requests-处理不信任的ssl证书
  10. django-反向查询-后端反向-前端反向