写点什么

【愚公系列】2022 年 06 月 通用职责分配原则 (一)- 信息专家原则

作者:愚公搬代码
  • 2022 年 6 月 13 日
  • 本文字数:1000 字

    阅读完需:约 3 分钟

前言

GRASP:General Responsibility Assignment Software Patterns 通用职责分配软件模式。


首先我们先来区分下 GRASP 与 GOF 模式的区别,它们主要在什么时候用,用来做什么。在软件开发过程中,我们常说面向对象开发,面向对象思想应该贯穿整个软件开发生命周期。我们在将现实世界中的业务对象及业务功能抽象成软件系统中的系统对象过程中应该遵循使用 GRASP 模式。而在具体技术实现上应该遵循使用 GOF 设计模式,来实现系统功能。即 GRASP 主要使用在分析设计阶段,与具体技术无关;而 GOF 模式主要使用在开发阶段,与具体技术相关,它是对 GRASP 设计成果进行实现时而使用,是一种开发阶段的设计模式。


GRASP 软件设计模式包括 9 个模式:创建者、信息专家、低耦合、控制器、高内聚、多态性、纯虚构、间接性、防止变异。


一、信息专家原则(Information Expert Principle)

信息专家模式 (Information Expert Pattern)


(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 方法应该封装在另外一个类中。以下是解决方案:


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 工具类变成了发送数据的信息专家。

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年06月 通用职责分配原则(一)-信息专家原则_6月月更_愚公搬代码_InfoQ写作社区