Ste*_*der 8 architecture oop design-patterns package-design
在使用稳定抽象原理(SAP)阅读此维基之后,我想知道是否有人知道取决于抽象而不是混凝土的任何缺点(我认为,这超过了优势).
SAP声明包越稳定,它应该越抽象.这意味着如果包装不太稳定(更有可能改变),那么它应该更具体.我真的不明白为什么会出现这种情况.当然,在所有情况下,无论稳定性如何,我们都应该依赖于抽象并隐藏具体实现?
首先,从您链接到的论文:
稳定性并不是衡量模块发生变化的可能性;相反,它是衡量更改模块的难度的指标
因此,难以改变的事物(例如在许多地方使用)应该是抽象的,以使扩展变得容易/可能。
是的,也有缺点。这是改变的容易程度。更改具体代码比更改抽象和代码要容易和快捷得多。
当然,在所有情况下,无论稳定性如何,我们都应该依赖抽象并隐藏具体实现吗?
那是真实的。但抽象程度不同。即时示例:如果我要求您计算方形对角线的长度,那么您可能只会使用内置double sqrt(double)函数。它是抽象的吗?是的。我们不知道是否使用了牛顿方法还是直接委托给cpu。
但是如果我们想创建一个 sqrt 函数并依赖某种物理计算库怎么办?在这种情况下,之前的抽象是否足够?可能不是因为我们可能想要处理(以统一的方式)矩阵、相对误差、任意长度数字、所需数量的核心/线程的并行化,也许委托给 GPU 并且应该为其他扩展做好准备,因为迟早有人可能会这样做希望它能够处理 NaN 和虚数。
所以它仍然是 sqrt 函数,但抽象级别更高一些。那只是因为很多代码都依赖于它。哪个功能更容易更改?