`

过度设计-举例(转)

阅读更多
过度设计,需要更多设计时间和测试成本,如无必要,还是尽量简洁一些好。
未来的事情,比如 访问量,比如数据库的容量,比如是否需要改成分布式  都是无法预料的

再举一个例子,对闰年的判断逻辑:
  1、 if($Year%4==0) return True; else return Fasle;
  2、if (   ($Year%4==0  &&  $Year%100!=0 )  ||  $Year%400==0  ) retrue True; else return False;
  我选择了第一种逻辑,当然第二种更为标准。我的原因是:
  1、第一种逻辑速度够快;
  2、我做的不是日历程序,只是一个应用需要判断闰年;2100年,对我来说太遥远,我的编码活不到那一年,中间肯定被别人废弃了。在未来的80多年中,我的代码都不会出问题。


实际例子:

以前总是举不出过度设计的例子,今天遇上一件事,总算有了一个反例:
  程序员A编写代码,记录用户购买商品记录,设计1个8字节字段,前4个放用户ID,后4个放商品ID。
  粗看设计没有太大问题。实际编码中,发现数据库中商品ID,是long long类型,8个字节。他遇上困难,卡在那里了。他找上leader,说明要改设计,需要更多时间,完美兼容这种情况。
  但是现在没有足够的时间,来做大的变动,于是找了个折中方案,整个字段8字节放商品ID,另外再用一张表去关联用户ID同商品ID的购买关系。

  在我看来,这就是过度设计了。
  我的方案,仍然坚持原有设计,前4字节放用户ID,后4个字节放商品ID的后4字节。这个方案,是有缺陷的,商品ID是一个自增的循环数,存在一种 用户ID+商品ID后4字节 重复的可能性。
  但是我们考虑一下,现有商品ID增长到:约2亿,4个字节能够支撑40亿商品,现有商品库运营4年了。
  按照现在的业务发展速度,无论如何,2年内,我看不到一点重复的可能。不需要重新设计,简单把功能实现。并记录,规划在1年后重构这部分代码。(很可能在1年内,这个模块就因为其它原因要重构)
  为什么要为了未来的支撑能力,耗费现在的开发资源呢?做一个额外的表,不是增加新的逻辑吗?
分享到:
评论

相关推荐

    智能仪器原理及应用:第八章 设计实例举例.ppt

    这需要平衡研发成本、生产成本和使用成本,选择性价比高的设计方案,避免过度复杂或昂贵的组件。 - **集成化与开放式设计**:利用现代电子和计算机技术,将多种功能集成在一个平台上,同时保持系统的开放性,以便于...

    现代主义设计与后现代主义设计的联系与区别.ppt

    现代主义设计起源于20世纪中叶,核心理念是“形式追随功能”(Form Follows Function),强调设计应以功能性和效率为主导,反对装饰性元素的过度使用。这股思潮被称作“功能主义设计”或“技术美”,因为它主张设计...

    sql三个范式举例.doc

    【SQL三个范式详解】 ...在实际应用中,设计师通常需要在规范化与查询效率之间寻找平衡,因为过度规范化可能导致查询复杂度增加。理解并熟练运用这些范式,能帮助我们构建更为健壮和高效的数据存储方案。

    C#设计模式.PDF

    设计模式举例 这部分内容将通过具体的例子来介绍设计模式的应用场景,帮助读者理解不同设计模式如何解决特定的问题。 ### 3. 先有鸡还是先有蛋? 这是一个引人思考的问题,旨在探讨软件设计中的某些基本哲学问题...

    举例详解CSS中的text-shadow文字阴影效果使用

    在CSS中,`text-shadow`属性是一个非常有用的工具,它允许开发者为文本添加阴影效果,创造出各种视觉特效,从简单...在实际应用中,要根据设计需求和用户体验来谨慎使用,避免过度使用阴影导致页面过于复杂或难以阅读。

    C#设计模式大全

    #### 二、设计模式举例 设计模式是在特定上下文中解决常见设计问题的经过验证的解决方案。在C#中,设计模式被广泛应用于提高代码的可重用性、灵活性和维护性。例如,“开放-封闭”原则(OCP)鼓励我们设计出既可以在...

    C++友元举例

    在C++编程语言中,"友元"是一个重要...然而,过度使用友元可能会破坏封装性,导致代码难以理解和维护,因此在设计时应谨慎使用。在实际编程中,我们应该寻找平衡,充分利用友元带来的便利,同时尽量减少其潜在的风险。

    PPT动画效果举例说明点评.rar

    在PPT设计中,动画效果的应用能够极大地提升演示文稿的吸引力和专业性。"PPT动画效果举例说明点评.rar"这个压缩包包含了名为"PPT动画效果举例说明点评.pptx"的文件,作者通过五个具体的动画效果实例,深入浅出地讲解...

    面试技巧-面试官的考题.pdf

    - 不要过度夸大或撒谎:诚信是职业发展的重要基石。 - 避免负面言论:即便谈论前雇主或团队,也要保持专业和尊重。 9. 不同类型的面试: - 电话/视频面试:需要确保网络稳定和环境安静。 - 技能测试面试:根据...

    汽车双柱举升机设计设计计算.pdf

    对于主要参数,举例如普通式双柱举升机,其额定举升质量通常在2.5-4吨之间,最大举升高度1700-1800毫米,最低盘距地面110-180毫米,上升和下降时间一般为50-70秒和20-60秒。 【第2章 结构设计】涉及了举升机的关键...

    芯片设计中CPPR问题的分析和解决.pdf

    举例来说,晶体管的阈值电压、电流驱动能力,以及连线的电阻和电容等,都可能与设计时的预期值不一致。这种差异会影响到电路的时序特性,尤其是在高频工作条件下,影响更为明显。 时序分析是芯片设计中的一个关键...

    三年级上册信息技术全册教案带目录 .pdf

    - 使用时的健康注意事项:保持正确的坐姿,定时休息,避免视力过度疲劳。 4. 教学过程设计: - 导入新课:通过谜语引起学生兴趣,引入计算机主题。 - 新课讲授:详细介绍计算机的各个组成部分及其功能,让学生...

    智能建筑弱电工程设计的若干技术问题.doc

    设计时需综合考虑功能定位、投资能力和运营需求,确保主要功能的实现,避免因过度设计导致资源浪费。 其次,设计应跟踪主流技术,选择成熟、可靠且稳定的技术路线。随着信息技术的快速发展,工程设计需关注市场趋势...

    Intel 64及IA-32 架构优化参考手册

    - 举例来说,通过使用SSE2的PADD指令,可以在一个周期内完成对多个整数的加法操作。 3. **SIMD浮点应用的优化**: - 对于浮点运算,可以利用AVX指令集中的FMA(融合乘加)指令来减少中间结果的读写次数,从而提高...

    Python的设计模式编程入门指南

    设计模式的运用需要根据实际情况,过度或不恰当地使用可能会导致反效果,但正确地应用则能提高代码的可读性、可维护性和可扩展性。 设计模式主要有三大类: 1. 结构型模式:关注如何组织和组合对象,以增强系统...

    某知名企业程序代码编写规范之五

    **½5-4:避免过度设计的数据结构** - **目的**:减少因过度灵活而引入的复杂性和潜在错误。 - **做法**:在设计数据结构时,不要试图覆盖所有可能的场景,而是专注于当前的需求。 **½5-5:简化结构之间的关系** ...

    一位中国软件工程师的感言

    - 举例说明,对于处理事务的列表,印度人倾向于使用简单的大数组,注重效率和易用性,而中国人可能过度设计,使用复杂的双向链表。 2. **软件开发流程与质量管理**: - 印度公司通常遵循严格的CMMI级别的开发流程...

    敏捷软件开发的必要技巧

    - **避免过度设计**:不要在没有明确需求的情况下添加额外的功能。 - **遵循原则**:如DRY(Don't Repeat Yourself)、KISS(Keep It Simple, Stupid)等。 - **代码审查**:定期进行代码审查,确保代码质量。 *...

    小清新教学通用PPT模板

    此外,适当运用动画和过渡效果可以增加视觉吸引力,但要避免过度使用,以免分散注意力。对于IT相关的教学内容,可以插入代码示例、系统架构图、流程图等专业元素,使讲解更直观易懂。同时,考虑到不同行业的特性,...

Global site tag (gtag.js) - Google Analytics