精华内容
下载资源
问答
  • 2016-07-02 02:13:22

    单一职责原则 Single Responsibility Principle

    定义:一个类或者一个接口,最好只负责一项职责。

    问题由来:类T负责两个不同的职责P1和P2。由于职责P1需要发生改变而需要修改T类,就有可能导致原来运行正常的职责P2功能发生故障。

    解决方法:遵循单一职责原则。分别建立新的类来对应相应的职责;这样就能避免修改类时影响到其他的职责;

    当遇到职责扩散的时候,在逻辑足够简单的时候,才可以在代码级别上面违反单一职责原则,只有类中方法数量足够少,才可以在方法级别上违反单一职责原则;

    优点:类的复杂性将会降低,可读性将会大大提高,维护性也会提高。


    里氏替换原则 Liskov Substitution Principle

    在使用基类的地方可以任意使用其子类,能保证子类完美替换基类;这一种精神其实是对继承机制约束规范的体现。在父类和子类的具体实现中,严格控制继承层次中的关系特征,以保证用子类替换基类时,程序行为不发生问题,且能正常进行下去。

    对于继承来说,父类定义了一系列的规范和契约,虽然不强制所有的子类必须遵从,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破环。

    如果非要重写父类的方法,比较通用的方法是:原来的父类和子类都继承一个更加通俗的基类,原有的继承关系去掉,采用依赖、聚合、组合等关系代替;

    原则包含了一下四层含义:
    * 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;
    * 子类可以增加自己特有的方法;
    * 当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更佳宽松;
    * 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更加严格;


    依赖倒置原则 Dependence Inversion Principle

    定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象,其核心思想是依赖于抽象;

    问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来完成;这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原则操作;假如修改类A,会给程序带来不必要的风险。

    解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I来间接与类B和类C发生联系,则会降低修改类A的几率;

    在实际中,我们一般需要做到以下三点:
    * 低层模块尽量都要有抽象类或者接口,或者两者都有;
    * 变量的声明类型尽量是抽象类或者接口;
    * 使用继承时遵循里氏替换原则;


    接口隔离原则 Interface Segregation Principle

    定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上,否则将会造成接口污染;类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现它们不需要的方法;

    原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少;就是说,我们要为每个类建立专用的接口,而不要试图去建立一个庞大的接口供所有依赖它的类去调用;

    注意,接口尽量小,但是要有限度,对接口进行细化可以提高程序设计灵活性,但是如果过小,则会导致接口数量尽量小,使设计复杂化。所以一定要适度,为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来;

    规则:
    * 一个接口只服务于一个子模块或业务逻辑,服务定制;
    * 通过业务逻辑压缩接口中的public方法,让接口看起来更加精悍;
    * 已经被污染了的接口,尽量修改,如果变更风险太大,则用适配器模式进行转化;
    * 根据具体的业务,深入了解逻辑,用心感知去控制设计思路;

    如何实施接口隔离,主要有两种方法:
    1. 委托分离,通过增加一个新的接口类型来委托客户的请求,隔离客户和接口的直接依赖,注意这同时也会增加系统的开销;
    2. 多重继承分离,通过接口的多重继承来实现客户的需求;


    迪米特法则

    定义:一个对象应该对其他对象保持最少的了解,其核心精神就是:不和陌生人说话,通俗之意就是一个对象对自己需要耦合关联调用的类应该知道的少;这会导致类之间的耦合度降低,每个类都尽量减少对其他类的依赖。


    合成复用原则

    原则是尽量使用合成/聚合的方式,而不是使用继承;

    开闭原则

    定义:一个软件实体如类、模版和函数应该对扩展,对修改关闭;

    解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是修改已有的代码来实现变化;

    • 单一职责原则:实现类要职责单一;
    • 里氏替换原则:不要破坏继承体系;
    • 依赖倒置原则:面向接口编程;
    • 接口隔离原则:设计接口的时候要精简单一;
    • 迪米特法则:降低耦合;

    开闭原则:总纲,对扩展开放,对修改关闭;

    更多相关内容
  • 代码REVIEW的一般方法

    千次阅读 2019-07-29 16:47:13
    本文主要以C代码的视角描述CODE REVIEW的一般方法。 一、代码REVIEW前的准备工作 了解软件的基本架构,软件层次关系以及模块间关系,业务流程的任务划分。这个要求是对设计文档需要比较详细的了解。如果没有详细...

           代码REVIEW的工作是软件工程中不能忽视的工作,是软件质量活动之一,对保障和改善软件工程质量有比较明显的作用,特别是对团队进行开发的软件工程。本文主要以C代码的视角描述CODE REVIEW的一般方法。

    一、代码REVIEW前的准备工作

           了解软件的基本架构,软件层次关系以及模块间关系,业务流程的任务划分。这个要求是对设计文档需要比较详细的了解。如果没有详细的设计文档,至少要有比较清楚的业务流程和模块划分。

    二、代码REVIEW的一般性检查

    1、代码文件和目录的REVIEW

    检查软件目录是否安排合理,是否按一定的规则进行,有的是按照软件的层次进行目录的分配,有的是按照功能模块进行目录的分配。比较糟糕的目录结构是按照部门和小组进行分配,对于整个软件系统来讲没有机构的概念,支持层次和模块的概念。检查文件命名是否符合编程规范,让人一看就知道此文件或目录说明了什么。

    2、代码头文件的检查

    容易犯的错误是代码头文件中,不区分内部使用还是外部使用头文件的包含关系是否按层次

    3、函数名称的检查

    文件中内部使用函数和外部使用函数,内部使用的函数不应暴露在对外使用的头文件中,内部使用函数名称是否和对外函数名称容易区别,函数命名是否符合编程规范,函数命名中使用的参数检查,是否函数中有太多的参数,是否可以使用结构来进行命名和描述

    4、结构和变量

    内部使用的结构和对外暴露的结构也要分辨清楚,头文件中只声明对外使用的结构,内部变量和外部变量分清楚,外部变量尽量少用,可以通过函数的方式进行获得。

    5、函数体内的变量

    是否定义太多的变量,很多时候,在调试中加入测试代码和变量,正式版本没有将多余的部分删除掉,在编译过程中一般都会有警告,可以关注变量没有使用的警告。

    6、函数输入参数合法性

    函数体内定义外变量,通常就是函数输入参数的检查,特别是空指针的检查,参数值的范围检查,这些都是代码可靠性的必须要进行的工作。

    7、变量的初始化

    在函数体内部使用的变量,通常都需要进行初始化,给变量一个缺省值,编译器不一定会给变量一个缺省值,定义的指针要赋值空间。

    8、检查空间越界

    数组下标的越界,指针空间的越界,需要重点关注,memcpy, memset, strcpy等的C函数也需要重点关注,常常犯错误。

    9、循环执行体检查

    FOR, WHILE, DO WHILE 循环的退出条件和中止条件的检查,常常是条件不对,数值多一个或少一个就退出或中止,特别是N,N+1, N-1到底是哪个值,还有是大于还是大于等于,小于还是小于等于。对于复杂的退出或中止条件一定要仔细检查,与或条件的检查,括号以及优先级检查。

    10、条件执行体检查

    IF ELSE 和SWITCH的检查,IF ELSE条件的充分完整性检查,SWITCH 多路选择的完整性检查,经常会出现遗漏的情况,IF 条件中“==”误写成“=”,眼神不好容易遗漏,同时编译警告有时也会不注意。

    11、函数返回前检查

    MALLOC临时申请的空间,是否释放FREE,在函数中途异常退出的地方,没有FREE,大家都习惯在函数最后进行释放,这个常常遗漏。返回值是否在设计范围内,返回的空间指针是否被收回。

     

    三、代码REVIEW高层次检查

    1、函数的多任务调用

    全局变量的保护,加锁解锁,有的是函数下又封装了函数,这个问题就比较容易隐藏起来,定位比较困难。另外一个解决办法改多任务调用为单任务调用,从调用的架构上来修改。

    2、临时内存数据传递的保护

    在多任务系统中,有的任务将数据写到一空间以便另外的任务来读取,另外的任务在读的过程中,任务改写此空间内容,极端的就释放此空间。这种情况表现形式多样,不同的业务场景代码实现不同,比如读写通道,关闭通道,消息传递等等。

    3、多任务下状态机迁移混乱

    这个就属于设计不足,要么是设计中有遗漏的情况,要么就是设计状态机过于复杂,迁移条件太多。

    4、下层模块的代码调用上层代码

    这种情况不是不允许,而是不好,容易导致调用关系混乱,特别是多任务系统中,容易导致多任务调用。比较好的凡是是下层代码发消息给上层代码。

    5、单个资源被多个任务使用

    常用的解决方式是使用一个单独的调度任务进行此资源的使用,多个任务向这个任务请求使用,保证单个资源由一个任务来控制。

    6、多任务的互锁

    这个在多任务的程序中也不经意的会犯,好的解决方式是减少锁的设计,甚至是无锁设计,通过将资源进行管理的方式来降低多任务下的调用。

    7、非阻塞和阻塞的使用

    在多任务系统下,合理使用阻塞和非阻塞的函数实现,这个应该是设计时加以注意。明确那些任务是非阻塞运行,那些任务是可以阻塞运行。

    8、业务流程中异常的处理

    在复杂的业务流程中,正常的流程一般设计和编写代码都可以完成的很好,但是业务流程中都会有异常出现,设计中和编写代码中,如何尽可能将异常都考虑全面,处理的全面,是比较考功底的,异常的REVIEW也是关键,牵扯到业务流程的覆盖程度。

    9、代码的扩展性进行REVIEW

    业务经常是变化的,所以接口代码就要跟随修改,如何为后续修改带来方便,对接口设计和编写就要有一定的灵活性和可扩展性。可以参考链接https://blog.csdn.net/DQWKLC/article/details/91491972

    10、代码复杂度的REVIEW

    代码中的复杂度也是需要进行REVIEW的,特别是性能优化上,代码复杂,执行的效率一定会打折扣,而且容易出错。关键的算法应该通过设计减小复杂度,通过前期的伪码设计,减少或降低实际编写代码的难度。

     

     

    展开全文
  • 作者建议根据项目面临的风险来调整架构设计的成本,并从多个视角阐述了软件架构的建模过程和方法包括用例模型、概念模型、域模型、设计模型和代码模型等。本书不仅介绍方法,而且还对方法和概念进行了归类和阐述,...
  • 最优化方法及其Matlab程序设计程序代码课件 《最优化方法及其Matlab程序设计》较系统地介绍了非线性最优化问题的基本理论和算法,以及主要算法的Matlab程序设计,主要内容包括(精确或非精确)线搜索技术、最速下降...

    最优化方法及其Matlab程序设计程序代码课件

    《最优化方法及其Matlab程序设计》较系统地介绍了非线性最优化问题的基本理论和算法,以及主要算法的Matlab程序设计,主要内容包括(精确或非精确)线搜索技术、最速下降法与(修正)牛顿法、共轭梯度法、拟牛顿法、信赖域方法、非线性最小二乘问题的解法、约束优化问题的最优性条件、罚函数法、可行方向法、二次规划问题的解法、序列二次规划法等。设计的Matlab程序有精确线搜索的0.618法和抛物线法、非精确线搜索的Armijo准则、最速下降法、牛顿法、再开始共轭梯度法、BFGS算法、DFP算法、Broyden族方法、信赖域方法、求解非线性最小二乘问题的L.M算法、解约束优化问题的乘子法、求解二次规划的有效集法、SQP子问题的光滑牛顿法以及求解约束优化问题的SQP方法等,此外,《最优化方法及其Matlab程序设计》配有丰富的例题和习题,并在附录介绍了Matlab优化工具箱的使用方法。《最优化方法及其Matlab程序设计》既注重计算方法的实用性,又注意保持理论分析的严谨性,强调数值方法的思想和原理在计算机上的实现,读者只需具备微积分、线性代数和Matlab程序设计方面的初步知识即可学习《最优化方法及其Matlab程序设计》, 《最优化方法及其Matlab程序设计》可供数学与应用数学、信息与计算科学专业的本科生,应用数学、计算数学、运筹学与控制论专业的研究生,理工科相关专业的研究生,对最优化理论与算法感兴趣的教师及科技工作者阅读。

    在这里插入图片描述
    更多精彩内容扫一扫关注微信公众号:
    在这里插入图片描述

    展开全文
  • 代码设计的六大原则

    万次阅读 2018-07-03 15:17:27
    现在主要针对的是代码设计的原则,在设计代码的时候,不能总是想到哪就打到哪,还需要有个大致的流程,否则写出来的代码也是很繁冗,不够简洁。对于自己的代码编程还没达到一个期望的程度,对于代码的设计。主要注意...

    开了博客,为了能够更好的学习,对于自己不了解和还没有掌握的知识加以归类,巩固以及加强。

    现在主要针对的是代码设计的原则,在设计代码的时候,不能总是想到哪就打到哪,还需要有个大致的流程,否则写出来的代码也是很繁冗,不够简洁。对于自己的代码编程还没达到一个期望的程度,对于代码的设计。主要注意以下的六大原则:

    单一职责

    一个类或者一个接口,最好只负责一项职责。

    开闭原则

    一个软件实体如类、模版和函数应该对扩展,对修改关闭;

    里氏替换原则

    子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法; 
    * 子类可以增加自己特有的方法; 
    * 当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更佳宽松; 
    * 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更加严格;

    依赖倒置原则

     低层模块尽量都要有抽象类或者接口,或者两者都有; 
    * 变量的声明类型尽量是抽象类或者接口; 
    * 使用继承时遵循里氏替换原则;

    接口隔离原则

    * 一个接口只服务于一个子模块或业务逻辑,服务定制; 
    * 通过业务逻辑压缩接口中的public方法,让接口看起来更加精悍; 
    * 已经被污染了的接口,尽量修改,如果变更风险太大,则用适配器模式进行转化; 
    * 根据具体的业务,深入了解逻辑,用心感知去控制设计思路;

    迪米特原则

    定义:一个对象应该对其他对象保持最少的了解,其核心精神就是:不和陌生人说话,通俗之意就是一个对象对自己需要耦合关联调用的类应该知道的少;这会导致类之间的耦合度降低,每个类都尽量减少对其他类的依赖。

    展开全文
  • 一般毕业论文会查重代码吗?

    千次阅读 2021-07-25 04:16:25
    很多人会问一般毕业论文会查重代码吗?一般毕业论文会查重代码吗?答案是显而易见的。只要它包含在纸张中,就需要对其进行检查。整个检查的步骤非常简单。您需要做的第一件事是找到一个用于检查重复项的软件。该软件...
  • 初始条件: 理论:.NET、Java、Linux、Android或Windows Phone环境, Oracle、SQLite、SQL Server、SQL Server CE或MySQL...3)系统测试 包括测试用例的描述、测试方法和测试结果。 4)设计的特点、不足、收获和体会。
  • 课程设计————学生管理系统(包含历代思路和代码) 一.前言 学生信息管理系统是我第一个独立完成的比较长的代码,也算是花费了一些心血,这个系统是我一点点把它从几百行的代码逐渐优化到上千行,功能...
  • 全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、随机化算法、线性规划与网络流等。书中既涉及经典与...
  • 毕业设计(源代码+论文+PPT)

    千次阅读 2020-12-29 22:47:47
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ...论文目录:asp java jsp php vb ,包含论文+源代码 一、选择一个你喜欢的 还有很多 二、实例 要的看我主页哦 ...
  • 领域驱动设计DDD是一种设计思想,它可以同时指导中台业务建模和微服务设计(中台本质是业务模型,微服务是业务模型的系统落地),领域驱动设计强调领域模型和微服务设计的一体性,先有领域模型然后才有微服务,而不是...
  • Java—重复调用的代码块—方法

    千次阅读 2020-07-31 15:30:07
    在面向对象的程序设计中,方法是一个很重要的概念,体现了面向对象三大要素中“封装”的思想。“方法”又被称为“函数”,在其他的编程语言中都有这个概念,其重要性也是不言而喻的。 在本质上,一个类描述了两件...
  • 摒弃传统的手工一行一行敲代码,将业务进行细化,用业务驱动整个平台,实现快速产品研发。 目前设计了一个基础库和一个业务库,业务库的数据结构暂时没有做,后期进行业务领域创建的时候就可加上了。整个基础库包含...
  • 代码设计时应遵循哪些原则

    千次阅读 2018-09-06 13:59:58
    1提高编码质量,代码可读性和可维护性。 2代码编写规范 2.1 删除所有无用代码 2.2 必须给代码添加注释,一个类的注释字数不得小于代码的百分之20% 2.3 建议遵循30秒原则。如果另一个程序员无法在三十秒内无法...
  • DDD 分层架构包含用户接口层、应用层、领域层和基础层。通过这些层次划分,我们可以明确微服务各层的职能,划定各领域对象的边界,确定各领域对象的协作方式。。 DDD的分层架构如图:从上到下依次是:用户接口层、...
  • javascript高级程序设计第三版源代码

    千次下载 热门讨论 2013-08-01 17:27:15
    javascript高级程序设计第三版源代码包括了对文件流的操作等高级应用。。。
  • C++设计模式(Design Pattern)范例源代码

    热门讨论 2009-01-15 11:17:20
    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...
  • 总第440篇2021年 第010篇设计稿(UI视图)转代码是前端工程师日常不断重复的工作,这部分工作复杂度较低但工作占比较高,所以提升设计稿转代码的效率一直是前端工程师追求的方向之一。此前...
  • 代码条件下的可视化表单设计

    千次阅读 2021-11-10 11:07:00
    表单按钮,包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。 在LeaRun.Java低代码平台下,表单相关设计集合到一个可视化...
  • 《重构:改善既有代码设计》读书笔记

    万次阅读 多人点赞 2015-04-10 15:54:15
    一个类中的两个方法有重复代码,那么一定可以通过抽取方法的方式将重复代码放到另一个方法中以供调用;两个互为兄弟的子类中如果有重复代码可以将其重复代码抽取到父类中;两个没有关系的类中如果有重复代码,那么...
  • 第一章-宝箱抽奖模块与代码设计(一)

    万次阅读 多人点赞 2016-08-24 14:53:31
    宝箱抽奖模块与代码设计(一)宝箱抽奖模块与代码设计一 无聊的开场白 每篇文章的背后都有个高大上的故事 怎样的代码才算是好的代码 简单的需求 简单的代码Java实现 一些基本的类 玩家类 抽奖服务类 先大致确定抽奖...
  • 大话设计模式(附带代码)

    千次阅读 2019-01-17 09:02:02
    链接:https://pan.baidu.com/s/1SLM3ozXz9JaFWQWHcoKNvg...提取码:qh5a  注:本书使用.NET C#语言编写,但C++及JAVA开发人员阅读无难度,有附带代码可供理解 该链接包含大话设计模式pdf文档跟书中响应章节对应代码...
  • 模块化设计是现在代码开发非常重要的思想,上一篇我已经完成了距离检测和报警模块,后续将补充遥控、陀螺仪、上位机、低通滤波、PID等代码设计,因为这些代码我已经在stm32基础篇中逐个完成,现在我要做的是将之前的...
  • 校园篮球网页设计网页知识点应用网页作品介绍网页HTML代码网页效果预览网页源地址 网页知识点应用 DIV CSS布局、网页背景图片、图片轮播切换、CSS3简鼠标经过放大及动态载入效果、CSS3圆角及背景透明效果、鼠标经过...
  • 《重构 改善既有代码设计 1》重构原则

    千次阅读 热门讨论 2020-12-20 15:39:01
    重构 既有代码设计,一本经典神书,两年前入手,一年前看了一半,感觉一般般,今天起,再次拜读,希望会有不一样的收获! /** * @startTime 2020-12-16 23:22 * @endTime 2020-12-16 23:59 * @startPage 1 * ...
  • 一、领域驱动设计两大设计:战略设计和战术设计 二、理解和分析领域+子域+核心域+通用域+支撑域 三、理解和分析界限上下文,定义领域边界 四、理解和分析实体和值对象 五、理解和分析聚合思想:聚合和聚合...
  • JAVA图形用户界面设计与实例 (源代码)

    千次下载 热门讨论 2007-05-15 11:10:25
    JAVA图形用户界面设计与实例 源代码 下载
  • 说明:本文是《大话设计模式》的学习记录及结合网上相关信息编写,原书代码例子采用C#编写,本文采用Java稍加改写。如有不当,欢迎指正,共同进步。   1.工厂方法模式概述:  工厂方法模式(Pattern:Factory ...
  • 在类或者在方法中,直接...一般我们是不会直接使用局部代码块的,只不过我们会结合if、while、for、try等关键字联合,表示一块代码区域; 初始化代码块(构造代码块):直接定义在类中;每次创建对象的时候都会执行初始
  • 代码审查的四种方式

    万次阅读 2019-05-07 10:33:16
    没有人能保证他产出的代码一定是完美的。下文阐述了4种主流的代码审查(code review)类型,相信作为专业的开发人员,你应该都了解它们! 每个专业的软件开发者都知道,代码审查是任何正式开发过程中的必要环节。但...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,943,306
精华内容 777,322
关键字:

代码的设计方法一般包括