그걸 모르니깐 이걸 쓰고 있다. 이 부분을 고민해보자
constructor()
에 Model Option을 주입해야하는데 과연 올바른 것인가? 모델을 여러개 사용해야할 경우에는? 하나의 Object로 묶어야하나?// 대충 짜보는 코드 1
// route.js
import mysqlModels from 'model/MySQL';
import mongodbModels from 'model/MongoDB';
import { Menu } from 'controllers';
app.get('/menu/:idx', (req, res) => new Menu(mysqlModels).getMenuByIdx(req, res));
app.get('/menu', (req, res) => new Menu(mysqlModels).getMenuAll(req, res));
// 대충 짜보는 코드 2
// controllers/Menu.js
export default class Menu extends Controller {
constructor(model) {
this.model = model;
};
getMenuAll(req, res) {
this.model.menu.getMenuAll((err, result) => {
if(err) throw new Error(err);
else res.json(result);
})
};
getMenuByIdx(req, res) {
this.model.menu.getMenuByIdx({req.prams.idx}, (err, result) => {
if(err) throw new Error(err);
else res.json(result);
})
};
}
getMenuByIdx
를 호출하고 또다시 DI된 객체에서 getMenuByIdx
를 호출해야하는 것인가?// 대충 짜보는 코드 3
// route.js
import mysqlAndQuerys from 'config/mysql';
import mongodbAndQuerys from 'config/mongodb';
import { Menu } from 'models';
app.get('/menu/:idx', (req, res) => {
new Menu(mysqlAndQuerys).getMenuByIdx(req.params.idx, (err, result) => {
if(err) res.send(String(err), 500);
else res.json(result);
})
})
// 대충 짜보는 코드 4
// models/Menu.js
export default class Menu extends Model {
constructor(executor) {
this.executer = executor;
}
getMenuByIdx(idx, callback) {
this.executer.getMenuByIdx(idx, (err, res) => {
callback(err, res);
})
}
}
조금 더 고민해보자.