编程中,相较于OOAD设计工作而言,编码实现是个次要问题。

设计过程就是抽象归纳的过程。大抵有两种模式:

一是传统以数据模型驱动的设计思路,其特点是拿到一个需求,分析出一些基本的实体和关系(ER图)然后就去设计数据库和表关联了,这样做的好处就是建模速度快,缺点是实体类往往被数据库表牵着走,沦为数据模型的载体;由于着眼点偏于底层,没能从领域对象层面去抽出事物的本质,一旦需求发生变化,其维护和扩展性差。

二是OO思想,从业务需求分析领域模型,不去考虑持久化层面等问题,怎样存储和存储在哪不是设计阶段要考虑的问题,只是从对象和对象关系进行建模。其特点是好的类抽象设计,已经就能通过类(包括接口)之间的关联关系进行协作,在业务逻辑上实现功能需求了。数据库要跟着对象动。

由OOAD或DDD再到OOP等理念,就是看到需求是不稳定的这一问题,其精髓是从企业不稳定的需求中分析出稳定的对象,以企业对象为基础来组织需求、构架系统。一旦需求变化,只需要将稳定的企业对象重新组织就可以,这样抽象出的对象就是common bussiness object。

比如我做过一个需求,是要实现对停车场设备部署作业的开局登记,登记后可以从系统上导出excel表,这样施工人员可拿着表格去现场对照着作业(当然也可以现场登录系统查看)。在我没有oo的意识之初,我竟然天真的去根据同事提供的历史开局表格的表头进行抽象。后来一想,表格是哪来的?是从线上导出的!线上的信息是哪来的?是从数据库拿的字段!数据库字段是哪来的?是经由映射的实体类,从前台的vo传过来的!那么表格内容制式、表头要是变了呢?岂不天下大乱!所以我们都知道开发流程是需求分析->概要设计->详细设计->编码实现->测试->部署上线->运维,一旦设计工作本末倒置,或者囫囵吞枣其危害就是“基础不牢地动山摇”。这也再次印证OO的思想是力求抽象出好的静态领域模型,因为其具有相对的稳定性,能够良好的支持可维护性和可扩展性。

在实操层面,类的设计是没有标准的。十个人可能有10种不同的类设计。但要抽象和封装的恰到好处,这些类才好用。在什么粒度上抽象,类属性是否要引用其他实体类都值得推敲,诚然这是吃经验的,我在不断体会学习中。总之,设计要好好去做;但也没必要完全想清楚再编码,事实上也很难完全想清楚,总要有个迭代修改的过程。我觉得,可以先把所有名词和所有动作都简单粗暴的归纳出来,不怕细碎;动作归到接口类中,名词就先遍历抽象出各个类和域,名词(属性)和动作(功能)的抽取除了显而易见的因素之外,还可以按照5w1h来检核;最后考量实体类对业务的支持,不必要抽象的属性再进行合并到其他类里就可以。

接下来,便是界面草图设计和后端接口的进一步详细设计了。那么先写前端还是先写后端呢?我理解,上述的类图设计里,对象和功能已经具备一定的完备性了,或者说已经把整个业务需求做了粗粒度的实现。这时做完实体类编码和ORM映射数据库之后,仍然会发现前端一团麻,后端也无从下手的感觉。其实,前端界面设计和后端详细的接口设计,都不是分立的,而是统摄于更细化的需求分析了。这就是详细设计阶段,该阶段已经接近于编码实现,但此时仍然不急于编码实现,仍然可以停下来继续画更细粒度活动图,时序图,状态机等把需求屡清楚;高手所谓的编码不需要走脑子、编码的感觉等,吃的就是这块的经验;当脑袋里有足够多的业务模型积累时,自然就下笔如有神了。但建议像我一样,还没有达到那个层次的朋友,不妨以退为进,慢就是快,避免南辕北辙。

关于OOAD的一点心得相关推荐

  1. 新手网站推广邮件群发一点心得

    关于邮件群发一点心得 请勿见笑,本人新人啊.新人做法还是比较菜的.说一下邮件群发吧.最近本人下软件不下百次.病毒木马电脑已经是满满一箩筐了,幸好是虚拟机里. 首先收集相关邮件地址这里转一篇文章 营销如 ...

  2. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得...

    谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...

  3. mysql数据库管理系统模式_MYSQL命令行模式管理MySql的一点心得

    MYSQL命令行模式管理MySql的一点心得 MYSQL命令行模式管理MySql的一点心得 MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个" ...

  4. 将asp.net1.1的应用程序升级到asp.net2.0的一点心得

    将asp.net1.1的应用程序升级到asp.net2.0的一点心得 费了好一袋烟工夫把CommunityServer升级到了Asp.Net2.0平台,一点心得: vs2005可以很方便的帮我们把vs ...

  5. 使用Webbrowser的一点心得体会

    使用Webbrowser的一点心得体会 原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就 ...

  6. 关于MySQL存储过程异常处理的一点心得

    关于MySQL存储过程异常处理的一点心得 参考文章: (1)关于MySQL存储过程异常处理的一点心得 (2)https://www.cnblogs.com/lrl45/p/6037513.html ( ...

  7. 做互联网产品运营的一点心得

    一个网站运营团队大致粗略地可分成三个部门:产品部.设计部和技术部,产品部为核心,设计部和技术部为支撑,如果网站产品较多比如有资讯内容.论坛.博客.SNS等,那产品部会配备好几个人,每人负责一个产品.在 ...

  8. 转载tangl_99的Servlet 实现文件上传下载--自己的一点心得

    这个周末终于可以好好锻炼一下我的IBM ThinkPad T43了.今天看了一些关于JSP,Servlet方面的资料,写了简单的两个JavaBean.一个是UpLoad,一个是DownLoad.写得很 ...

  9. java学不下去能学web安全吗,这半年学习 Web 安全的一点心得体会

    原标题:这半年学习 Web 安全的一点心得体会 来自公众号: 信安之路 大家好,我是 Mirror(王宇阳),专科在读的大二学生:接触信安时间不长,大佬多多指教.信安之路成长平台网站开放后我就在双十一 ...

最新文章

  1. intellij idea 和 myeclipse 转换
  2. DNS基本原理与配置
  3. Windows 7加域操作手册下
  4. KVM — virsh 指令行工具
  5. 图文解说oracle视图
  6. 串口同步通信和串口异步通信
  7. 【转】解决:ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
  8. stringstream的基本用法
  9. fopen的路径怎么写_用C++写光线追踪:单根光线的渲染
  10. 天池-街景字符编码识别1-赛题理解
  11. Qt学习笔记——打开并显示图片
  12. CS224N刷题——Assignment1.3_word2vec
  13. eclipse+tomcat+mysql中JDBC驱动加载失败已解决
  14. c语言 闹铃 程序,C语言程序-闹铃
  15. 配置 manjaro
  16. 一道关于飞机加油的问题
  17. 单场淘汰制场次计算方法_体育编排
  18. props的基本使用和特点
  19. 蓝桥云课linux入门2:基本概念及操作
  20. 习惯养成计划申明(重要)

热门文章

  1. 多元线性回归——波士顿房屋价值模型预测
  2. 《uni-app》一个非canvas的飞机对战小游戏实现-requestAnimationFrame详解
  3. 全栈技术经理——团队管理:指导中层管理者日常行动指南
  4. 【noip模拟题】迎接仪式(dp+特殊的技巧)
  5. linux arm 时区 文件,ARM linux 时区
  6. github在linux安装教程
  7. Android 设置飞行模式,判断是否是飞行模式
  8. 泛函分析 03.02 内积空间与Hilbert空间-正交与正交分解
  9. 【运维经】第18章——AOE技能,批量杀掉(kill)进程
  10. 2022年计算机二级考试Python语言程序设计复习题及答案