[回到版面]
回應模式
名 稱
內 文
附加圖檔[] []
  • 可附加圖檔類型:GIF, JPG, JPEG, PNG, WEBM,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 3072 KB。
  • 當檔案超過寬 125 像素、高 125 像素時會自動縮小尺寸顯示
  • 目前附加圖檔使用量大小: 190996 KB / 500000 KB
  • 回覆時程式碼縮排會被trim消掉,請善用[code][/code]標色或貼到ideone等網站
  • LaTeX記法可以用「$$」或「\( \)」包起來,例如「$\sum_{k=1}^{k=n} k^2 = \frac{n(n+1)(n+2)}{6}$」
  • 投稿時請點擊畫像認證後,再按下 [送出] 按鈕提交。
  • 鬧板、攻擊性發言、煽動性發言請無視(回應者也無視),並使用del或在貓管理部向管理員回報。
  • 新介面尚處於測試階段,如果有任何問題可以向管理員或於程設交流版反映。

檔名:1552887517623.gif-(88 KB, 220x202)
88 KB
無題菜比八19/03/18(一)13:38:37 ID:G6T1KkN2No.13089del
各位前輩好,想請教個比較概念的問題。

我目前專案中有個目錄名為 module ,根據老大的解釋裡面是放可隨意拆裝的功能塊,其中有 Logger 、 MQ 、 Metrics 等。

以我的理解,可以隨意拆裝應該是指即使移除或是替換成別的都應該不影響 App 執行才對,但在程式碼中常常會有:

func doSomething() {
// ...
if err != nil {
logger.Info(err)
}
}


這樣到處都有使用 Logger 提供的 func 程式碼存在,怎麼可能拆除也不影響呢?

不好意思敘述有點長,我想問的是在程式設計中," 模組( Module ) " 到底是什麼?看實際用起來跟依賴套件似乎沒有實際的差別,還是說這其實是一樣的東西不同的名詞呢?

還望島民指教提點,非常感謝!
無名19/03/18(一)13:45:46 ID:2A96EG2wNo.13090del
>>13089
老大是誰?獅子老大嗎?
無名19/03/18(一)18:54:13 ID:FlOtUCq.No.13091del
>>怎麼可能拆除也不影響呢?
換個空殼版的Logger接上去不就等於拆了嗎?

>>根據老大的解釋
那就去問你的老大啊==
無名19/03/18(一)20:36:09 ID:HTK/Gy/6No.13092del
檔名:1552912569600.png-(107 KB, 800x509)
107 KB
>>13089
這就是俗稱的"耦合性"

就我來看,主因是你們log放的地方怪怪的,
比起耦合性這個我更擔心你們有沒有遵守單一原則。

另外err是error,exception嗎?
為何不要直接拋出去讓架構去捕捉?是沒有做嗎?
還是有特殊目的?
如果有一百個method,你們要處理err一百次嗎?

至於module....不要太執著,只要程式"分類"的夠好
,自然就會開始出現Mudule/Modele的味道。
如果捨本逐末,反而會出現為module而module的噁心Code

總之,看你們老大是誰吧,不是獅子老大的話沒興趣。
無名19/03/18(一)20:50:28 ID:7q8drWscNo.13093del
把所有logger移出去開PR啊
工程師是靠程式講話的
菜比八19/03/18(一)20:55:25 ID:k3hYovboNo.13094del
>>No.13090
其實我還是第一次知道有獅子老大⋯⋯
是我們專案的領導人,老大是因為我平常叫習慣的關係,抱歉抱歉

>>No.13091
這樣依賴套件如果有做 Warpper 的話都可以替換,也就是第三方的函式庫稱為套件,我們自己包裝、撰寫的稱為模組這樣嗎?

有找他問過,只是真的聽不懂,只理解到可以拆裝的功能就是模組

>>No.13092
抱歉沒有附上使用的語言,我們使用的是 Go 所以那種處理有時會出現。

那可以問問一般專案會有 module 這個目錄嗎?

抱歉不是獅子老大⋯⋯ 。・゚・(つд`゚)・゚・
無名19/03/18(一)21:23:44 ID:HTK/Gy/6No.13095del
檔名:1552915424152.png-(32 KB, 800x600)
32 KB
>>13094
>一般專案會有 module 這個目錄嗎
可能有,不過這不是你應該在意的地方。

>只是真的聽不懂,只理解到可以拆裝的功能就是模組
別擔心,這種問題你問10個工程師會有11種答案。
你只要在意這個架構/分類你覺得好不好用(維護/開發)就可以了。
無名19/03/18(一)22:03:57 ID:/6wTNJTgNo.13096del
什麼叫做整篇移除也不會造成任何影響、也不在其他地方被呼叫的程式碼?
我想八成是永遠不會被執行到的程式碼吧

模組化的概念指的是
你可以替換少數幾個檔案就把該功能的行為整個換掉
而不需要去每個呼叫他的地方修東修西
像你的logger.Info(err)本身沒有暗示這err是要被記錄在檔案裡、顯示在螢幕、還是傳給伺服器
一切只看logger裡面怎麼實作
哪天你們想要改變logger的執行方式時只要改logger就好,不需要改到logger.Info(err)這行
這個就是模組化
如果你寫成logger.print(err.toString())
那你以後想要改用字串以外的方式做log就會吃很多苦頭,就是不模組化

模組化通常只支援替換,而不支援「拆除」
畢竟那毫無意義,真的想拆大不了寫一個空的模組裝上去就好
沒必要硬是設定成可以拆而不裝

>>也就是第三方的函式庫稱為套件,我們自己包裝、撰寫的稱為模組這樣嗎?
這也是一種模組化
如果你在你們的程式碼裡到處寫像是 MicrosoftWindows.writeFile("...") 這樣的東西
也許哪天就會全公司加班把他們通通改成 Ubuntu.file_print("...") ,還要擔心會不會睡眠不足改出BUG
不如一開始就多包一層,哪天要換平台時只要改包的那層裡面就好

>>那可以問問一般專案會有 module 這個目錄嗎?
我個人不會取這種名字
取這名字不就代表你們其他的程式碼都不模組化嗎
無名19/03/18(一)22:24:20 ID:HTK/Gy/6No.13097del
檔名:1552919060721.png-(244 KB, 1000x1000)
244 KB
>>13096
>替換少數幾個檔案就把該功能的行為整個換掉
這個叫做邏輯抽離

>logger裡面怎麼實作
沒錯,這就是界面區隔與實作

>就是模組化
感謝你貢獻第一種答案

>不如一開始就多包一層,哪天要換平台時只要改包的那層裡面就好
寫成static呼叫或是factory註冊更方便喔

>不就代表你們其他的程式碼都不模組化嗎
很遺憾,有些架構規範就是要給你結尾module,有時這不是開發者能決定的事情
菜比八19/03/19(二)11:11:36 ID:QQGgvslMNo.13098del
>>No.13095
因為屬於那種有在意的問題不解決就很難受的類型,不過我大概懂 module 目錄跟我想的不同,不是說在裡面的才稱為 module


>>No.13096
似乎有一點明白了,這樣來看有部分套件也屬於模組。

只要規定好溝通的介面與隱藏實作(或稱抽離?),應該都屬於模組。
感謝熱心島民的指教,我想模組應該是種強力封裝,並提供了對外介面的功能組。
因為程式碼內用的是模組介面,所以不用擔心實作的替換。

模組描述看來就是程式的基本設計原則啊⋯⋯想不到竟然為了這個困擾這麼久
無名19/03/19(二)20:32:14 ID:sqLok2V2No.13099del
檔名:1552998734727.png-(54 KB, 600x600)
54 KB
>>13098
恭喜你找出並提供了第二種答案


【刪除文章】[]
刪除用密碼: