一种计算机编程架构,面向对象编程( 三 )


这也就相当于放弃了一部分的安全性 。性能 - 如果强调性能的话 , 是要尽量减少隔离的层次的 。无论抽象如何做 , 只要隔离发生 , 就要经历一次转换以及相应的性能损耗 。比如早期的Hibernate不支持“bulk insert”和“bulk update” , 只能逼着程序员做for loop IO;而native的sql却可以轻易办到 。
在每多一次IO都很伤的场景下 , 这种隔离只能把事情做的更糟 。数据为中心 - 很多业务场景都是以数据为中心 。也就是说DB里的那坨数据是唯一的truth 。在代码层面做的只是为处理数据更加方便 。这时做的很多抽象意义不大 。比如你可以在ORM层强制声明读取出来的一个数据少了某个字段是invalid的 。但是你没法阻止你的第三方数据提供商源给你invalid的数据 。
对Invalid数据的处理远不是一个Annotation就能搞定的 , 必须引入复杂的业务流程 。灵活性和成本 - 每次做某种抽象都意味着对一个系统“要做某种变化的能力做出优化” , 但是同时 , 也就意味着或多或少对其他种变化适应性做“劣化“ 。如果系统变化的方向和预期的不一致 , 那么浪费掉的工作不说 , 为了再次调整设计方向的代价也会相当的大 。
这种情况比比皆是 。总结下 , 我希望所有的程序员都要理解自己的工作的最终目的是干什么的 , 并且活用自己所能用到的一切工具来达成自己的目标 。不要在各种编程范式里迷了路 。如果是初学编程的人 , 我衷心的希望你的编程课程讲授的是解决一些实际的问题 , 多了解业务 , 多尝试对业务的变动作出合理和准确的预 。不要过早的接触高层的思想和哲学层面的问题——一个小孩看《红楼梦》又能真的看懂多少呢 。
前端是否适合使用面向对象的方式编程?
这里是丁哥开讲 , 作为一名从事20多年软件开发的资深程序员 , 我来说一下我的体会 。前端开发当然可以使用面向对象编程概念 。在这个基础上我在着重强调一下 , 面向对象编程 , 不仅对前端非常有用 , 对后端当然也是非常有用的 。我们这个问题就专门针对前端来谈一谈 。前端我们关注的是界面的设计 。那么一个界面之中会分为几个区域 , 每个区域里面又分为几个子区域 。
这些大大小小的区域我们都可以定义为一个对象 , 俗称组件 。这些组件可能会有一些共性 , 比如说都会有初始化函数和释放函数 。那么我们就可以把这些共性的方法放到一个基本组件里面 , 俗称基类 。基本组件可以定义为抽象的组件也可以定义为实际使用的组件 。基本的方法也可以手工调用也可以靠整个架构来进行自动的调用 。如果你用过angular , vue, react这些架构的话 , 我相信你知道我在说什么 。
除了组件的设计和定义以外 , 在前端也需要定义一些非界面性的类 , 或者其他的逻辑单元 , 这些非界面的类和逻辑单元 , 用来存储前端的数据和逻辑计算 。如果对这一部分使用面向对象变成概念的话 , 会降低程序的复杂度 , 增加程序的可维护性和可扩展性 。如果你使用typescript, 这样的面向对象编程语言来开发前端的话 , 那自然的 , 你已经有面向对象编程的概念了 。
这门语言是Javacript的超集 。如果你有面向对象编程的经验 , 学习学好这门语言根本不在话下 。即使你在使用JavaScript ,  你也可以通过函数的方法来定义原型基类 , 然后通过在扩展的函数里面定义扩展原型 , 这样你新的函数既可以享有原有函数的所有方法也可以添加上新的功能实现这实际上就是父类和子类的一个概念 。

推荐阅读