大多數的外在特性是容易從系統中辨識出來的。例如,我們要做乙個辦公系統(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所示的乙個認知過程的方法樹。
我們事實上只討論了認知行為中很小的乙個部分①。「識別」與「分別」是這個樹上較低層次的方法,它們能得到系統知識而無法歸納之,能分辨出差異而無法梳理之,能構建功能模組而無法推演之。因為歸納(概念)、梳理(關係)、推演(邏輯)這些架構活動所需要的,都是較高層次上的思維方法。
現實中,基於所面對的計算機系統,我們大多數的系統抽象與建模過程中都會用到「分別」這一認知方法。比如說,我們將已知需求規劃為條目,然後分門別類,進而整理出子系統、模組、服務,以及規劃出伺服器、集群等的方案。對系統中的組成、要件、關係等加以分別,是上述這些活動的基點。
而這只是系統的一部分。如果我們能據此「架構」出系統,那只能慶幸:這個系統在絕大多數情況下表現為乙個數字系統,因而如前所述——是可以基於「數的值」這一抽象概念來進行「分別」的。
或者反之,我們無法架構出系統,因為我們無法通過這種方法來構建系統的知識。
摘自:周愛民【我的架構思想】
電子書《我的架構思想》小述
aimingoo's blog - [
MySql建立乙個儲存過程
mysql 儲存過程是從 mysql 5.0 新功能。儲存過程的長處有一籮筐。只是最基本的還是執行效率和sql 封裝。特別是 sql 封裝功能,假設沒有儲存過程,在外部程式訪問資料庫時 比如 php 要組織非常多 sql 語句。特別是業務邏輯複雜的時候,一大堆的 sql 和條件夾雜在 php 中,讓...
DockerFile建立乙個映象過程
在 chentest 資料夾裡建立乙個dockerfile,內容如下 1 2 3 4 5 from ubuntu 14.04 maintainer chris chan chenx1242 163.com run apt get update apt getinstall y nginx runec...
建立乙個加密的目錄的過程。
開始選單 執行 cmd 出來命令提示符的時候 輸入 d 敲回車.到d盤後,輸入mkdir 空格 photo.其中photo.是檔名,這個 一定要加上 再回車 這樣這個加密後的資料夾就建立好了。當你在d盤裡開啟它的時候會提示你,引用了乙個不可用的位置 並且刪也刪不掉,看大小是0位元組 這樣就建立好了。...