在过去几个月中,我们一直在寻找以下问题的解决方案:前端开发人员无需后端开发人员的帮助即可轻松修改网站外观。
我们的团队文化主要基于全栈框架,如Symfony 2和Ruby on Rails。我们使用模板引擎,但模板大多是由后端开发人员根据设计师编写的。标记。
我们正在考虑采取的步骤是将整体架构分离为后端休息API和NodeJS服务器作为" UI服务器"。 NodeJS服务器将处理客户端请求,使用后端API并返回呈现的模板。通过明确指定API和服务的JSON,前端和后端开发人员可以并行工作,减少问题。更多信息:http://www.nczonline.net/blog/2013/10/07/node-js-and-the-new-web-front-end/
问题是,我们坚信这种分离对于建筑POV是一件好事,但我们担心这些缺点。我们怀疑它会让事情变得更难。我们团队中没有一个人从未使用过这种架构,所以任何提示或经验都非常有价值。
值得吗?什么时候?为什么呢?
答案 0 :(得分:4)
您需要做的是使用清晰的线条将前端与后端分开。然后,无论后端团队的前端需求如何,都会全面记录下来。
让我们说你现在拥有的是这样的:
app.get('/', function (req, res) {
database.query('select * from user', function (err, result) {
res.render(result);
});
});
然后你想这样做:
UI服务器中的:
app.get('/', function (req, res) {
request('apiServer/user', function (err, result) {
res.render(result);
});
});
API服务器中的:
app.get('/user', function (req, res) {
database.query('select * from user', function (err, result) {
res.send(result);
});
});
这很好。这将分离前端和后端,但不仅在逻辑上而且在物理上都位于不同的服务器中。
我相信如果他们在同一台服务器下就可以了。而不是上面,只需将它们放在不同的文件中:
在user.js中:
exports.getAll = function (cb) {
database.query('select * from user', cb);
};
在server.js中:
var user = require('./user');
app.get('/', function (req, res) {
user.getAll(function (err, result) {
res.render(result);
});
});
为什么这比你的解决方案更好?因为它分离触摸数据库和渲染数据,并且它没有额外的http往返。
遵循MVC模式,将类似user.js
的文件放在模型目录中,将server.js
之类的文件放在控制器目录中。您确保为前端开发人员记录两者。
现在,如果您的前端开发人员只是要进行UI更改,他们只会触摸HTML文件。如果他们想要添加一个包含数据的部分,他们将阅读后端文档,他们将添加对模型的另一个调用,以获取它们在呈现HTML的相应控制器中的数据。
确保你将标准化所有东西,所以当新的东西出现时,团队中的程序员可以某种方式预测界面的方式,使用一个好的ORM来完成数据库调用。如果您不选择使用ORM,那么请进行良好的抽象。
因此,您在层中的应用程序可以是这样的:
Database --> ORM --> Models --> Controllers --> Views(HTML files)
现在是前端开发人员,右上图就是上图。如果它被很好地抽象出来,他们只需要知道左侧记录的API,但他们不需要知道它是如何工作的。任何在控制器上工作的人,只需要知道他们左侧的文档API,即Models。您可以将其一直继续到左侧的数据库。
然后在每一层上,您可以将单元测试和集成测试一直到前面,以确保接口一致。
如果您的团队规模很大,拥有庞大的代码库,请确保始终在接口中保持向后兼容性,但在日志中添加了已弃用的警告。永远不要试图破坏任何东西。