浪潮之巅纯软件公司的先驱
'许多读者现在将看到每次分解中使用了哪些标准。 在第一次分解中,使用的标准是使处理的每个主要步骤成为一个模块。 可能有人会说,要进行第一个分解,就要制作一个流程图。 这是最常见的分解或模块化方法。 这是所有程序员培训的产物,它告诉我们应该从一个粗略的流程图开始,然后从那里过渡到详细的实现。 对于具有大约5,000-10,000条指令的系统,该流程图是一个有用的抽象,但是随着我们的发展,它似乎还不够。 需要一些额外的东西。
使用“信息隐藏”作为标准进行第二次分解。 这些模块不再对应于处理中的步骤。 […]第二次分解中的每个模块都以其对设计决策的了解为特征,而该设计决策对其他所有模块都是隐藏的。 选择它的界面或定义是为了尽可能少地揭示其内部运作方式。”
于:关于将系统分解为模块的准则,DL Parnas,1972年
论信息隐藏设计原理
'我们的模块结构基于称为信息隐藏[IH]的分解标准。 根据此原则,可能会独立更改的系统详细信息应该是单独模块的秘密; 在模块之间的接口中应该出现的唯一假设是那些被认为不可能更改的假设。 每个数据结构仅在一个模块中使用。 它可以由模块内的一个或多个程序直接访问,但不能由模块外的程序直接访问。 需要存储在模块数据结构中的信息的任何其他程序都必须通过调用属于该模块的访问程序来获取它。
应用此原理并不总是那么容易。 这是试图将软件的预期成本降至最低,并要求设计人员估计更改的可能性。 这种估计是基于过去的经验,可能需要了解应用程序领域以及对硬件和软件技术的了解。”
于:复杂系统的模块化结构,DL Parnas,1985年
在模块层次结构上
在讨论系统结构时,很容易将良好分解的好处与分层结构的好处混淆。 如果可以在模块或程序之间定义某种关系,并且该关系是部分排序,则我们具有分层结构。 我们关注的关系是“使用”或“依赖”。 […]部分排序给我们带来了另外两个好处。 首先,系统的某些部分受益(简化),因为它们使用了较低级别的服务。 其次,我们能够降低上限,仍然拥有可用和有用的产品。 […]层次结构的存在向我们保证了我们可以从树的上层“修剪”并在旧树干上启动一棵新树。 如果我们设计了一个系统,其中“低级”模块使用了“高级”模块,那么我们就没有层次结构,我们会发现移除系统的各个部分更加困难,而“级”将在系统中没有多大意义。”
于:关于将系统分解为模块的准则,DL Parnas,1972年
关于关注点分离
“让我尝试向您解释,我的品味是所有明智思维的特征。 就是说,一个人愿意出于自身的一致性而独立地深入研究其主题的一个方面,一直都知道一个人只在其中一个方面中占据一席之地。 我们知道一个程序必须是正确的,我们只能从那个角度研究它; 我们也知道它应该是有效的,可以这么说,我们可以在另一天研究它的效率。 在另一种情况下,我们可能会问自己是否,如果这样:为什么,该程序是理想的。 但是,通过同时处理这些各个方面,则无济于事! 这就是我有时所说的“关注点分离”,即使不是完全可能,这也是我所知道的唯一有效地整理自己的思想的方法。 这是我的意思,“将注意力集中在某个方面”:这并不意味着忽略其他方面,而只是从这个方面的观点来看,另一个方面是无关紧要的。 它同时是一轨和多轨。”
于:关于科学思想的作用,埃德斯·W·迪克斯特拉,1974年
论概念完整性
“工具中的这种设计一致性不仅使人愉悦,而且使学习和使用变得容易。 该工具可以实现人们期望的功能。 我认为[…]概念完整性是系统设计中最重要的考虑因素。 有时美德被称为连贯性,有时被称为一致性,有时被称为风格统一[…]独奏设计师或艺术家通常在潜意识中创作出具有这种完整性的作品。 他倾向于每次遇到微决策时都采用相同的方式(除非有很强的理由)。 如果他没有表现出这种正直,我们认为这项工作是有缺陷的,不是很大。”
于:弗雷德里克·布鲁克斯(Frederick P. Brooks)的设计设计,2010年(最初在1975年的《神话人月》中引入)
参考: IT架构上的5分:基本概念,由JCG合作伙伴 Niklas的软件体系结构先驱者解释。
翻译自: https://www.javacodegeeks.com/2012/07/5-on-it-architecture-root-concepts.html
浪潮之巅纯软件公司的先驱