в моем приложении Я создаю экземпляр объекта с широким набором приложений под названием controller
. Также я запускаю сервер. Поскольку я хочу сохранить избыточность низкой, по каждому запросу я хочу создать экземпляр интерфейса controller
, который является копией/ссылкой на controller
, но с дополнительным свойством pool
, который содержит запросы с широкими объектами/конфигурациями и может быть доступен изнутри controller
,Определить ссылку с дополнительными свойствами, специфичными для контекста
var applicationPool = new ObjectPool(); // container for objects
var controller = new Controller(); // application wide instance
var server = http.createServer();
applicationPool.set("myController", controller);
server.on("request",function(req,res){
var requestPool = new ObjectPool();
requestPool.set("request",req);
requestPool.set("response",res);
/*
* pool population
* routing
* controller resolving
* parameter resolving
*/
// frontend specific to current request
var frontend = applicationPool.get("myController").create(requestPool);
// hopefully finishes res
frontend.greetAction(parameters);
/*
* post response actions
*/
}
server.listen(3000);
И Controller
класс:
function Controller(){
BaseController.call(this);
// ...
}
function greetAction(parameters){
var res = this.getObjectPool().get("response"); // defined in BaseController
res.end(format("Greetings, %s!",parameters["name"]));
}
Controller.prototype = Object.create(BaseController.prototype);
Controller.prototype.greetAction = greetAction;
Дополнительные мои мысли о BaseController
классе:
function BaseController(){ ... }
function getObjectPool(){
return this.pool;
}
function create(pool){
var frontend = Object.create(this.__proto__, this);
frontend.pool = pool;
return frontend;
}
BaseController.prototype.getObjectPool = getObjectPool;
BaseController.prototype.create = create;
Это был я застрявшие. Для чего я тестировал. Если я добавлю pool
в frontend
, он также будет применен и к объекту controller
. Я думаю о создании нового объекта и добавлении всех свойств controller
. Я также просматриваю прокси, имея controller
в качестве цели и get
ловушку для getObjectPool
.
Я знаю, что изменение res
- это плохая практика. Я, скорее всего, вернусь string
/buffer
. Но описанная проблема остается. Поскольку я планирую внедрить другие контроллеры.
Я исхожу из PHP + Symfony, где у вас есть класс Controller
с методом getContainer
и ярлыки для основных объектов, что делает то же самое.
Любые мысли приветствуются. Тем временем я пытаюсь решить это.
Cheers!