91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-12-14 22:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者: GorgonMeducer 傻孩子
首發(fā):裸機(jī)思維

【說在前面的話】

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

在工程開發(fā)中進(jìn)行模塊化的本來目的——為了復(fù)用已有的代碼,節(jié)省當(dāng)前項目的開發(fā)時間;

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

以及

“原則上”的解決方案——嚴(yán)禁程序員在項目開發(fā)過程中閱讀模塊的具體實現(xiàn)代碼。

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

【正文】

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

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

需要特別強(qiáng)調(diào)和說明的是:

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

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

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

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

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

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

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

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

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

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

為了實現(xiàn)這一點,一個模塊內(nèi)部 app/_cfg.h 的固定內(nèi)容格式為:

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

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

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

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

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

一個典型的 /_/_common.h 內(nèi)容如下:

/*!作為模塊的用戶,不要修改這里的任何內(nèi)容,理論上也不應(yīng)該關(guān)心這

基于這一規(guī)則,模塊內(nèi)一個可能的C源文件內(nèi)容如下:

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

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

將子模塊拷貝到父模塊中,或者按照前述的模塊構(gòu)建規(guī)則,在父模塊中建立一個子模塊;

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

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

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

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

以上就是使用Service模型進(jìn)行模塊化的基本規(guī)則。是不是很簡單?

【后記】

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

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

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

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

對模塊的開發(fā)者來說:

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

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

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

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

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

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3756

    瀏覽量

    52128
  • Service
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    14348
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    LuatOS 系統(tǒng)框架的模塊化設(shè)計原理

    ?LuatOS 的設(shè)計核心在于高度模塊化與松耦合架構(gòu)。系統(tǒng)將硬件驅(qū)動、通信協(xié)議、定時任務(wù)等封裝為獨立模塊,通過統(tǒng)一的注冊與回調(diào)機(jī)制接入主事件循環(huán)。這種設(shè)計不僅提升了代碼復(fù)用率,也使得開發(fā)者可以按需
    的頭像 發(fā)表于 02-03 15:56 ?131次閱讀
    LuatOS 系統(tǒng)框架的<b class='flag-5'>模塊化</b>設(shè)計原理

    模塊化高精度銣原子鐘存在的意義

    在時頻計量領(lǐng)域,銣原子鐘以其穩(wěn)定性和可靠性成為通信、導(dǎo)航、科研等領(lǐng)域的核心設(shè)備。西安同步電子科技有限公司的SYN3306型高性能銣原子鐘,通過將10MHz輸出設(shè)計為模塊化結(jié)構(gòu),實現(xiàn)了從“單一功能設(shè)備
    的頭像 發(fā)表于 01-21 19:09 ?130次閱讀

    鼎陽科技推PXIe模塊化示波器、PXIe模塊化矢量網(wǎng)絡(luò)分析儀產(chǎn)品組合,構(gòu)建新一代模塊化、軟件定義的測試平臺

    新品發(fā)布 2026年1月12日,鼎陽科技全新推出PXIe模塊化示波器、PXIe模塊化矢量網(wǎng)絡(luò)分析儀和USB矢量網(wǎng)絡(luò)分析儀三款新品,并同步推出三款PXIe嵌入式控制器與PXIe混合機(jī)箱?;?b class='flag-5'>模塊化架構(gòu)
    的頭像 發(fā)表于 01-14 10:35 ?6.6w次閱讀
    鼎陽科技推PXIe<b class='flag-5'>模塊化</b>示波器、PXIe<b class='flag-5'>模塊化</b>矢量網(wǎng)絡(luò)分析儀產(chǎn)品組合,構(gòu)建新一代<b class='flag-5'>模塊化</b>、軟件定義的測試平臺

    避繁就簡!商湯日日新大模型靈性巧解數(shù)學(xué)難題,獲贊“機(jī)器的審美”

    、字節(jié)跳動,讓數(shù)學(xué)與AI同臺碰撞,開展了一場真刀真槍的“圖靈測試”。 現(xiàn)場,面對數(shù)學(xué)家拋出的難題,商湯科技“日日新”大模型在解答復(fù)分析計算積分、微分幾何證明等問題中,展示了驚人的進(jìn)化力。 在計算一個復(fù)雜的廣義積分
    的頭像 發(fā)表于 01-12 11:41 ?288次閱讀
    避繁就簡!商湯日日新大<b class='flag-5'>模型</b>靈性巧解數(shù)學(xué)難題,獲贊“機(jī)器的審美”

    探索Amphenol RJE1Y系列模塊化電纜組件的卓越性能

    探索Amphenol RJE1Y系列模塊化電纜組件的卓越性能 作為電子工程師,在設(shè)計項目中,選擇合適的電纜組件至關(guān)重要。今天,我們來深入了解Amphenol的RJE1Y系列模塊化電纜組件,看看它能
    的頭像 發(fā)表于 12-11 14:25 ?380次閱讀

    Amphenol RJE88系列模塊化插孔:LAN應(yīng)用的理想之選

    Amphenol RJE88系列模塊化插孔:LAN應(yīng)用的理想之選 在電子產(chǎn)品設(shè)計中,選擇合適的連接器對于設(shè)備的性能和穩(wěn)定性至關(guān)重要。今天我要給大家介紹的是Amphenol的RJE88系列模塊化插孔
    的頭像 發(fā)表于 12-11 14:05 ?371次閱讀

    Amphenol RJE1D系列模塊化插孔:高性能網(wǎng)絡(luò)連接的理想選擇

    Amphenol RJE1D系列模塊化插孔:高性能網(wǎng)絡(luò)連接的理想選擇 在當(dāng)今高速發(fā)展的網(wǎng)絡(luò)通信領(lǐng)域,可靠且高性能的連接器對于確保數(shù)據(jù)的穩(wěn)定傳輸至關(guān)重要。Amphenol的RJE1D系列模塊化插孔
    的頭像 發(fā)表于 12-10 09:35 ?392次閱讀

    modbus消息幀的模塊化架構(gòu)介紹

    MODBUS消息幀的模塊化架構(gòu) 1. 地址字段:通信尋址的核心 Modbus RTU協(xié)議采用單字節(jié)(8位)地址字段,支持1-247個從站設(shè)備(0保留為廣播地址)。 廣播機(jī)制:地址0的報文會被所有從站
    發(fā)表于 11-17 08:15

    新品發(fā)布|LRM模塊化高速連接器

    認(rèn)證發(fā)明專利。該款連接器是一種模塊化、高性能高速率的系統(tǒng)連接器產(chǎn)品,多腔體模塊化設(shè)計可以支持多種信號類型,射頻、高頻高速、光信號及電源的混合傳輸,不同的腔體可以靈
    的頭像 發(fā)表于 10-20 17:02 ?2024次閱讀
    新品發(fā)布|LRM<b class='flag-5'>模塊化</b>高速連接器

    新品推薦|模塊化集成式高速連接器

    LRM連接器隨著電子技術(shù)的快速發(fā)展,在電力傳輸、工業(yè)自動、航空航天等領(lǐng)域,對高效、穩(wěn)定、可靠的電氣連接解決方案的需求日益增長。因此日晟萬晟開發(fā)了新一代模塊化集成式高速連接器-LRM系列,該款連接器
    的頭像 發(fā)表于 07-07 18:15 ?1422次閱讀
    新品推薦|<b class='flag-5'>模塊化</b>集成式高速連接器

    鴻蒙5開發(fā)寶藏案例分享---模塊化設(shè)計案例分享

    鴻蒙模塊化開發(fā)大揭秘!官方隱藏案例實戰(zhàn)指南 大家好呀! 最近在HarmonyOS文檔里挖到一個寶藏——官方其實藏了大量模塊化設(shè)計案例!很多小伙伴可能沒注意到,今天我就帶大家手把手拆解這些黃金實踐,附
    發(fā)表于 06-12 16:17

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

    原理圖模塊化,把常用的模塊保存成一個PART(在TOOL 菜單下 選擇 Generate Part)。保存成OLB格式。使用的時候,就像使用元器件一樣,從庫里面拖出來直接放到原理圖上即可。 問題是
    發(fā)表于 06-09 19:27

    什么是模塊化計算機(jī)?搞清楚用途和應(yīng)用場景,別再瞎選了!

    如果你是搞工業(yè)自動、醫(yī)療設(shè)備、交通控制,甚至是軍事裝備的,那你大概率已經(jīng)聽過“模塊化計算機(jī)”這個詞。要是你還沒了解,那這篇文章就是為你寫的。作為一個在工業(yè)計算領(lǐng)域摸爬滾打十多年的從業(yè)者,我可以很負(fù)責(zé)任地說:模塊化計算機(jī)不是未來
    的頭像 發(fā)表于 06-04 11:00 ?1053次閱讀
    什么是<b class='flag-5'>模塊化</b>計算機(jī)?搞清楚用途和應(yīng)用場景,別再瞎選了!

    MCU-40型自動測量是如何實現(xiàn)分布式模塊化?

    在巖土工程、大型基建和能源設(shè)施的安全監(jiān)測中,傳統(tǒng)的集中式數(shù)據(jù)采集系統(tǒng)往往面臨布線復(fù)雜、擴(kuò)展性差、容錯率低等挑戰(zhàn)。南京峟思工程儀器有限公司推出的MCU-40型自動測量系統(tǒng),憑借其創(chuàng)新的分布式模塊化
    的頭像 發(fā)表于 04-10 14:03 ?857次閱讀
    MCU-40型自動測量是如何實現(xiàn)分布式<b class='flag-5'>模塊化</b>?

    MCU分布式模塊化自動測量單元:數(shù)據(jù)傳輸與處理能力如何?

    在現(xiàn)代工程監(jiān)測中,MCU分布式模塊化自動測量單元(MCU)以其靈活的配置和強(qiáng)大的數(shù)據(jù)處理能力,成為了各類安全監(jiān)測項目的理想選擇。本文將深入探討MCU的工作原理、數(shù)據(jù)傳輸方式以及其在實際應(yīng)用中的優(yōu)勢
    的頭像 發(fā)表于 03-12 14:09 ?885次閱讀
    MCU分布式<b class='flag-5'>模塊化</b>自動測量單元:數(shù)據(jù)傳輸與處理能力如何?