设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

当IoC遇见了Node.js

2014-6-6 12:00| 发布者: joejoe0332| 查看: 4121| 评论: 0|原作者: 倪震洋|来自: Infoq

摘要: 一个简单的例子:在例子中,汽车(car)需要依赖轮子(wheel)和发动机(engine)才能跑起来。为了处理好这一关系,必须首先人为的通过require把engine和wheel引入进来,然后通过new操作实例化,这样car才能真正的ru ...


  一致性配置


  在Node.js开发中,系统需要配置的参数本质上其实就是设置函数的参数或者对象的属性。


  比如要创建一个Redis连接,就是传入一个Redis的host,port参数:


var serverConfig = require('../../config/server');var redis = require("redis");var client = redis.createClient(serverConfig['redisPort'], serverConfig['redisHost']);client.on("error", function(err) {  console.error("redis error " + err);});client.on("ready", function() {  console.log("redis is ready");});module.exports = client;


  上面的做法简单粗暴,但是配置往往是与环境相关的。开发环境、测试环境、线上环境的redis port、host都不一样,因此这样的做法就无法解决环境切换的问题,要么就只能根据不同环境来对config/server文件进行替换,做法相当的粗暴,很容易出现问题。


  通过IoC,配置问题就将的变得非常简单,环境切换也变得自然无缝。比如说car里面一个num属性需要进行配置:


var Car = function() {  this.num = null;}Car.prototype.run = function() {  console.log('run car' + this.num);  return 'car' + this.num;}module.exports = Car;


  在context.json中,可以配置 num 为一个 ${car.num} 的占位符:


{  "name": "simple",  "beans": [{    "id": "car",    "func": "car",    "props": [{      "name": "num",      "value": "${car.num}"    }]  }]}


  ${car.num} 占位符最终会被特定环境下的值所替代。在config文件夹下面,对不同环境分不同的子目录,开发环境对应于dev,生产环境对应于prod,里面有car.num具体的配置:


├─┬ placeholderSample/│ ├─┬ config/│ │ └─┬ dev/│ │ │ └── car.json│ │ └─┬ prod/│ │   └── car.json│ └── car.js└── context.json
{    "car.num": 100}


  通过启动参数指定env的值来部署到不同的环境中。部署到生产环境中的示例如下:


node app.js env=prod


  总结


  本文中深入介绍了IoC在Node.js中的应用以及所给Node.js开发带来的便捷与好处。IoC可以去除代码之间的直接依赖关系,降低了耦合性。通过灵活可配置可重用的元数据配置,开发者在进行开发的时候面对的就不仅仅是一个个对象个体,而是弹性可配置的整体。IoC同时使得根据环境进行配置变得简单与无缝。


参考资料

  • bearcat 一个基于POJOs的应用层框架,提供了IoC、AOP、一致性配置等特性
  • bearcat-IoC容器详解 bearcat IoC容器各种特性详细介绍

转自 http://www.infoq.com/cn/articles/ioc-meet-nodejs?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部