色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

真刀真槍模塊化(2)—圖解Service模型

電子設計 ? 作者:電子設計 ? 2020-12-14 22:38 ? 次閱讀

作者: GorgonMeducer 傻孩子
首發:裸機思維

【說在前面的話】

在前面一篇文章《真刀真槍模塊化(1)——一本糊涂賬》中,我們討論了:

在工程開發中進行模塊化的本來目的——為了復用已有的代碼,節省當前項目的開發時間;

實際操作過程中遇到的尷尬問題——模塊的具體實現原本應該被視作黑盒子,程序員因為各種心理上的原因要閱讀代碼;

以及

“原則上”的解決方案——嚴禁程序員在項目開發過程中閱讀模塊的具體實現代碼。

道理說起來簡單,真要實際操作起來,一線開發人員往往會直搖頭:手中已有的所謂“模塊”質量參差不齊、模塊的開發者魚龍混雜、很多模塊別說出了問題要找開發方負責維護了,就是原作者是誰恐怕都找不到了——在這種情況下,大談“禁止開發人員閱讀模塊的實現代碼”,簡直就是天方夜譚,頗有幾分“何不食肉糜”的傲慢。
——難道模塊化本身錯了么?實際情況并非如此,這里傻孩子忍不住想“感慨”兩句:在追求和實踐新的方法(論)的時候,總難免會遇到這樣那樣的困難,有的困難甚至讓整個方案看起來“完全行不通”——在這種時候,如果立即退出來將整個方法全盤否定,就會失去寶貴的前進機會。
在模塊化的過程中,要想發揮模塊化“復用已有代碼”、“降低開發時間”的作用,就必須將模塊視作黑盒子;一旦模塊被視作黑盒子,實現的質量和后續的可靠維護就成為當前模塊是否可用的基石——進一步來說,不靠譜的代碼實現和差強人意的接口設計與封裝是導致模塊化失敗的根本原因。
本文將為您介紹一種模塊化封裝的簡單操作方式——由傻孩子根據十多年工程實踐經驗總結、歷經無數商業項目的千錘百煉。通過這一方式構建的模塊,我稱之為服務(Service),因此,這里所要介紹的模型又被稱之為“Service模型”。

【正文】

從具體操作層面來說,所謂Service模型并不復雜。
首先,每一個模塊都有一個屬于自己的專門的文件夾,文件夾的名稱與模塊名相同:

其次,每一個模塊中都有一個專門的頭文件,用于提供給模塊的使用者來包含(#include);該頭文件的名稱必須與模塊的名稱相同。

需要特別強調和說明的是:

該頭文件用于“從模塊內部向模塊外部”提供使用模塊所必須的“最小信息”;

任何人要使用模塊,必須且只能包含該頭文件;

我們把這類向模塊的使用者提供必要信息的頭文件稱之為接口頭文件;

接口頭文件遵循“最小信息公開原則”,即,該頭文件中只存放用戶使用模塊最少最少所必須知道的信息。實際操作中,類型定義、宏定義、函數和全局變量聲明都應該首先放置在對應的源代碼中(或是后面會提到的模塊內私有的接口頭文件中);當且僅當我們發現用戶要使用模塊的某一功能必須要用到某一信息時,才“極不情愿”地、“摳門”的、且盡可能將其它能剝離和隱藏的信息剝離開后,放置到接口頭文件中。

與接口頭文件相對,每一個模塊內部都會有一個專門的頭文件用于實現對模塊的配置:

該頭文件用于“從模塊外部向模塊內部”輸入配置信息;

如無特殊說明或安排,該頭文件應該固定命名為 app/_cfg.h(沒有額外的前綴和后綴);

如無特殊說明或安排,該頭文件應該僅包含配置信息,例如:宏定義、類型定義(在極其特殊的情況下,偶爾出現的全局變量或者函數聲明);

我們把這類頭文件稱之為“配置頭文件”;

在構建和使用模塊的時候,無論是模塊的設計者還是模塊的使用者,都應該遵循黑盒子原則,在操作上表現為——模塊的使用者不應該修改任何位于模塊文件夾內部的內容——模塊文件夾既是黑盒子的容器,也是黑盒子的邊界。
為了遵守這一原則,模塊內部的配置頭文件實際上是不允許用戶去修改的——那么這又如何讓用戶更改對模塊的各個配置選項呢?答案很簡單,如下圖所示:模塊內部的app/_cfg.h 在文件的一開始會首先包含上一級目錄的app/_cfg.h。

為了實現這一點,一個模塊內部 app/_cfg.h 的固定內容格式為:

//!作為模塊的用戶,不要修改這里的任何內容

一個模塊的接口頭文件,其內部格式可能為:

//!作為模塊的用戶,不要修改這里的任何內容

可以很容易注意到,當使用某一模塊時,用戶可以很方便的在模塊外部定義一個屬于自己的 app/_cfg.h 來向模塊提供配置信息——而無論如何修改這一文件,都不會破壞黑盒子本身的內容。
再次,一個模塊往往擁有一個或多個C源文件,它只需要包含模塊的接口頭文件,就可以共享一些“對外公開的信息”。

這里有個朋友會問了:根據最小信息公開原則,接口頭文件中只包含了一些最小信息,如果模塊內的多個C源文件之間需要共享一些非公開的私有信息,該怎么處理呢?
為了解決這一問題,我們一般會引入一個以雙下劃線為前綴的接口頭文件(比如,叫做/_/_common.h),并視其為模塊的私有財產。如下圖所示,這一頭文件是僅供模塊內的源代碼包含的——無論是模塊的接口頭文件還是模塊的配置頭文件都不應該對其進行包含——以防信息泄露:

一個典型的 /_/_common.h 內容如下:

/*!作為模塊的用戶,不要修改這里的任何內容,理論上也不應該關心這

基于這一規則,模塊內一個可能的C源文件內容如下:

//! 作為模塊的用戶,不要修改這里的任何內容

最后,一個模塊內是允許包含其它子模塊的,對于這種嵌套情況,僅需要兩步驟就可以完成部署:

將子模塊拷貝到父模塊中,或者按照前述的模塊構建規則,在父模塊中建立一個子模塊;

父模塊的接口頭文件包含子模塊的接口頭文件

少數情況下,如果子模塊與父模塊高度耦合(一般來說就是在父模塊中從頭開始建立一個新的子模塊時會發生這種情況)——比如子模塊依賴父模塊的 /_/_common.h 中提供的信息,則應該在子模塊中也建立一個 /_/_common.h,并仿照 app/_cfg.h 的做法,在頭文件的一開始首先向上包含父模塊的 /_/_common.h;

如果父模塊包含/_/_common.h,而子模塊并不需要這一信息,則子模塊無需在做任何特殊修改。

對app/_cfg.h來說,由于子模塊原本就會自動包含上一級的app/_cfg.h,因此,我們無須做任何特殊操作,子模塊就可以透過父模塊的app/_cfg.h自動從外界獲取配置信息——這就像是一種標準化的水管安裝。

以上就是使用Service模型進行模塊化的基本規則。是不是很簡單?

【后記】

Service模型本身是完全本著簡化用戶操作的宗旨,以實用性為重中之重,同時也避免一切“反直覺”的設定。
對用戶來說,這一模型是非常友好的:

只需要拷貝模塊目錄就可以完成部署;

只需要在模塊的外部額外添加一個app/_cfg.h就可以實現對模塊的配置;

所有關于模塊的使用信息(使用說明書)都放置在一個唯一的、與模塊同名的接口頭文件中;且這里包含的信息對用戶來說都是可用的(沒有無用信息,也沒有多余信息);

對模塊的開發者來說:

這一模型是高度遵守黑盒子原則的;

用戶使用模塊,是不需要“用臟手染指”自己寶貴的代碼的(無需修改);

對制作 Library 非常友好,只需要保留接口頭文件,而將其它所有文件(包括源代碼和私有接口頭文件)刪除并保留一個固化好的app/_cfg.h即可。

模塊是非常容易遷移和嵌套的。

當然,這一Service模型也有一個小缺點(可能有些人也對此無法容忍),即,用某些工程管理工具將頭文件的包含關系展開時,通常會看到海量的app/_cfg.h(盡管他們內部都使用了模塊特有的保護宏進行區別)——對于這一問題,在真刀真槍模塊化的后續內容中,將提供一個較為完美的解決方案,這里就先賣個關子——對普通用戶來說,現有的Service模型足夠了。

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3254

    瀏覽量

    48876
  • Service
    +關注

    關注

    0

    文章

    30

    瀏覽量

    13789
收藏 人收藏

    評論

    相關推薦

    原理圖模塊化,BOM 物料位號處理

    原理圖模塊化,BOM 物料位號的處理問題 原理圖模塊化,把常用的模塊保存成一個PART(在TOOL 菜單下 選擇 Generate Part)。保存成OLB格式。使用的時候,就像使用元器件一樣,從
    發表于 01-03 08:22

    華為預制模塊化數據中心連續十年蟬聯全球第一

    近日,第三方國際權威機構Omdia發布《2023全球預制模塊化數據中心報告》,對全球預制模塊化數據中心市場動態、市場份額、發展趨勢進行洞察和分析。報告顯示,2023年華為預制模塊化數據中心位居全球市場份額第一,至今已連續十年蟬聯
    的頭像 發表于 12-31 11:41 ?186次閱讀

    全球第四 科華數據蟬聯全球模塊化UPS榜單

    近日,第三方權威機構Omdia發布《2024全球模塊化UPS市場報告》,對全球模塊化UPS市場動向、市場份額及發展趨勢等進行了分析與洞察。報告顯示,作為模塊化UPS的創新引領者,科華數據在2023年
    的頭像 發表于 12-13 14:51 ?344次閱讀
    全球第四 科華數據蟬聯全球<b class='flag-5'>模塊化</b>UPS榜單

    模塊化示波器的技術原理和應用

    模塊化示波器是一種用于信息科學與系統科學領域的電子測量儀器,以下是對其技術原理及應用的詳細闡述:一、技術原理 信號轉換與顯示: 模塊化示波器利用電子示波管的特性,將肉眼無法直接觀測的交變電
    發表于 12-11 14:20

    模塊化儀器的技術原理和應用場景

    模塊化儀器是插拔式的計算機板卡,功能類似于傳統的臺式儀器,其技術原理和應用場景可以歸納如下:一、技術原理 模塊化設計:模塊化儀器使用一個框架,可以將不同類型或不同數量的功能卡插入其中,從而適應一系列
    發表于 11-28 15:09

    模塊化插座接線方法有哪些

    模塊化插座,也稱為模塊化電源插座或模塊化PDU(Power Distribution Unit),是一種可以根據需要靈活配置電源插座和接口的設備。這種設計允許用戶根據具體的用電需求,選擇不同的
    的頭像 發表于 10-18 09:50 ?588次閱讀

    模塊化不間斷電源和傳統差距,安裝位置方面

    模塊化UPS(不間斷電源)和傳統UPS是指不間斷電源系統的不同架構和設計。UPS系統具有多種優勢,使其成為某些應用的首選。模塊化UPS和傳統UPS有什么區別?可擴展性模塊化UPS:得益于其
    的頭像 發表于 06-25 09:34 ?334次閱讀
    <b class='flag-5'>模塊化</b>不間斷電源和傳統差距,安裝位置方面

    鋰電池是模塊化好還是成組好?

    鋰電池的模塊化和成組是兩種不同的設計理念,它們各自有著不同的優勢和應用場景。
    的頭像 發表于 04-29 15:17 ?870次閱讀

    機房升級必備神器:模塊化精密空調的五大超能力!

    模塊化機房精密空調是一種專門為現代數據中心和機房設計的空調系統,具有以下特點和優勢: 靈活性:模塊化機房精密空調采用模塊化設計,可以根據機房的規模和需求,自由組合不同數量的空調模塊
    的頭像 發表于 03-19 18:24 ?1251次閱讀
    機房升級必備神器:<b class='flag-5'>模塊化</b>精密空調的五大超能力!

    模塊化機房:數據中心的未來

    隨著數字轉型加速,數據中心已成為企業運營的核心。傳統的數據中心面臨空間利用不足、能源效率低下、擴展性差和維護成本高等問題。模塊化機房應運而生,它不僅克服了傳統設計的局限,還為數據中心的建設和運營帶來了革命性的改變。本文將探討模塊化
    的頭像 發表于 03-12 17:26 ?923次閱讀

    什么是模塊化機房?

    在這個數據驅動的時代,數據中心的作用變得日益重要。而模塊化機房,作為一種創新的數據中心解決方案,正在逐漸改變我們構建和管理這些關鍵設施的方式。但究竟什么是模塊化機房呢?它又為何受到越來越多行業的青睞?在本文中,我們將一探究竟。
    的頭像 發表于 03-12 15:05 ?1493次閱讀

    模塊化UPS是什么?模塊化UPS電源并機的優點

    模塊化UPS是什么?模塊化UPS電源并機的優點? 模塊化UPS是一種將UPS電源拆分為多個獨立模塊的解決方案。每個模塊包括一個或多個電池組、
    的頭像 發表于 01-10 15:16 ?1376次閱讀

    什么是模塊化電池?鋰電池模塊包裝運輸要求

    什么是模塊化電池?鋰電池模塊包裝運輸要求 模塊化電池是一種將多個電池單元組合在一起形成一個整體的電池系統。這種構造方式可以使電池在容量、電壓、能量密度等方面得到有效的提升,同時也可以提高電池的安全性
    的頭像 發表于 01-10 11:42 ?1324次閱讀

    什么是模塊化鋰電UPS?模塊化UPS支持鋰電池嗎?

    什么是模塊化鋰電UPS?模塊化UPS支持鋰電池嗎? 模塊化鋰電UPS是一種基于鋰電池技術的不間斷電源系統(UPS),它的主要特點是可以根據需求進行模塊化擴展和靈活配置。
    的頭像 發表于 01-09 15:51 ?918次閱讀

    LumiDL TM模塊化照明器介紹

    今天我們為大家介紹一下LumiDL TM模塊化照明器。
    的頭像 發表于 01-08 11:11 ?760次閱讀
    LumiDL TM<b class='flag-5'>模塊化</b>照明器介紹
    主站蜘蛛池模板: 国产精品毛片在线视频| 一区二区视频在线观看高清视频在线 | 嫩草影院地址一地址二| 国产精品欧美一区二区在线看| 中文字幕在线视频免费观看| 婷婷激情综合色五月久久竹菊影视| 一边捏奶头一边啪高潮会怎么样 | 好吊射视频988gaocom| se01短视频在线观看| 长篇高h肉爽文丝袜| 无套内射无矿码免费看黄| 欧美 另类 美腿 亚洲 无码| 久久91精品国产91久| 国产精品一区二区制服丝袜| xxx成熟xxx| 97亚洲狠狠色综合久久位| 亚洲野狼综合网站| 午夜国产大片免费观看| 日日啪在线影院百度| 欧美午夜a级精美理论片| 久久这里的只有是精品23| 后入到高潮免费观看| 国产日韩精品一区二区三区在线| 一级黄色香蕉视频| 午夜宅宅伦电影网| 男人边吃奶边挵进去呻吟漫画 | 女人爽到高潮嗷嗷叫视频| 久久精品免费观看久久| 嗨嗨快播电影| av淘宝 在线观看| 王小军怎么了最新消息| 青青伊人网| 九九热在线视频| 国产啪视频在线播放观看| 国产v综合v亚洲欧美大片| 嘟嘟嘟WWW免费高清在线中文| qvod免费电影| 办公室的秘密2中文字幕| 亚洲欧美高清在线精品一区| 亚洲精品成人无码A片在线| 亚洲2017天堂色无码|