【愚公系列】2021年12月 通用职责分配原则(一)-信息专家原则(Information Expert Principle)

简介: 【愚公系列】2021年12月 通用职责分配原则(一)-信息专家原则(Information Expert Principle)

文章目录

前言

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

二、使用步骤

示例

前言

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月前
|
存储 设计模式 前端开发
Monolithic Architecture 的概念和缺陷
Monolithic Architecture 的概念和缺陷
37 0
|
4月前
|
设计模式 自然语言处理 算法
摆脱复杂图谱术语,7个原则搞定Schema建模
本文我们结合蚂蚁域内的多个业务场景,举例说明结合SPG规范的结构与语义解耦的知识建模及schema设计方法。
|
10月前
目标如何设定:7 分钟重新认识 SMART 原则。
你有过很多目标,但都没达成。于是你找到了一种解决方案——SMART 目标管理原则。它是五个单词首字母的缩写——Specific、Measurable、Achievable、Relevant 和 Time-bound——你的目标必须是具体的、可衡量的、可达到的、和其他目标相关的、有时间限制的。
132 0
|
8月前
|
存储 机器学习/深度学习 架构师
SAP 软件的精髓之一:各种各样的决定机制 - Determination Logic
SAP 软件的精髓之一:各种各样的决定机制 - Determination Logic
61 0
|
架构师 人机交互
Scrum工作完成准则(Definition of Done,DoD)
Scrum工作完成准则(Definition of Done,DoD)
228 0
Scrum工作完成准则(Definition of Done,DoD)
|
算法 程序员 C语言
Effective C++条款01:视C++为一个语言联邦
Effective C++条款01:视C++为一个语言联邦
|
设计模式
【愚公系列】2021年12月 通用职责分配原则(二)-创造者原则(Creator Principle)
【愚公系列】2021年12月 通用职责分配原则(二)-创造者原则(Creator Principle)
148 0
|
设计模式 存储 数据库
【愚公系列】2021年12月 通用职责分配原则(七)-纯虚构原则(Pure Fabrication Principle)
【愚公系列】2021年12月 通用职责分配原则(七)-纯虚构原则(Pure Fabrication Principle)
135 0
|
设计模式 C#
【愚公系列】2021年12月 通用职责分配原则(四)-高内聚原则(High Cohesion Principle)
【愚公系列】2021年12月 通用职责分配原则(四)-高内聚原则(High Cohesion Principle)
|
设计模式 C#
【愚公系列】2021年12月 通用职责分配原则(八)-中介原则(Indirection Principle)
【愚公系列】2021年12月 通用职责分配原则(八)-中介原则(Indirection Principle)