大多数的外在特性是容易从系统中辨识出来的。例如,我们要做一个办公系统(OA,Office Anywhere),那么我们可以肯定几点事实:
(1) 这一系统总是某些办公室成员使用的;
(2) 这一系统总是提供上述人员的日常工作所需的功能;
(3) 这一系统既包括对现实工作的映射,也包括一些试图改变现行工作的电子化需求。
这几点事实显而易见,是由系统本身决定的。我们可以因此找到一些系统的组成部分:
(1) 观察办公室成员的工作,所以需要邮件、日程、考勤、审批等功能;
(2) 考虑到电子化管理,所以需要新闻发布、消息通信、文件管理、讨论区等功能。
据此很快我们就可以描述出这一系统的架构,如图2所示。
但这些只是一些共性的功能,也就是大家都需要的。随着你对办公室成员的调查进一步地展开,你必然面临一些特定的需要,例如:
(1) 人力,即档案、招聘、培训;
(2) 营销,即客户、活动;
(3) 经营,即资产。
据此我们进一步补充这一系统的架构,如图3所示:
回溯我们对这些“功能性模块”进行分类的依据,我们可以为这个系统的三个主要部分命个名,分别为“日常办公”、“电子化管理”与“特定业务”,如图4所示:
几幅架构图的演进关系并不难理解,但有一点点差异:图2至图3的标题中的版本号是“v0.0….x”,而在图4中却是“v0.0.0.1”。更深层次的问题是:何以认为前者连“一个架构的阶段性版本都算不上”,而图4却可以称为“一个最最最初级的架构版本”?
我们可以依赖种种视角对系统加以观察,并添加种种分类依据来得到前两幅图所示的“v0.0….x”版本的架构。但是,这些“识别”与“分别”的方法,无助于你得到“v0.0.0.1”中的几个关键概念:日常办公、电子化管理与特定业务。关键的区别在于,在你做出这些定义之前,现实系统(我的意思是需要你开发这个系统的客户、办公室成员或部门)并不会向你提出这三个概念;除非你主动提及,否则这些概念也不会对现实系统的实务有任何影响;除非你将这些概念独立出来,否则即便现实系统的确是由这些规律内在地驱动着的,也不会有人发现。
但是,是何种思维方式,让你:从现实系统中“发现”这三项知识,并将它们设定为这样的一些概念,并为这些概念设定了有别于其他的依据?
又或者问:你何以在系统中做出一些设定,而非仅仅陈述现实系统
的事实?
如前所述,了解系统的一些具体方法,大体来说类似于图5所示的一个认知过程的方法树。
我们事实上只讨论了认知行为中很小的一个部分①。“识别”与“分别”是这个树上较低层次的方法,它们能得到系统知识而无法归纳之,能分辨出差异而无法梳理之,能构建功能模块而无法推演之。因为归纳(概念)、梳理(关系)、推演(逻辑)这些架构活动所需要的,都是较高层次上的思维方法。
现实中,基于所面对的计算机系统,我们大多数的系统抽象与建模过程中都会用到“分别”这一认知方法。比如说,我们将已知需求规划为条目,然后分门别类,进而整理出子系统、模块、服务,以及规划出服务器、集群等的方案。对系统中的组成、要件、关系等加以分别,是上述这些活动的基点。
而这只是系统的一部分。如果我们能据此“架构”出系统,那只能庆幸:这个系统在绝大多数情况下表现为一个数字系统,因而如前所述——是可以基于“数的值”这一抽象概念来进行“分别”的。
或者反之,我们无法架构出系统,因为我们无法通过这种方法来构建系统的知识。
摘自:周爱民【我的架构思想】
电子书《我的架构思想》小述 https://blog.csdn.net/aimingoo/article/details/75948953
Aimingoo's Blog - [https://aimingoo.github.io/]