zoukankan      html  css  js  c++  java
  • 闲谈: 就那么回事

    最近简单浏览了一下函数式编程, 另外好好的寻摸了一下国外那些OO反对者的声音(并非来自FP阵营), 结合我自己的实践, 对OO已经不像过去那么感冒了. 说句大言不惭的话, 在网上的OO支持当中, 不说大规模实践, 理论上我应该算把握的比较精确的. 我过去常常说一句话, 你懂什么, 不是看你掌握多少这玩意儿多好, 而是看你知道它多不好; 不是你知道它哪儿能用, 而是知道它哪儿不能用.

    当然, 函数式编程也是一样, 现在兴SICP, 我又回头翻了翻这书, 说实在的, 也就一教科书的水平. MIT名头是响, 不过在实用领域也就那么回事, 就像MIT下的script.aculo.us一样. 我不敢说通过短短的复习, 我就了解了函数式编程, 因为我现在只知道函数式编程好, 连应用都谈不上, 更不论它哪儿不好了. 说上面这句话, 就是提醒自己, 别跟完一拨风, 又去跟另外一拨风了. 可以肯定的是, 我们用C#也可以沾些一些函数式编程的好处, 尤其是C# 2.0以后. 最后关键还是习惯的问题, OO的方式太深入人心了, 虽然实际上大多数OO支持者的程序, 仅仅是Object的使用和简单的面向接口的水平. 很早就认识到面向接口只是将面临的问题外推的一个手段, 运用得当能够很舒服, 但关键还是你到底怎么抽象你的业务的, 在你脑海里, 而不是在OO方法论中的抽象; 脑子里对业务的概念以及如何在计算机世界合理的对应把握的不准确, 怎么OO都是变扭的, 不OO也不见得就不别扭, 只是OO又把这种别扭放大了. OO别扭绝不是来自于边界之外, 不让一些OO支持者写关系数据相关的程序, 这些OO的支持者也不见得就写的那么顺风顺水; 与数据库打交道, 已经是较为简单的活计了.

    其实TOP之类的玩意也经常是解决问题的一个有效的方式, 问题在于, 对于很多问题, 比如类型检查这些, 比如在编写程序时避免手误, 有点无能为力. 还是那句话, OO是通过限制来做到帮助我们的, 就如同强类型一样, 如果我们不会犯错, 如果我们不用打字这么低效率, 想的东西就直接变成代码, 无论签名, 强类型, 还是OO, 说实在的我看都没有必要, 多态的核心理念也不是什么非OO不可才能实现的东西. 人家Anders自己都说了, 说到底, 对象不也就是个语法糖豆么? 但是既然是帮助我们的, 那就不应该是拒绝, 而是看它怎么用, 用到什么地方能够帮助我们, 这点我是不赞同OO的反对者们(如一些高唱TOP的家伙)的一棍子打死的态度的.

    不过OO确实牛皮吹的太大, 一些所谓的好处, 根本不是因为它的出现才解决的; 另外一些则根本是放屁, 比如说OO接近人的思维, 在我最崇拜OO的时候, 我也不这么认为. 看看园子里的讨论这个泡泡就破了, 这么接近人的思维的东西, 居然让大家争来争去, 好大一部分人, 无论听的说的, 都不明所以? 这样的屁还有很多. 就OO的掌握上的难度, 就说明作为一个工具, 它很大一部分是不合格的. 不过既然存在的就是有道理的, 尤其是当今流行的不是FP或者其它什么而是OO, 这就说明至少在90~2010年这个阶段, 大家需要OO的一些东西, 只是这些东西, 恐怕GoF这些超一流选手都说不清其本质. 对我来说, 需要小心的是, OO的流行是因为历史遗留问题, 比如C实现多态之类太恶心. 然后就涉及到C为什么流行了, 因为这是类C的OO语言流行的基础. 我想, C在80年代和以前, 对效率的兼顾是其它语言不具备的. 当然现在LISP的各种方言, 效率也不是太主要的问题了, 所以FP之类的东西重新冒头, 然后在其他领域也得到了一个被重新审视的机会. 当然这都是我一家之言, 到底怎么回事也无需深究, 只是觉得确实得把眼光开阔出去. 当然具体到某种编程而言, 如FP, 我个人的看法是, 尤其是纯种的FP, 恐怕很难流行起来. 至于TOP啊之类, 在我看来根本说不到开宗立派的高度, 具体问题具体解决办法罢了.

    我对ORM的各种框架一直没好感, 除了灵活性, 性能之类的陈词滥调, 就是因为很多主流ORM框架和对这些框架的应用, 毫不客气的说在大多数情况下根本是假OO: OO的思想在关系数据到对象的这一活动中根本没什么体现, 说白了就是个赋值过程读值的技巧一类, 如果类是生成的, 也就一数据重新打包的过程, 这是其一; 其二是, 凡是简单到配置几下子, 描述一下子的对应关系, 目标对象往往就是个方便使用的数据包; 哪怕目标对象上有点所谓的业务逻辑就是OO吗? 问题是领域建模这些概念本身也根本不是OO所要解决的问题, 只是一种数据与操作集成的方式. 如果考虑到无论承载状态的字段名/属性名还是方法名或者接口所代表的契约往往不是本质上需要的, 这些框架所做的工作, 就成了一个迭代就能代替的脱了裤子放屁的事; 而往往真正需要Mapper的情况和场合, 还是得自己写, 这就是所谓的鸡肋, 哪怕明天Hibernate的作者站在我面前, 也改变不了我这一认识; 当然鸡肋也有鸡肋适合的范围和用武之地. 但是说到某社区讨论ORM也成了高级, 无论是实现还是应用, 有点不那么对味. 说到我能接受的, LinQ看起来好很多, 这也不是因为它是一个合格的ORM, 而是因为它不只是一个ORM. 这个, 没有多少实践就能感受的到.

    多的不说了, 反正啊, 就那么回事.
  • 相关阅读:
    Python面试题之装饰器漫谈
    Python入门之面向对象的__init__和__new__方法
    Python入门之PyCharm中目录directory与包package的区别
    Python中模块(Module)和包(Package)的区别
    详细讲解提高数据库查询效率的实用方法、外键关于性能
    kaptcha验证码插件的使用
    在 Web 项目中应用 Apache Shiro
    SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明
    jquery 绑定省份和城市
    jQuery事件之鼠标事件
  • 原文地址:https://www.cnblogs.com/guaiguai/p/948657.html
Copyright © 2011-2022 走看看