可用于Mongoose和Angular的DRY模型

时间:2015-01-04 20:43:18

标签: javascript angularjs node.js mongoose restangular

我正在编写一个MEAN应用程序,使用Mongoose与MongoDB和Restangular进行通信以与Express通信。我的Mongoose模型定义目前存在于服务器目录中,因为它们适用于Mongoose。在Angular方面,我只是操纵原始JSON并让Restangular / Mongoose整理细节。

由于各种原因,其中大多数是不言而喻的,我想直接停止使用JSON并开始使用模型类。一个主要原因是我发现需要辅助函数,服务器和客户端都可以从中受益。

下意识的解决方案是创建服务器端的任何模型的前端类等价物。这导致严重的代码重复。

更聪明的(?)想法是将模型暴露给服务器和客户端。首先,我不确定安全隐患。其次,正如模型目前所说,它不是Angular友好的。我的模型设计看起来非常像this SO answer

我是否可以通过Angular和Mongoose制作一套可以使用的类?

编辑:为了澄清当前的设计并澄清我想去的地方,请考虑以下代码段。数据库数据 - 比如[{ u: "LON" }, { u: "PAR" }] - 绑定到d3选择,并通过从现有字典和属性u导出X / Y坐标来绘制圆。

var centroids = { "lon": [100, 200], "par": [43, 139], "stp": [12, 121] };
svg.selectAll('circle')
     .data(dbData)
     .enter()
     .append('circle')
     .attr('cx', function(d) { return centroids[d.u.toLowerCase()][0]; })
     .attr('cy', function(d) { return centroids[d.u.toLowerCase()][1]; })
     .attr('fill', 'red')
     .attr('r', 20);

有效。但是,如果我使用辅助方法充实了一个类呢?

var centroids = { "lon": [100, 200], "par": [43, 139], "stp": [12, 121] };
svg.selectAll('circle')
     .data(dbData)
     .enter()
     .append('circle')
     .attr('cx', function(d) { return d.getXCoordinate(centroids); })
     .attr('cy', function(d) { return d.getYCoordinate(centroids); })
     .attr('fill', d.ageIsDivisbleBy6() ? 'red' : 'purple')
     .attr('r', 20);

更具可读性。希望这能澄清我的目标:我可以编写Mongoose使用的模型的客户端版本,但如果可以的话,我宁愿拥有Mongoose,客户端也可以在同一组模型上运行。

0 个答案:

没有答案