混合的抽象层次将炸弹置于项目的基础

在作为建筑师的多年工作中,我见过不同的客户,在制定技术规范和客户希望时,最常见的错误之一就是混合了不同的抽象级别。一个人来说:



-我需要一块硬件来控制门的驱动并在七段屏幕上显示当前状态,并且始终与一个外部服务器进行远程控制,以便它可以通过TCP与该服务器通信,并使用VueJS作为控制面板。



似乎很清楚这个人想要什么。甚至有这种传统知识的人也会引起热情-一个人似乎很清楚自己想要什么。通常,它甚至指向特定的控制器/组件/框架/协议。



当然,对于这样的订单,您可以制造必要的铁。如果选定的组件彼此不矛盾,它甚至可以工作。但是,如果计算不是针对项目而是针对产品,则需要对其进行支持,那么花时间并仔细地将这些愿望划分为多个级别,以了解为什么会有这样的屏幕,为什么使用TCP以及VueJS进入何处,则更为有用。可能会发现,由于小鸭综合症,这些技术令客户感到愉悦。或者他只是不知道还有其他类型的屏幕。



在这种情况下,我们首先讨论第一层:控制驱动器,显示和远程控制的设备。



然后,我们开始指定要求(而不是特定的技术)。

IP68机箱中的设备,带有230V电源,可通过Modbus通过变频器控制800W异步驱动器,并具有清晰可见的指示器,其中四个状态(打开/关闭/进行中/故障)必须由10米远的人识别,并具有远程控制功能通过Internet上的现代浏览器访问。



只有在那之后,您才可以开始选择需求的实现级别。这是控制器,这是rs485收发器,这是电源,这是指示器。



分离这两个级别(需求和实现)很容易-在大多数情况下,您可以为相同的需求选择不同的实现,这不会以任何方式改变需求的级别。需求的级别可能会因实施成本太高或您在视觉上不喜欢它而改变,但不应因选择对开发人员更方便的控制器而改变,否则您可能对需求的了解太深,或者太懒惰而无法找出制定原因这样的要求。



假设某个客户想要一个8厘米字符的屏幕。此时,架构师或产品经理应该问为什么精确为8厘米?在大多数情况下,事实证明客户对内部有“从10米处可见”的要求,但他决定简化任务并立即提出了具体要求。或他根本无法抽象地看待事物,因为他以更易于理解的对象思考该项目:一个抽象的“从10米处可见的屏幕”比“一个大的,好吧,您知道,在一个盒子中显示分段”要复杂得多,我在这里我会把它挂在墙上。”



但是,顾名思义,客户没有开发项目的能力,否则他就不会来找您。即使他具备这些能力,他也无法将其应用到这个特定项目的开发中,因为那时候他为什么来找你?



项目中的决定应由负责这些决定的人来决定。如果客户不对所选屏幕的代码开发时间负责,则不应选择该屏幕。客户的任务是说,在他看来,所选屏幕模型实现了什么要求。



体系结构决策者面临的挑战是选择最合适的解决方案以满足这些要求。它可以是LED屏幕,LCD或只是4种颜色的交通信号灯,以及带有铭文的标牌。



但是,架构师不应将客户所说的一切当作给定的东西:如果以此方式可以制定出足以进行开发的技术规范,那么客户将不需要他与开发之间的中介。



对需求的描述不是在其所属的体系结构级别上进行的,这是保证将项目的体系结构掩埋的危险的事情,不仅将其描述为愿望的描述,而且将其减少为危险的气体混合物,这些气体仅是安全的,但在混合时容易爆炸。按照这种体系结构实现的系统迟早会爆炸—随着当前的抽象,复杂的修改或功能的任何改变而falling节。



假设您正在盖房子。房子的基本元素是砖。您不能买一半的砖,但买五辆砖头的自卸车并不能买房子。甚至一百块砖都不会变成墙。要以最低的级别进行构建,您将只能使用一块砖砌成砖,而不能多于一块。



但是,用砖块甚至是砖块建筑来设计房屋是一个非常糟糕的主意。



首先,复杂性增加。任何内存和资源都是有限的,最好花少于钱。描述每个砖块位置的房子太难以察觉,它由太多元素组成。绘制很困难(很难快速绘制单个房间,而是绘制每个砖块),绘制图很难阅读,3D模型渲染时间很长,采购清单使用的是确切的砖头数量而不是吨数。



其次,灵活性丧失了:转移一块砖头已经是一个错误。我们不会在低水平的开发中留有回旋余地,这迫使我们去做别人的工作,并收到对我们不重要的错误消息。如果我们将任务设置为“使一堵砖墙厚30厘米”,那么只要不违反强度或其他限制,建筑商就有机会按自己的意愿铺设砖墙。如果我们给他一个砖块位置的精确绘图,那么在下一次检查时,几毫米的接缝厚度的累积差异将使我们在特定砖块位置的误差为半厘米,这将导致墙体与传统TK之间的不匹配。有时候这是一个错误,但是在大多数情况下,一块砖的错误位置不会影响任何事情,并且取决于具体情况,在设计时我们无法考虑这些因素:例如,生产中的砖块尺寸不正确。您可以返回,也可以以此为基础,这将变得更加容易和便宜。在单个积木级别上进行设计会使我们失去选择的余地,迫使我们要么匹配理想结果,要么扔掉所有工作。



第三,我们无法进入另一个层次,开始考虑房间,而我们只有成堆的砖块无限地相互流入,并且它们之间有某种空间。对我们来说,砖比它们之间的空间更重要,这只是没有砖,而不是生活的地方。似乎是在为房间而建房子,但是要改变房间墙壁的愿望是如此的艰巨,导致了太多的移动砖头和砌筑新砌体的操作,所以我们几乎停止这样做:与不舒服的墙壁相处要比在那儿不断移动砖头要容易得多。 -在计划上。



第四,替换基本元素的想法难以忍受。一切都以砖块为基础,您以砖块为单位计算距离,以砖块为单位计算成本,以砖块为单位计算重量,以砖块计算墙壁的导热系数。这很方便,因为它不会创建不必要的度量单位,不必要的抽象。砖中的导热系数很容易转换为距离,而成本很容易从距离推算出来。



但是,要处理由其他材料制成的房屋是不可能的:您必须停止专注于砖块,这会破坏整个世界的景象。虽然,通过正确地分离抽象层,您可以完美地设计米级的房间,以卢布计算成本,以吨为单位计算桩上的载荷,以W /(m K)计算导热系数,只有在最后一个设计级别,您才能决定要采取的措施-砖块,加气混凝土或混凝土板。而且,如果客户不喜欢该解决方案,请在不涉及项目其余部分的情况下进行更改。



在体系结构上进行工作是关于遍历抽象层次。这些级别的愿景对于优秀的建筑师而言是必不可少的。



All Articles