从编程思想到软件开发和设计能力培养( 二 )


对于面向对象的核心特征谈的比较多的是封装 , 继承和多态 。 这些可能比较偏技术词汇 , 那么再简单点来说面向对象编程思维其核心则是找到问题域中的对象 , 将其抽象为类 , 识别类应该有的属性和方法特征 , 同时去理清类和类之间的关联和交互关系 , 将问题本身的解决过程映射到类和类之间的方法交互上 。
如果从这个意义上 来说 , 好像也不是很复杂 , 那么实际面向对象编程的难点实际在为了保持代码足够的健壮性 , 可维护性 , 可扩展性而做出的各种抽象 , 包括接口的提取和组合 , 控制或逻辑类的增加等 , 这些本质已经转换到技术域类本身 。
复用和自动化思想
除了上面谈到的 , 再谈下其它的一些内容 。 编程里面有一个重要的思想即是复用 , 从最简单的函数 , 到模版库 , 类库 , 再到更上层的公共组件等 , 都在体现复用的思 想 , 而复用本身的目的则主要是提升开发效率 , 提升可维护性和代码的可读性等 。 复用可以理解为编程过程中的编程思想更加恰当 。
编程的思想是自动化 , 不要简单的理解为编程语言能够帮助你解决建模和映射的难题 , 编程的自动化更多的还是体现在机器可以自动化的进行大量计算和运算 , 而这 个运算是通过我们的程序进行的 。 程序中体现的一个重点我更喜欢把它理解为循环 , 从抽象中去发现和发掘一种可自动化的循环 , 这种循环的处理正是程序的强项 。任何人都应该有这种自动化的编程思维 , 即懒人思维 , 重复的事情一定不要自己手工重复完成 。
基于一个简单业务实现谈编码
从编程思想到软件开发和设计能力培养文章插图
在谈这部分之前首先还是要继续推荐下《代码大全》这本书 , 该书在很多公司都会被推荐为新人入职后的必读书 , 即使在互联网和敏捷开发环境下 , 该书对于新人仍然有仔细阅读和体会的必要 , 要明白架构和设计思维的基础仍然是编码思维 , 面向对象思维的基础仍然是代码本身的逻辑和结构 , 如果不能写出高质量的代码 , 那么架构和面向对象思想很多内容往往难以真正落地 。
下面结合一个最简单的业务功能场景来讲解 , 即采购订单新增这个业务功能和场景 。
核心对象和依赖对象分析
拿到这个功能需求后当然是首先要详细阅读具体的业务功能需求 , 在阅读完后第一需要思考的不是业务流程 , 不是数据库表 , 而是首先应该思考该功能对应的核心领域对象究竟是什么?以这个功能为例 , 可以很明显的看到核心对象是采购订单 , 这是一个有明确业务含义的对象 , 可以看到后续很多的业务操作和方法都将围绕采购订单这个对象展开 。
核心主对象明确后再分析该功能需要依赖的附属对象 , 比如:

  • 供应商:基础主数据对象 , 依赖原因是需要在创建采购订单的时候选择供应商
  • 采购类型:数据字典类对象 , 依赖原因同样需要在创建订单的时候选择
  • 订购商品:基础主数据对象 , 一张订单选择购买的一个或多个商品和数量信息
了解开发框架的分层和运行机制
从编程思想到软件开发和设计能力培养文章插图
该问题做了基本的思考后 , 再回答我们具体使用的语言和开发框架 , 比如基于标准的java ssh框架来开发该功能 , 要明白我们一般选择了某种框架后基本的分层思路就已经确定了 。
当我们拿到一个现成的框架后 , 在基于这种框架做完练习后首先要思考的就是这种框架本身的运行机制是如何的?各层之间的调用逻辑和分工是如何的?各层有哪些约束和边界 , 在业务实现过程中涉及到的业务规则 , 逻辑和数据处理究竟应该放在哪层去实现 。
这些问题必须在编码中搞清楚 , 而不是依葫芦画瓢而不知其所以然 。
识别和定义核心类和方法