关注用NodeJS UI服务器分离前端和后端

在过去的几个月中,我们在工作中一直在寻找解决以下问题的方法:前端开发人员无法在没有后端开发人员的帮助下轻松修改网站的外观。

我们作为一个团队的文化主要基于Symfony 2和Ruby on Rails等全栈框架。 我们使用模板引擎,但模板主要是由后端开发人员根据devise师的标记写的。

我们正在考虑的步骤是将这个单一的体系结构作为“UI服务器”分离成一个后端rest API和一个NodeJS服务器。 NodeJS服务器将处理客户端请求,使用后端API并返回呈现的模板。 通过明确指定所提供的API和JSON,前端和后端开发人员可以在较less的问题的情况下并行工作。 更多信息: http : //www.nczonline.net/blog/2013/10/07/node-js-and-the-new-web-front-end/

事情是,我们坚信这种分离是build筑POV的一件好事,但是我们担心这些缺点。 我们怀疑这会让事情变得更加困难。 团队中没有一个人从来没有从事过这种架构,所以任何暗示或经验都是非常有价值的。

这值得么? 什么时候? 为什么?

你需要做的是清晰地划分你的前端和后端。 那么无论后端团队的前端需求如何,都将被全面logging下来。

假设你现在有这样的东西:

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); }); }); 

为什么这比你的解决scheme更好? 因为它分离触摸数据库,并且呈现数据,并且它没有额外的http往返行程。

在MVC模式之后,将类似于user.js文件放在模型目录中,将类似server.js文件放在控制器目录中。 你要确保为前端开发人员logging两者。

现在,如果您的前端开发人员只是要改变UI,他们只会触摸HTML文件。 如果他们想要添加一个包含数据的部分,他们将读取后端文档,他们将添加另一个调用模型,以获取他们在各自的控制器呈现HTML的数据。

只要确保你将标准化所有东西,所以当新事物出现时,你的团队中的程序员可以以某种方式预测接口将会如何,使用一个好的ORM来完成数据库调用。 如果使用ORM不是你的select,那么要做出好的抽象。

所以你的应用程序可以像这样:

Database --> ORM --> Models --> Controllers --> Views(HTML files)

现在,前端开发人员,在右上方的工作图上。 他们只需要知道左侧的API文档,如果它被很好地抽象出来的话,但是他们不需要知道它是如何工作的。 任何在控制器上工作的人,只需要知道他们的左侧是Models的logging的API。 您可以继续到左侧的数据库。

然后,在每一层上,您都可以进行unit testing和集成testing,以确保接口一致。

如果团队规模很大,代码量很大,请确保始终保持界面的向后兼容性,但是在日志中存在警告的地方不要使用已弃用的东西。 永远不要试图破坏任何东西

Interesting Posts