当然这是一句夸张的标题,下面用真实案例说明一下虽然顶不了一万句,顶个一百句是没问题的。
需求:在ZooZeeper中获取一个配置,然后解压缩并生成一个对象列表。
这个需求很简单,怎么实现我不管,明天上线!
先看java是如何实现的(主要实现代码,主要涉及三个大类和若干小类)
这个不重要
对字符串进行按逗号分隔,并生成对象
从zookeeper中获取数据,调用解码
对起始字符判断并调用解压缩
解压缩
生成具体对象,并赋值属性
接下来是js的实现:(为了突出对比效果,省略了部分判断)
getProviders(serviceKey) {
const DEFAULT = '_default_'
return this.getData(SERVICES2, serviceKey.contract, serviceKey.implCode || "default", 'providers')
.then(x => util.promisify(zlib.inflate)(Buffer.from(x).slice(3)))
.then(x => x.toString().split(',')
.map(x => querystring.parse(x))
.map(({ s, h, p, ldc, c, g, v, ct }) => ({ schema: s, host: h, port: +p, ldc: ldc || DEFAULT, region: c || DEFAULT, group: g || DEFAULT, version: v, createTime: +ct })))
没有对比就没有伤害。
总结:
Java中的逻辑会分散到若干的不同的类中,某个类总管一些事情,这叫面向对象编程,思维是割裂的。js是多范式编程语言,可以灵活使用函数式、面向过程、面向对象等不同的方式结合使用,可以将一条逻辑尽量集中在一起或者一个句话中。函数所用到的变量不需要存放在具体的某个类的属性中,也就不需要管理那些类生成的引用,以及通过传递对象引用来间接访问你需要用到的数据。