iT邦幫忙

2

Module與model還有library

php

學PHP,常看到有這三個Module與model還有library詞,有上網查過還有問過一些朋友,可是還是不清楚這三個分別是用在哪,想請問,假如一個網站這三個資料夾下都有PHP檔案,他們的針對的內容範圍,他們差在哪裡呢?

1 個回答

8
weiclin
iT邦高手 4 級 ‧ 2016-05-06 14:26:01
最佳解答

其實每個軟體都可能會用不同的方式去區隔這些,所以這邊也只能跟你講個大概。

Module 翻譯成中文就是模組,通常是自成一體的功能,可以單獨開啟或關閉。以 it 邦來說,聊天室就可以成為一個模組。登入或是導航也都可以自成一個模組,單看你怎樣去設計。

Model 是模型,最常見到用在 MVC 模式。模型就是你程式的主要邏輯與功能,例如說你寫一個交友網站,那你肯定需要做交友配對,你的配對邏輯就應該要建成一個模型。可能你會疑惑那這個模型跟模組有什麼不同?為什麼不做成配對模組而是要做成模型?答案是配對也可以是模組,但模組內應該要有一個配對模型。就如上面提到的,你的主要邏輯就是你的模型。所以登入模組會有一個登入模型與資料保存模型,可能還有個註冊模型。登入模型用來定義哪些字元是合法的,登入失敗幾次要送警告等等的。資料庫模型用來定義資料表名稱,以及查詢帳號與密碼是否存在。現在的開發者會把模型跟資料庫混在一起,但以 Domain Driven Design 的角度來看,領域模型其實應該是純邏輯,而資料的保存又是另一個功能。

Library 是函式庫,同樣以交友網站為例,你可能需要發送 email 通知。那你可以選擇自己寫一個 email 發送功能,也可以用現有的函式庫來完成。若你有使用 composer 的話,vendor 這個資料夾其實也可以把它想成 library。

其實真的完全遵照上述方法去做的人我看是很有限,所以建議你不要單看資料夾名稱去判斷,而是根據裡面放了啥檔案,以及程式是怎樣使用這些檔案來判斷。

看更多先前的回應...收起先前的回應...

謝謝你的回答!剛註冊沒辦法馬上回覆,看完你的回答,我的理解是,一個交友網站內有兩個功能,分別是聊天室功能與論壇功能,這兩樣功能為Module 。

這兩個功能,會 include相同的檔案,就是Model。

而 Library,則是小型 的Module ,把需要的Model也包在裡面了。

不曉得我的理解是不是正確呢?

weiclin iT邦高手 4 級 ‧ 2016-05-10 13:24:51 檢舉

聊天室有聊天室的 model, 論壇有論壇的 model
他們兩個會 include 的共同的東西, 應該又是另一個 model(例如登入 model)或 library

library 一般來說是外部程式, 可能是 open source, 也可能是公司內寫的共用函式庫, 是一些已經寫好的現成的程式, 一般是許多專案都通用的功能。但那沒辦法稱為 module, 頂多只能說你的某些 module 會用到 library 提供的功能。當然 library 會有自己要解決的問題的 model, 但你一般只會透過 library 提供的 api 去使用他的功能, 根本不會看到他內部的 model 長怎樣。

而 module 則是與你的專案有直接的關係, 是專門為這專案寫的模組。例如 email 通知模組可能會用到 email library, 但 email library 不會知道你要用哪一家的信箱, 不知道你的信箱 smtp 跟帳號密碼。這些東西是你的 module 負責的, 你可能寫死在 module 裡面, 或是也可能你會讓 module 去讀取 config "model" 裡的 email 設定。另外還有 email 的內容格式等等的客製化內容, 都不是 library 會提供給你的東西, 那都是你的 module 負責的事情。

謝謝你的解說,大概有一定的瞭解,這三個似乎不太好畫清界線,問多一點的朋友每個人認知的又有些差異,只能照你說的要根據裡面放了啥檔案,以及程式是怎樣使用這些檔案來判斷。

weiclin iT邦高手 4 級 ‧ 2016-05-10 20:30:20 檢舉
weiclin iT邦高手 4 級 ‧ 2016-05-11 09:11:07 檢舉

沒錯
這關係到每個人是怎樣設計他的系統的, 所以會有各式各樣的作法
與其一定要界定出怎樣放才是對的, 不如去研究設計成這樣是要解決什麼問題。

我要發表回答

立即登入回答