热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

这不是忽悠(2):编写代码时要注意可扩展性

可以说,代码要具有可扩张性,其核心就是“高内聚,低耦合”的设计思想,这已经不只是一项优秀的程序员素质,可以说是初级程序员向高级程序员的重要标准。变成忽悠简直不可思议。某些人把代
    可以说,代码要具有可扩张性,其核心就是“高内聚,低耦合”的设计思想,这已经不只是一项优秀的程序员素质,可以说是初级程序员向高级程序员的重要标准。变成忽悠简直不可思议。

    某些人把代码的可扩展性忽悠成对需求预测的精确性,指出对需求预测十分困难,因此代码就很难具有可扩展性。十分可笑,面面俱到的代码是扩展性最差的代码。

    “程序的可扩展性必须建立在对未来需求的准确把握上”这句话本身就是大忽悠,恰恰相反,程序的可扩展性必须建立在能够对需求变化快速响应上。开发人员花费大量时间研究设计模式,研究架构设计,研究各种协议,其目的不只是为了预测需求,其最重要的目的是使事情(或事物)更合理,我对“合理”的理解就是当某个过程(或对象)发生变化时,其对关联方的影响最小,核心正是“高内聚,低耦合”。这点重不重要?十分重要!影响最小意味着关联方的变化最小,关联方对变化的响应也就能更快速。举个简单的例子,《大话设计模式》中的简单工厂模式,为何花费如此多的功夫将简单的超市收费一步步细化成如此详细的各种对象,其目的不正是使各对象“高内聚,低耦合”,当需求发生变化时,其代码拥有更好的可扩展性?

    某些人对迭代开发、敏捷编程十分崇拜,我亦十分欣赏,但正是因为其十分重要,我需要清楚的阐明我对其思想的理解。结合这些年的工作经验,我十分希望我的代码具有良好的可扩展性,“高内聚,低耦合”正是我追求的目标,而不是所谓的“需求预测”,需求预测是预研部门或市场部门的工作,还轮不到我越俎代庖。

    我的建议是如果想让自己的代码具有更好的扩展性,《UNIX设计艺术》、《代码大全》、《大话设计模式》都是非常好的资料,而不是未来需求预测。
    最后一句,基本功能的实现固然十分重要,但是只有对架构进行合理的分析设计,其才能够快速响应新的需求变化,这才是“可扩展性”的精髓。

188 个解决方案

#1


沙发~~~

#2


#3


好久没看技术书了,加紧补一下  - -!

#4


#5


#6


俩字:简单。

#7


我艹 牛逼里狠那

#8


#9


#10


不错不错

#11


学习~

#12


有道理@

#13


学习,并接分,谢谢楼主分享

#14


我在做一个进销存,我能预测到很多需求,但我必须有所取舍,我不能把所有能预测的需求都预留扩展,这不是SAP。我还是先保证严谨的架构,把基本功能实现吧。

#15


高内聚,低耦合

#16


选错侧重面,也会导致以后的扩展困难

#17


好的,可以学习哈!

#18


最近貌似在实际中有些感悟了

#19


沙    发 ‘’‘’‘’‘’

#20


soga

#21


#22


#23


是哦,顶起

#24


yanbf's?

#25


好说难做

#26


#27


某些人把代码的可扩展性忽悠成对需求预测的精确性,指出对需求预测十分困难,因此代码就很难具有可扩展性
---------------------
    要代码具有可扩展性的主要原因就是需求无法精确预测,所以架构和模块需要按照一定的模式去设计。如果需求能精确预测,就不需要什么模式了,直接完成所有的需求,或者完成一部分,给剩下的留下存根就行了。
     架构设计师需要预测的不是用户的需求,而是平台变化和通用的约束条件,比如开发手机应用,需要考虑自适应手机屏幕、跨平台移植、适应不同分辨率等等,这些都不是具体的用户需求。

#28


#29


这不是忽悠,是广告

#30


楼主精辟啊!

#31


同意,D

#32


扩展有很多种,如何扩展还是和开发人员的经验有关。

#33


学习了

#34


先顶再看·

#35


需求预测是预研部门或市场部门的工作,还轮不到我越俎代庖。
---------------------------------------------------------------

不认同这句话,无形之中,已经被束缚在整个软件工程固有的框框里面.需求预测和设计或编码其实还是可以统一在一起看,就看怎么看,看呀看不出来.所以今天看到一个新闻:李开复:中国需重建教育体系才能出谷歌级大公司,也是深有感触.

#36


忽悠,,接着忽悠

#37


真正做起来很难。

#38


......

#39


楼上的,该高调要高调,那在中国,这样比较靠普:做人务虚低调,做事务实高调.

#40


我觉得可扩展性在做系统结构设计的时候就要考虑了,考虑的根据是需求有可能会发生变更的地方。

#41


反对很多接分

#42


楼主的主要意思应该是说高内聚低耦合,这样在扩展的时候即使需要改动,也只是个别模块变更,而不是动筋骨的改变.应该不是说要你去预测用户可能需要的功能,然后提前写好代码.用户的需求是不可预测的.

#43


说的都是一些朴素的道理,但如果要研究设计模式,还是要看《设计模式-可复用面向对象软件的基础》,我始终认为《大话设计模式》这书太山寨。

#44


#45


所有预测到的需求都已经是现实的需求,未预测到的需求就是不存在的。
对于现实的需求可以区分需要立即实现的和未来需要实现的。
在架构层面应该尽可能地支持所有已知的需求,以减少未来重新设计底层的可能。
一般而言,列为未来实现的需求都应该是枝节性的。否则,要么强行插入新功能导致架构混乱,要么重新设计。

这个世界不是非黑即白。
每个概念的外延和内涵也不是那么清晰。
因此有了很多争论。

#46


实现很难的

#47


说的容易,做起来难

#48


接10分  每天呐

#49


JF

#50


大师的话真如“大音希声扫阴翳”,犹如”拨开云雾见青天”,使我等网民看到了希望,看到了未来!晴天霹雳,醍醐灌顶或许不足以形容大师文章的万一;巫山行云,长江流水更难以比拟大师的文才!黄钟大吕,振聋发聩!你烛照天下,明见万里;雨露苍生,泽被万方!透过你深邃的文字,我仿佛看到了你鹰视狼顾,龙行虎步的伟岸英姿;仿佛看到了你手执如椽大笔,写天下文章的智慧神态;仿佛看见了你按剑四顾,江山无数的英武气概!

推荐阅读
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • 第四单元和课程总结:简单的架构设计意识
    一、第四单元架构设计总结第一次作业由于需要按名查找类图模型,于是建立"Class"类进行管理由于方法具有参数导致类中存在二级结构 ... [详细]
  • Unit4博客&课程总结Unit4作业的架构设计本单元作业的设计我分为了三个模块处理:模型构建+预处理+任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
author-avatar
躺在地球上的熊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有