重用和单一职责可能是对立的

栏目: 后端 · 发布时间: 6年前

内容简介:单一职责是让一段代码只做一件事,实现一个功能,软件复杂性来自于让一段代码做两件事:"So much complexity in software comes from trying to make one thing do two things." – Ryan Singer而重用是试图复用一段代码实现的功能,也就是重用单一职责,但是重用有时如果不仔细设计,就可能导致一段代码做多个事情,因为程序员觉得这几个事情差不多,就是实现单一职责功能,其实忽视了职责功能所处的上下文区别,虽然主要功能差不多,但是细微上

单一职责是让一段代码只做一件事,实现一个功能,软件复杂性来自于让一段代码做两件事:

"So much complexity in software comes from trying to make one thing do two things." – Ryan Singer

而重用是试图复用一段代码实现的功能,也就是重用单一职责,但是重用有时如果不仔细设计,就可能导致一段代码做多个事情,因为 程序员 觉得这几个事情差不多,就是实现单一职责功能,其实忽视了职责功能所处的上下文区别,虽然主要功能差不多,但是细微上有差别,最后实现成可运行时的代码时,实际这一段代码做了几件事,导致复杂性,比如通过设置很多if语句来判断不同上下文和入参数据。这就很难修改拓展,变成单体架构。

如果开始编码主要目的不是为了单一职责,而是为了重用,很容易在代码级别耦合调用那些所谓重用代码,最后造成紧耦合,变成单体架构,整个代码都如同意大利面条一样混杂在一起,变成铁板一块。

因此,编码第一设计主因是单一职责,只有先分了以后才可能重用,重用是重构阶段进行的发现,处理难度比较高,需要将这段单一职责的代码完全与初次使用时的上下文脱离关系,提炼成模块或库包甚至微服务方式提供,但肯定不是直接把单一职责的那段代码直接拿到当前上下文中就可以重用。

如果希望做到直接拿来重用,就使用函数式编程,函数处理数据是不变的,杜绝了不同上下文,杜绝了函数功能根据不同函数入参数据不同而不同的可能性,函数方法也自身上下文没有关系,是纯粹函数功能实现。

因此,重用不是面对对象范式的主要考虑设计目标,单一职责才是,如果希望重用是第一公民,就采取函数是第一公民的函数式编程范式。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithms in Java

Data Structures and Algorithms in Java

Michael T. Goodrich、Roberto Tamassia / Wiley / 2010-01-26 / USD 177.41

* This newest edition examines fundamental data structures by following a consistent object-oriented framework that builds intuition and analysis skills of data structures and algorithms * Presents ne......一起来看看 《Data Structures and Algorithms in Java》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具