koa --- [MVC实现之三]换个角度重新开始-初始化
生活随笔
收集整理的這篇文章主要介紹了
koa --- [MVC实现之三]换个角度重新开始-初始化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
說明
- 下面文章是對該系列前面2篇及項目中經(jīng)驗的總結(jié),重新開始寫的
- 實現(xiàn)了Mar類,貫穿Router層、Controller層、Service層
- 基本骨架的搭建
初始
- 使用Koa創(chuàng)建一個簡單的服務(wù)器,一般會使用如下
原則
借助Egg的Controller,Service的引用,有了以下靈感:
設(shè)計Mar類
根據(jù)上述的原則,我們設(shè)計Mar類的初始如下:
const koa = require('koa');class Mar {constructor(conf) {const router = new Router();const controller = new Controller();const service = new Service();this.koa = new koa(conf); // 相當(dāng)于appthis.router = router.initRouter();this.controller = controller.initController();this.service = service.initService();// this.koa.use(router.routes());}listen(port) {this.koa.listen(port, async () => {console.log(`[mar]Server is running at http://localhost:${port}`);})} }class Router {constructor(conf) {}initRouter() {console.log('initRouter');} }class Controller {constructor(conf) {}initController() {console.log('initController');} } class Service {constructor(conf) {}initService() {console.log('initService');} }module.exports = Mar說明:
1.現(xiàn)在都寫在一個Mar里面,后期代碼肯定很多,會分開寫,然后將模塊引入.
2.init函數(shù)僅用于測試,后期會根據(jù)需求更改
3.此時Mar類的引用如下.
命令行運行: node index.js,結(jié)果如下
改進Mar類
- 上面測試代碼跑通
- 開始逐步完善原則
- Router層負(fù)責(zé)聯(lián)系,路由和路由處理事件
- Controller負(fù)責(zé)路由處理事件
- Service負(fù)責(zé)處理復(fù)雜的方法,然后提供給Controller層
- Mar貫通各個類,負(fù)責(zé)存儲通用方法,并將參數(shù)傳遞給各個層,相當(dāng)于一個粘合劑貫穿整個流程
[注: 在contructor中,使用this相當(dāng)于指向?qū)嵗齗
- 改進Mar類如下:
運行后輸出如下:
說明:
進一步改進Mar類
- 引用分層的目的,是為了使開發(fā)更有規(guī)范,便于以后自己和他人的閱讀.
- 最終目的是提高開發(fā)效率,分為近期的和長久的
- 一些通用的功能,就必須提取出來,放在Mar類里面
- 上面在在傳遞服務(wù)給相鄰層的時候,并未傳入通用方法,因此改變?nèi)缦?/li>
- 注意: 由于引用了分層,故在Router層盡量的不要使用Service方法.
總結(jié)
- 這一篇主要實現(xiàn)了一個基本骨架
- 下一篇將會實現(xiàn)Router層和Controller層、Controller層和Service層的具體業(yè)務(wù)實現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的koa --- [MVC实现之三]换个角度重新开始-初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 连接 监控_mysql监控优
- 下一篇: koa --- [MVC实现之四]Ro