什麼是架構?

来源:http://www.cnblogs.com/EmptyFS/archive/2016/08/20/5789593.html
-Advertisement-
Play Games

早上醒來打開手機,瀏覽完該看的信息後,隨意點看某脈求職,由於自己定製的都是架構和開發類別,所以看到的招聘幾乎都是架構師職位,薪酬幾乎都在30~50K/月,好是羡慕(幾乎都是招Java架構的......看來還是得加快學習進度,轉型速度要快點)。心想如果自己去面試這些職位時,對方萬一問:“你來應聘架構師 ...


  早上醒來打開手機,瀏覽完該看的信息後,隨意點看某脈求職,由於自己定製的都是架構和開發類別,所以看到的招聘幾乎都是架構師職位,薪酬幾乎都在30~50K/月,好是羡慕(幾乎都是招Java架構的......看來還是得加快學習進度,轉型速度要快點)。心想如果自己去面試這些職位時,對方萬一問:“你來應聘架構師,那你來說說什麼是架構?”時,自己要怎麼回答?從而引起來下麵的聯想,哈哈......隨想嘛,所以本篇只討論操作步驟,不談具體的實現細節,將一時的想法記錄一下

 

  什麼是架構?一直以來也將自己定位為架構師(感覺還未真正入門 T_T ),但如果讓自己能以最簡潔的語言來描述它,有說說它具體的工作內容,還真的沒有去認真思考過,只能大概的說個所以然。

  架構一直在心裡是一個很抽象的東西,就如下麵描述的這樣:

  軟體架構是一個系統的草圖。軟體架構描述的對象是直接構成系統的抽象組件。各個組件之間的連接則明確和相對細緻地描述組件之間的通訊。在實現階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。

  架構對於框架來說,它就是繪出好的建築圖紙,它描述建築物的外部形狀、內部佈置、結構構造、內外裝修、材料做法以及設備、施工等各種圖樣。

  而在實際工作中,是怎麼去做去執行的呢?在好長一段時間里我都無法將它明明白白的描述出來。只能說是憑經驗,得到一個需求後就知道產品大概要怎麼設計,它要用到那些技術,會大概面臨什麼問題,不同的問題或要求(性能、安全、數據量、併發......)在不同階段要怎麼去設計和用到那些技術,資料庫結構要怎麼去實現,是否需要分庫分表,怎麼設計才更有擴展性,怎麼去解耦,編碼時要用到多少人,這些人大概需要什麼樣的技能,需要多少開發時間,會不會出現延期,萬一延期的話要怎麼處理,測試呢?佈署呢?版本更新迭代?每個階段與其他相關部門的溝通?各種設計、開發、溝通文檔?......

  那具體怎麼做呢?

  這真不是三言兩語就可以說得清楚的,去書店看著那一本本厚厚的架構設計書籍就知道了。因為針對不同的行業、不同規模的企業、公司技術環境、公司計劃投入的資金大小、職位配備、項目的功能需求、技術人員能力、長短期目標、技術儲備情況、使用的開發語言、資料庫......都會影響架構師的判斷,決定著當前(不是最終哦)使用的技術框架。當然在某些階段也是有相同的地方,過程也大同小異,所以我們討論架構的話,必須有個邊界的限制。

 

  首先,架構師必須瞭解具體的需求

  不瞭解具體的業務需求,就沒辦法設計出一個成熟健壯的架構,也無法根據現實的具體環境,去選擇出最適合當前公司或團隊使用的技術架構,而導至各方面成本的增加,過度設計,投入大於產出;又或者產品擴展性不足無法應付業務增長及變化,而最終開發出來的產品也就很難吻合市場需求了。

  客戶、市場人員、老闆、運營、銷售、市場、架構、產品......不同的人員對產品都有不同的理解(比如餐飲行業中的:食客、收銀、服務員、點菜、傳菜、選菜、廚師、領班、店長、財務......對店裡用的軟體理解的角度也是不一樣的),且同一個人在不同的場景針對不同的人說的同一句話都有可能意思都不一樣,更何況這麼多不同學歷文化、職位、角色的人,大家對同樣的話語、同樣的描述的理解不同肯定也會產生不同的結果。

  所以,架構師首先要做的,是自己去瞭解需求,然後將自己的理解通過使用各種工具將業務需求繪製出來,形成清晰、直觀、容易瞭解的架構方案,和大家對稱對項目需求理解,看看大家理解的信息是否一致,統一思想,防止偏差。

  比如:使用UML繪製各種概念模型(用例圖、泳道圖、流程圖、時序圖......);或是用DDD思想去創建各種領域、子域、限界上下文模型;又或者是用利益相關者的視角去繪製利益相關者視圖、架構分層視圖、業務產品視圖、信息組織結構視圖、業務功能視圖、組織機構視圖、業務流程視圖、應用程式協作視圖......

 

  其次,設計產品,細化各種模型與視圖

  當大家對產品的理解統一之後,開始由產品經理來設計產品原型,以及架構師對前面模型與視圖進行細化,形成一份份與技術相關的各種文檔,指導後續工作的開展。

  產品原型與各模型是相輔相成的,產品原型是模型的可視化體現,而模型是產品後端複雜的業務實現。

  成熟的架構師除了懂得針對需求建立各種模型外,還要懂得從需求與產品中,提煉出成熟的商業模式與盈利模式,一個軟體如果不存在行業價值或商業價值,最終實現盈利,那它也走不了多遠。

 

  然後,根據所在行業、公司、部門等各種綜合情況,再確定使用具體的技術框架

  每個行業都有自己的特殊性,在這裡就不進行深入討論了。

  而每個公司的資金實力都是不一樣的,技術部分的崗位職位配置也各不相同,使用的技術語言也是各種各樣,再加上技術人員技能水平也是高低有別,所以一套架構可以通吃的情況是不存在的。

  資金充沛的土豪公司可以隨意,缺什麼職位就隨便高薪聘請,而用的技術框架也可以直接上高大上的那些組合,不用去考慮開發時間與成本......呵呵,這些對於絕大部分公司來說YY就好了,我們還是要回到現實中來,我們經常會碰到的是資金有限,人手不足,公司使用指定的技術或框架......然後對投入與時間又有嚴格要求,但又想系統開發出來以後系統可以隨時擴展,應付萬一業務做大,高併發、大數據、分散式、可擴展......等都要能對接的上且不用花費太大的成本,呃......

  好的架構會對業務發展和技術發展做好提前預判(雖然不一定一直都正確),提前採用適合的性能比最好的技術架構來實現。當然在發展的過程中,如果真的公司業務量起來了,改造也大都在合理的範圍內。在不可避免需要進行大改造時,那也是有選擇有計劃的替換某些模塊。

  再具體點來說,就是要使用.net、java、php、pyton還是什麼開發語言,使用SOA架構、微服務架構,還是傳統的軟體架構,軟體框架用MVC、傳統三層、DDD......數據層用EF、MyBatis、Hibernate......其他層呢?使用分散式架構還是一體式?使用消息陣列嗎?匯流排呢?前端框架呢?要考慮客戶端相容什麼版本手機或瀏覽器?安全呢?工作流?數據結構設計?開發模式是TDD/DDD/PDD/敏捷?人員分工安排?開發計劃?開發進度控制?......

 

  跟著才進入具體的開發實現

  這部分大家是最熟悉的就不擴展了 

 

  最後是測試、部署,產品的迭代

  ...... 

 

  當然,並不是所有項目都是按這個順序來執行的,小項目小需求無架構,對於簡單的需求開發一個簡單功能的產品,直接畫個草圖然後碼代碼就可以了,考慮太多反而是過度設計浪費時間。當然架構師也不是萬能的什麼都懂什麼都會,一個人無法完成一個大中型項目的開發,它需要團隊中各個成員的密切配合,一起努力完成。

  可以說每個架構師心中都有片森林,清晰的知道設定好目標以後,為了完成這個目標,我們會提前做好全方位的計劃,當然這個計劃不只是技術上的,還會關係到相關部門的溝通與配合,清楚在前進的路途中每一個節點或階段性目標要達到時需要的準備工作與各部門提供的配合工作。然後就是把控好這個節奏,讓產品的大船沿著正確的方向前進,最終到達目的地。
  完美的架構師,他是技術總監、系統分析師、架構師、產品經理、項目經理、核心開發、測試人員,他是堵槍眼的角色,那個崗位需要隨時準備頂上的人員。

 

  知識有限對架構師的認識比較淺簿,想到哪就寫到哪,不知這樣認為是否正確,歡迎大家指正。

 

 

 版權聲明:

  本文由AllEmpty原創併發布於博客園,歡迎轉載,未經本人同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。如有問題,可以通過[email protected] 聯繫我,非常感謝。

 

  發表本編內容,是為了和大家共同學習共同進步,有興趣的朋友可以加加Q群:327360708 ,大家一起探討,我們群每半個月會組織一次在群視頻里進行技術分享,有興趣的朋友可以加入進來一起探討

    更多內容,敬請觀註博客:http://www.cnblogs.com/EmptyFS/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一個剛入門編程的大一狗,第一次寫博客,希望能對自己學的知識進行鞏固和提升,也希望記錄自己成長的過程。 學習Python,一是因為暑假學的c++頭疼,聽說Python簡單,那我就試試吧,二是因為Python形勢一片大好,算是附和潮流吧! 一、初識Python 1、第一個Python代碼 依然是熟悉 ...
  • 上面是系統定義的,比較枯燥,下麵是自己寫的代碼: 執行過程就是:窗體創建(給OnPositionChange賦值)--點擊button(讀取edt1中的值) 之後調用setposition(也許這就是綁定好的了吧) DOPositionchange 執行FOnPositionChange(也就是On ...
  • 應用場景: 微信授權登錄過程中,需要用戶確認,故衍生此需求; 相應的邏輯不放在前端的原因是,此部分邏輯屬於偏功能業務,所以放在後端,方便統一管理。 解決辦法: 通過php echo出javascript腳本,這裡需要關註的一點是緩衝區。 緩衝區應該是有三個部分,分別是php、webserver、we ...
  • 在開發過程中,經常需要和別的系統交換數據,數據交換的格式有XML、JSON等,JSON作為一個輕量級的數據格式比xml效率要高,XML需要很多的標簽,這無疑占據了網路流量,JSON在這方面則做的很好,下麵先看下JSON的格式, JSON可以有兩種格式,一種是對象格式的,另一種是數組對象, 從上面的兩 ...
  • Java compiler level does not match the version of the installed java project facet錯誤的解決 因工作的關係,Eclipse開發的Java項目拷來拷去,有時候會報一個很奇怪的錯誤。明明源碼一模一樣,為什麼項目複製到另一臺 ...
  • 定義變數 在Python中,定義一個變數是很簡單的。而且,在Python中,定義是不需要用分號結尾的。例如: 判斷語句 Pyhon的if判斷語句是由if、elif、else組成,每個判斷都是由:結尾。Python的判斷也是非常簡單的。 迴圈 在python中,是不支持直接的字元串拼接數值的。如果想要 ...
  • 模板方法模式 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。通俗的說的就是有很多相同的步驟的,在某一些地方可能有一些差別適合於這種模式,如大話設計模式中說到的考試場景中,每個人的試卷都是一樣的,只有答案不一樣。這種場景 ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...