本次我们从4个话题来分享。

第1个话题:

ER数据建模也是一种建模方法。在这个过程中将事物抽象成【实体】【属性】【关系】,进而来表达现实世界事物的描述。比如一个商品、一个订单、一名老师等等这是实体,然后商品的颜色、重量、大小这是属性,一个订单包含多个商品,或者一名老师购买了多个商品,这些是关系。

是的,早先的时候,对于简单的软件产品,软件研发人员直接创建了E-R关系图,我们用工具标识出了实体与实体之间一对一、一对多、多对多的关系,那个时候我们就是在做ER数据建模。其实很多复杂的软件产品我们也是这样做的。

采用ER数据建模之后,就到了我们的CRUD操作。而我们在这个过程中也把CRUD当成了业务,创建用户代替发展新用户,创建订单代替下单,创建商品代替发布商品。你会发现,一旦套上了CRUD就失去了业务原有的语义。很显然,创建用户和发展新用户所要表达的含义是不完全一样的。

我们建模的目的就是让建模要忠于输入需求的目标。

当使用CRUD这样的通用词替代业务术语以后,最大的遗憾是丢失了术语背后的上下文—在冬天说“穿得越少越好”与在夏天说“穿得越少越好”是不一样的。失去业务上下文以后,设计的逻辑性将很难去追溯和质疑。

因此,为了更贴近现实世界,触及现实世界事物之间的关系,反映现实世界的真实反映。我们更愿意使用面向对象的分析,或者是像DDD这种领域驱动的设计方法,而不是数据驱动的设计方法。

诸如此类,比如西红柿是蔬菜还是水果?分得清这一点,也就理解了业务语义。

第2个话题:

《代码大全》这本书阐述了一个核心的观点:解决软件的复杂度是开发软件最核心的问题。什么叫复杂,比如我要增加一个功能,修改了一处代码,结果却引起好多地方连锁故障反映,更为严峻一点的是,bug满地,修改了一个,却导致整个系统崩溃,不修改反而程序还能运行。这种情况肯定是复杂了,更进一步讲是技术债务“堆山”了。

更进一步细致地讲,大致是出现了下面的情况。

组件间依赖混乱,职责不清晰;

组件、文件、函数太大,包含的内容太多;

使用不必要的、复杂的设计范式;

函数、接口参数太多等;

当然,解决一个复杂度问题的最基本的方法是:大化小,多化少。

把一个系统拆分成好多个子系统,把一个模块拆分成好多个子模块,使得作为一个人的程序员的大脑,可以面对有限的信息。乱、多、绕对机器不是问题,但是让人就会认知消化不了。

我们有的同学写代码,只考虑了功能的实现,一丁点都没有考虑功能的扩展,这样的结果,就是造成上面那种僵化的现象。将来没人敢动你的代码,包括你自己。

繁和简之间,怎么界定呢,有什么标准么,其实可以直接用单一职责原则,它是所有原则的基础原则。

但是呢,有时候我却不建议你,一开始就把代码写得“八面玲珑”。

拿我们人人都讨厌的重复代码来讲,更有一个原则叫做DRY,不要重复自己。可很多时候,刚开始的重复也不一定是坏事。

很多时候,重复的代码可能会带来相当大的优势,重复能拖延决策,这是软件开发的黄金。

怎么理解。

把重构的决策延迟一段时间。如果一开始,刚有一处功能代码的时候,你对之进行DRY,这很有可能导致出现不存在的抽象,也很有可能是无中生有的创造。

第3个话题:

让你讲清楚万有引力是怎么回事,估计很难,因为万有引力是一件复杂的事情,所以那个时候牛顿用他的观点提出了牛顿力学来解释万有引力是怎么回事。可是在那个当时的年代,大家也不太容易牛顿力学。这样就造成了一个现象:解决复杂性问题的方法本身可能也具有一定复杂性

随着时间的推移,知识点被应用、讨论得越来越广泛。之后,你会发现,原先用来解决复杂性问题的“复杂方法”就不那么复杂了。比如,现在初中课本里面就学到了牛顿力学,相信所有的初中生都能够理解万有引力的基本知识。

像DDD这个东西,就有点类似这样的情况。本身DDD是被用来解决软件复杂性的方法。但是很多初学者会觉得DDD复杂,较难掌握,行话也多。但只要这个方法的方向是对的,在日常的生产实践中,被频繁的使用,实验,那么相信将来大家一样会很容易的接受DDD的方法。

第4个话题:

不喜欢了解业务知识,更喜欢学习技术知识,因为像高并发、大数据量、队列机制等等这样的技术说出来就显得”高大上“,如果你的简历上写着你熟悉购物车流程、熟悉订单流程,好像吧,就是不如前面那些技术词汇“牛掰”。所以呢,程序员们很乐意钻研那些中间件、MQ等等,然后将来把它们写到简历上,感觉更为充实。而不愿意主动去了解、熟悉业务知识,大多数时候都是迫于需求交付和实现,被动得去熟悉业务知识。

这样的结果就是好多程序员为了技术而技术,程序员里面一批一批的人去攻克技术难题,而不是业务建模难题。实际上,互联网也好,传统企业也好,软件开发的技术发展到现在,基本都是有很成熟的基础技术来支撑了。

稳定、性能、扩展。稳定和性能在互联网里面有很多像容器、Redis等等这样成熟的技术来搞定,反而是业务上的扩展更有挑战性,只要业务发展,需求就会增多、变化,就要在原先的代码基础上“添砖加瓦”。业务建模不完善,代码的结构型不合理,当你手里拿着“一块砖”的时候,你可能会发现,我到底该往哪里放呢。可能就是没有地方放,最终你的软件代码扩展受限。

在软件开发的过程中,高效率不一定代表高质量,但软件的高质量却能带来高效率。

参考资料:

《复杂软件设计之道:领域驱动设计全面解析与实战》

“穿的越少越好”在夏天说和在冬天说是不一样的相关推荐

  1. 误码率越高越好还是越低越好_夜间护理步骤越多越好还是越少越好?NFF

    现在很多人都知道了夜晚是护肤的黄金护肤时间,有些很聪明的姐妹就从夜晚着手,使用很多种护肤品,希望达到事半功倍的效果,但好皮肤不常有,皮肤问题却常有!既然如此,不少人就问了,夜间护理的步骤到底是越多越好 ...

  2. 程序员的代码行数越少越好?

    代码行数越少越好?读懂别人的代码很困难?如何编写出"完美"的代码?每天要坚持8小时编程?......拜托,这些编程误区程序员应该尽早知道! 作者 | Ryland Goldstei ...

  3. 实际返回的行数超出请求的行数_代码行数越少越好?

    代码行数越少越好?读懂别人的代码很困难?如何编写出"完美"的代码?每天要坚持8小时编程?......拜托,这些编程误区程序员应该尽早知道! 以下为译文: 作为开发人员,你会听到许多 ...

  4. 程序员的代码行数真的越少越好吗?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... 代码行 ...

  5. 装修遗憾大全 (看的越早、遗憾越少)

    http://www.douban.com/group/topic/9744690/ 装修遗憾大全 (看的越早.遗憾越少) 装修常常会留下遗憾,让我们的装修不那么完美,以下是网友们总结的装修遗憾大全, ...

  6. 【校招VIP】IT职位校招简历千万不要用两栏的模板,另外,告诉你个陷阱:越个性机会越少

    前两天在简历指导的直播里,发现了不应该出现的一种简历格式问题. 有的同学喜欢用那种竖栏两栏的简历模板. 我们建议研发岗的校招,简历不要这么去写. 因为两栏的话,实际上有一个很大的问题. 因为简历上需要 ...

  7. 计算机分区的优点,作为一个电脑老手来告诉你们:电脑分区真的是越多越好吗?...

    电脑是当代不可缺少的一部分,我们在使用电脑时我们通常会遇到一个问题,就是电脑在买回来的时候机械硬盘只有一个分区(C盘),这对大多数人来说根本不够,把大量文件堆放在一个盘里,久而久之就会形成一堆乱麻. ...

  8. 越是见过世面的人,欲望越少

    一人分饰八角的演技才华,而是她与众不同的择偶观. 在一次综艺节目中,韩雪和其他几位女明星一起聊天,聊到了各自的择偶标准. 在场的几位女性朋友或是钟爱帅气的硬汉,或是偏好软萌的鲜肉,韩雪却说: &quo ...

  9. 冬季穿搭:越厚越时髦

    如果你很怕冷,觉得过冬很痛苦,又担心穿得太厚显臃肿.那么今年冬天时尚圈流行的趋势你一定喜欢,因为今冬就流行外套穿得越多才越时髦! 衣服从来都是季节更递,温度变化最明显的体现.面对寒冷的天气,不穿得厚一 ...

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战
  2. [C++]const 总结
  3. TI 无桥PFC方案【转子tidu312.pdf】-----图片专帖
  4. tensorflow计算图_简单谈谈Tensorflow的运行机制
  5. ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
  6. 01 | 从神经元说起:数学篇
  7. Ansible-playbook 学习
  8. setyear java_如何在Java中创建不可变类
  9. maven中pom.xml显示不正常的问题
  10. 中源数聚携手中科点击共推管理咨询变革
  11. 结构化数据与非结构化数据理解
  12. 【转】android开发 dts、各种接口porting----不错
  13. flash activex java_adobe flash player activex
  14. 离线安装Python包的三种方法
  15. 数据结构习题及解析三
  16. 意创坊-移动富媒体平台
  17. systemd-journald日志进程介绍
  18. 新能源产业写入2021年11省两会政府工作报告,大爆发在即!
  19. MySQL 表查询关键字
  20. 好用的revit软件:MEP绘制管道风管时,提示不可见如何解决?

热门文章

  1. 学了皮毛,你如何能做Web安全工程师?
  2. Google Drive—谷歌云盘大文件下载
  3. 全球及中国装配式建筑行业深度研究与发展模式咨询报告2022版
  4. 华为芯片鸿蒙的由来,华为“鸿蒙”真的来了!看完这些商标来历,网友们又激动了...
  5. 关于USIM卡的全面测试综述
  6. 记一次投稿springer期刊,利用tex排版文稿
  7. AI伪造指纹到来,指纹解锁还安全吗?
  8. Marvell车载交换机88Q5050, 88Q5072 VLAN配置(一)------VLAN的基本原理
  9. 信息安全—密码学信息熵信息理论基础—熵的概念(熵、联合熵、条件熵、平均互信息)
  10. Windows Kits(Windows 工具包)