抛砖引玉说一下: 我认为面向对象完全是因为 GUI 或者有状态 /强逻辑的代码需要
从 gui 上讲, 我们把人物抽象成一个对象,内部保存状态, 然后每一个方法都会改内部状态,这个非常合理,非常自然.因为每一个方法都强依赖人物的状态.
同理设计中间件, 数据库的时候也是需要的.
问题是在写业务的时候, 本来就非常简单的东西, 从 A,B,C 拿出来东西处理一遍发给 D,然后整理一下返回. 就这么一个东西, 强行面向对象的结果就是, 把本来非常简单的的中间状态放在了对象里, 这样后面维护的人面对的是一个混沌的系统. 结果就是你想要了解一个业务就要全部通读一遍. 改代码小心翼翼.加代码也是, 你要在混沌的系统里,摸清楚你处理的时候系统是什么状态.
如果是用纯函数式变成, input->output 没有中间变量, 那我随意一个函数我知道我只会影响 output 的输出. 加代码也清楚.
不过面向函数写起来参数很容易满天飞,也不是很完美.
不知道大家怎么看.
ps: 我举个例子 比方说我们有一个请求里面有 lat, long. 但是是字符串, 第一步肯定要解析成 float64
面向函数 lat, long := parseLatLong(...) // 这行之下你就知道 lat,long 一定可用,(贾如后面有修改一定是在同级函数里)
面向对象 handler.parseLatLong() ... ... 你来维护老代码, 你想看见 lat,long 在对象里, 你想用但是你要找什么地方初始化的, 后来有没有被修改(肯定不在同级函数, 而在另外一个方法里,甚至可能有三四层调用).
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.