盡管上次交的作業(想想都是好幾個星期前的事了)--學習數據建模,其實是沒有真正理解的,這幾周我反復看教程和項目中的代碼組織架構,似乎能明白一些了,再補充一些自己的理解。
我們要搭建的后臺項目文件是以MVC的模式來進行組織的。
M--表示模型,組織數據和程序的功能
V--表示視圖,用于處理和用戶的交互
C--表示控制器,負責將視圖請求轉化給對應的模型
具體在我們學習的項目--實現圖片交換功能里,比如通過evergrow 腳手架一鍵生成的model文件,通常都包含四個文件:
yo evergrow:model user
user-controller.js
user-manage.js
user-model.js
user-routes.js
yo evergrow:model Image
image-controller.js
image-manage.js
image-model.js
image-routes.js
從這四個文件我能理解就已經包含了 MVC 中的 M 和 C ,而這個 M 老師的教程中說不僅僅包含數據模型,還包括數據處理,即業務邏輯部分。那對應的就是?-model.js與~-manage.js這兩個文件模塊。那這個 C 對應的就是 ~-controller.js 和~-routes.js 這兩個文件模塊。
只是我也好奇,為啥 MVC中的 V 它還得單獨一鍵生成不一樣的四個文件,
yo evergrow:view Image
view/image/imageList.html
view/image/imageProfile.html
public/js/image/imageList.js
public/js/image/imageProfile.js
由于這個視圖部分涉及到顯示給用戶的界面如html , css , js 等這些前端的內容,表示還沒看懂,還得努力學!
理解了以上這些大致的架構,對于教程中一節一節的內容感覺就容易些了。
第一部分 業務邏輯
這一節,我主要記住,業務邏輯代碼的組織結構和規律。
具體解析image-manager.js這個模塊里的代碼。
在解析代碼之前,要特別強調一下老師教程中的這段話,值得反復讀:
其實,寫代碼和搭樂高積木差不多。代碼的一個變量,一個函數,可以看作是一個樂高的最小元件。每一個 JavaScript 文件,就像是樂高的一個小人,小車或小屋。最后我們實現的整個 Node.js 項目,就是整個宏大的樂高場景。
我們引用模塊其實和尋找合適的積木是一樣的。通過把自己寫的,別人已經拼好的,進行恰當的組合,就可以完成千變萬化的作品。
因為這段話,我明白了為啥要 require()那么多東西,也明白了干嘛要寫這么多~.js文件,它們到底要干嘛!好的類比真的好偉大!
正式進入代碼解析
- 上面代碼的前三句是模塊引用。有全局模塊 lodash (一套工具庫)和項目本身的 image-model 和 db-manager。項目本身的模塊以文件相對路徑來引用,全局模塊就只需要名字。
- module.exports={} 里封裝的就是 image-manager.js 這個文件模塊要申明的功能,這些功能包括最基礎的 CRUD數據操作,create (C - Create), load (R - Read), update (U - Update), remove (D - Delete) 和 list (批量 Read)。
- function(){} 部分就是 module.exports={} 里申明的方法的具體實現辦法,一個方法對應一個相同名稱的函數。
- 這意味著如果要修改或添加某個功能,上述代碼的三個部分可能都需改動,起碼得改動兩個部份。
- 教程中的兩個功能實操代碼,看是看明白了,只是老師布置的作業,寫個 reject 的方法并導出,沒理解這個reject 的業務要求是 什么,是要拒絕什么?是用戶新創建的圖片,沒審核通過的拒絕被返回?不對呀,沒明白,還得請教老師!