精华内容
下载资源
问答
  • 代码设计时应遵循哪些原则

    千次阅读 2018-09-06 13:59:58
    2.3 建议遵循30秒原则。如果另一个程序员无法在三十秒内无法知道你的函数在做什么,如何做以及为什么要这样做,那么说明你的代码是难于维护的,需要得到提高。 2.4 一个函数的代码长度不允许超过100行,超过一百行...

    1提高编码质量,代码可读性和可维护性。

    2代码编写规范

    2.1 删除所有无用代码
    2.2 必须给代码添加注释,一个类的注释字数不得小于代码的百分之20%
    2.3 建议遵循30秒原则。如果另一个程序员无法在三十秒内无法知道你的函数在做什么,如何做以及为什么要这样做,那么说明你的代码是难于维护的,需要得到提高。
    2.4 一个函数的代码长度不允许超过100行,超过一百行的函数建议在不破坏原子性的基础上进行拆分。
    2.5 变量都应在方法或者类的头部集中定义
    2.6 保证一行代码只做一件事
    2.7 使用括号来控制操作符的运算顺序,以免使用java默认的操作符优先级顺序。
    2.8 代码格式化:对代码进行格式化,再进行提交。
    2.9 接口不允许没有方法或者变量的声明

    1. 命名规范
      3.1 各种标识符的命名要使用有实际意义的英文单词或者英文单词缩写,缩写词及英文单词要收录在项目的简写词汇表中。切忌使用阿拉伯数字和拼音进行命名。
      3.2 类名:首字母大写,每个单词首字母都需要大写。
      3.3 方法名:首字母小写,其余单词首字母都需大写。
      3.4 全局变量,和常量名称要求全部字母大写。
      3.5 参数名称与局部变量基本相同,区别在于参数名称需要加上冠词a ,an 或者在单词结尾以s结束。

    2. 注释规范
      4.1 注释需要注意的事项:
      ★注释应该用中文清晰表达意思,应该是程序看起来更清晰,更容易理解
      ★注释要尽量简明,避免装饰性的注释。
      ★注释不但要说明做什么,还应当说明为什么要这样做。最好先写注释表明要做什么,再进行编码。

    4.2 类的注释
    ★类的用途,目的。包括其他人感兴趣的介绍。
    ★已知bug,当然最好是修改好所有的错误,但有时可能暂时没有办法修改,或者没有时间修改。
    ★开发和维护该类的历史列表,记录每一次修改的作者,日期,修改的内容。
    ★列举类的各种稳定状态,说明调用成员函数使类的状态产生的变迁(可选)。
    ★同步问题(可选)
    ★对主要的算法必须加以说明,主要流程必须给予引导性说明
    标准格式:
    如果对已经版本话的类进行了修改,需要按照如下格式为每一次修改附加修改历史记录:
    // 修改人 + 修改日期
    // 修改说明 范例:

    // 李四 2010/07/02
    // 添加错误数据修改后继续批量保存的处理函数 saveBatch(
    @Bind(key = “itemParams”, defaultValue = “”) String itemParams,
    @Bind(key = “pid”, defaultValue = “”) String pid)。
    // 王小二 2010/07/02

    4.3 接口注释:
    ★接口的注释风格基本与类的注释风格相同;
    ★在别人使用接口之前,必须了解接口所包含的概念。检验一个接口是否应该定义的简单方法是:你是否能★够容易的描述接口的用途;
    ★接口如何应当和不应当被使用。开发者需要知道该接口如何被使用,也希望知道该接口不能被怎样使用。

    4.4 函数的注释
    ★函数头注释必须包括:函数执行了什么功能,为什么要这样处理;函数处理过程中对对象的哪些属性
    ★可能进行更改;函数执行前后,对象的状态;
    ★比较、循环等控制结构加注释(可选);
    ★在代码的功能并非一目了然的情况下,应当说明为什么要这样做;
    ★局部变量必须加注释;
    ★复杂难写的代码必须加注释;

    4.5类属性的注释:
    ★描述域的用途。使别人知道如何去使用它;
    ★对于有着复杂事物规则的域,可以加入范例来说明。有时候一个简单的小例子,抵的上千言万语;

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

    万次阅读 2016-07-02 02:13:22
    由于职责P1需要发生改变而需要修改T类,就可能导致原来运行正常的职责P2功能发生故障。解决方法:遵循单一职责原则。分别建立新的类来对应相应的职责;这样就能避免修改类时影响到其他的职责; 当遇到职责扩散的...

    单一职责原则 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. 多重继承分离,通过接口的多重继承来实现客户的需求;


    迪米特法则

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


    合成复用原则

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

    开闭原则

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

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

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

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

    展开全文
  • 对JAVA代码设计六大原则的理解

    千次阅读 2017-10-13 23:54:16
    对JAVA代码设计六大原则的理解记得一次去面试的时候,面试官问了我好几个问题,很尴尬,好几个都没能流利得回答上来。对其中一个问题比较深刻,他当时是这样问我的:说下代码优化的6大原则,我当时一听,在脑子...

    对JAVA代码设计六大原则的理解

    记得有一次去面试的时候,面试官问了我好几个问题,很尴尬,好几个都没能流利得回答上来。对其中有一个问题比较深刻,他当时是这样问我的:说下代码优化的6大原则,我当时一听,在脑子里快速想了下,很遗憾,不知道。今天想起了这个事,决定一定要搞定这个问题,一是了解这个问题,其次也是为下一次面试做准备
    在网上搜了下后,知道了主要是以下六大原则:

    • 单一职责
    • 开闭原则
    • 里氏替换原则
    • 依赖倒置原则
    • 接口隔离原则
    • 迪米特法则

    了解了后,记得去年在QQ群里下的一本叫《您的设计模式》电子书上有见过这几个原则。对于那本书的记忆,目前只记得当时一心都在设计模式上,再加上那本书写得真心不错,针对每一种设计模式,都用了浅显有趣的故事来讲解的,很方便理解,看到了后面有介绍这几种原则时,只在脑子里过了一遍,并没有对此进行深入的思考,而没想到,在面试时,居然用到了。面试时没能答出,顿时让我体会到了“书到用时方恨少”的真谛。

    看了下网上的解释后,结合着以往的的开发编码经验,总结下我对这六大原则的理解

    单一职责原则(Single Responsibility Principle)

    顾名思义,有点物以类聚,人以群分的感觉。一个类或一个方法应该只负责它应该负责的东西。比如有一个类:loginController那么在此类中,就只写一些关于登录的相关代码,不要在这个类里又写和登录不相关的功能点,这样很便于代码的维护

    开闭原则(Open Close Principle)

    仍然从字面意思中理解,主要是开闭这两个字。
    开:对于代码的功能扩展是开放的
    闭:对于已经定好的功能点,对于以后的修改应该是出于封闭的
    总的来说,就是在代码设计上,要对功能的扩展提供可扩展的空间,如spring的AOP的实现就很方便,对于处理可以一直扩展;又比如责任链模式,对于某一职责提供可预留的空间给将来的功能点,spring mvc中的interceptor、web中的filter、netty中的channel等都是很好的设计;
    而对于已写好的代码要做好闭,如用private修饰,阻止外界调用,用final修饰不让其重写,比如单例模式时,常用private修饰构造函数,避免其他类又生成新的对象

    里氏替换原则(Liskov Substitution Principle)

    这个名字,刚开始我觉得怪怪的。我想:替换原则就替换原则嘛,为啥还叫个里氏原则。在了解了后,才知道这个原则原来是由2008年图灵奖得主,2004年约翰·冯诺依曼奖得主的麻省理工学院教授芭芭拉·利斯科夫(Barbara Liskov)在1988年提出的,只看她的获奖经历,也不得不佩服了,(图灵奖,冯诺依曼奖这种在大学计算机课程中常看到的奖项,觉得顿时好厉害好强的感觉)让我也觉得这个替换原则用她的名字来命名非常合适,毕竟是大人物!
    里氏替换原则,我觉得不好从字面意思来理解了,看了好几遍解释后,我才慢慢消化这个原则。此原则是这样说的:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.
    翻译下:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型
    这段话我理解了半天,感觉不愧是外国人发明的,确实有点打脑壳。其实就是说:任何基类可以出现的地方,子类一定可以出现
    我是这样理解的:对于一个拥有继承关系的类中,父类换成这个类的子类后,对以前的功能没有任何影响,也就是子类不要去重写(overWrite)父类的非抽象(abstract)方法。比如设计模式中的模板方法模式,设计时把模板方法定义为final,从而避免子类对方法的重写

    依赖倒置原则(Dependence Inversion Principle)

    依赖于抽象而不依赖于具体。不与具体类交互,而与具体类的上层接口交互。
    这个比较好理解,平时在开发JAVA EE这程序中用到的也最多。也就是所谓的面向接口编程
    比如定义一个UserService接口,其实现类为UserServiceImpl,而我们需要调用时,都是这样写的UserService userService = new UserviceImpl(),或通过Spring的IOC注入进去对象。这种设计在spring的IOC框架中得到了充分体现,当然系统的许多集合类也是这样的,又如Set set = new TreeSet();List list = new ArrayList()等

    接口隔离原则(Interface Segregation Principle)

    类间的依赖关系应该建立在最小的接口上
    接口隔离原则感觉和单一职责原则很类似,都强调了物以类聚的概念。但其针对的对象与维度不一样,单一职责主要是针对于一个类的,强调了类的功能。而接口隔离原则有更细化的感觉。

    迪米特法则(Demeter Principle)

    又叫作最少知道原则
    这个名字刚开始也让我觉得怪怪的,迪米特?什么东东。
    想要了解这个法则,就要先了解迪米特(Demeter的音译)。在网上查阅了相关的资料后,并没有找到它具体的由来。在百度里看到了这个词条:德墨忒尔(Demeter)是希腊神话中司掌农业的谷物女神,亦被称为丰收女神。
    女神嘛,你懂的,就是很高端大气上档次,总能给人一种很难接近的感觉,熟悉而又陌生,只知道她的外表,不知道内在(个人理解,纯胡编乱造)
    迪米特原则也主要是这个意思:一个对象应当对其他对象有尽可能少的了解,不和陌生人说话
    其实现在许多框架中也比较多了,比如SpringBoot就充分体现了这种原则,只暴露出几个类和方法,对于其实现的细节进行了很好的封装,这点又体现了开闭原则中的闭的特点。设计模式中的门面模式(Facade Pattern)也很好的体现了这一原则。


    对上是我对JAVA代码设计六大原则的个人理解,其中难免有许多理解不当的地方,往各种指正!在下感激不尽!

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

    2020-06-28 17:29:03
    开闭原则 单一职责 依赖倒置 最少知识 里氏替换 接口隔离 组合/聚合复用
    1. 开闭原则
    2. 单一职责
    3. 依赖倒置
    4. 最少知识
    5. 里氏替换
    6. 接口隔离
    7. 组合/聚合复用
    展开全文
  • 代码设计的六大原则

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

    千次阅读 2011-06-16 16:44:00
    1,OCP(Open-Close Principle)开闭原则Software entities should be open for extension,but closed for modification,(在设计一个模块的时候,应当使这个模块可以在不被修改的前提下扩展)。对扩展开放open,对修改...
  • 代码设计的一些原则

    千次阅读 2010-12-19 23:31:00
    1,OCP(Open-Close Principle)开闭原则 2,Liskov Subsitution Principle(LSP)里氏代换原则 3,Dependency Inversion Principle(DIP)依赖倒转原则 4,Interface Segregation Principle(ISP)接口隔离原则 5,...
  • 领域驱动实践总结二:架构分析与代码设计 领域驱动设计DDD是一种设计思想,它可以同时指导中台业务建模和微服务设计(中台本质是业务模型,微服务是业务模型的系统落地),领域驱动设计强调领域模型和微服务设计的一体...
  • 代码设计的几个基本原则

    千次阅读 2014-06-27 18:52:16
    Software entities should be open for extension,but closed for modification,(在设计一个模块的时候,应当使这个模块可以在不被修改的前提下扩展)。 对扩展开放open,对修改关闭close。 如何实现?1,抽象化是...
  • 代码设计的几个基本原则

    千次阅读 2017-04-06 17:32:14
    Software entities should be open for extension,but closed for modification,(在设计一个模块的时候,应当使这个模块可以在不被修改的前提下扩展)。 对扩展开放open,对修改关闭close。 如何实现?1,抽象化是...
  • 代码设计

    千次阅读 2018-04-15 21:08:20
    1. 单一职责原则(SRP) 定义:就一个类而言,应该仅一个引起它变化的原因。 从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就等于把这些职责耦合在一起...
  • 设计原则

    千次阅读 2019-11-07 13:51:50
    本文章只是介绍与讲解各种设计原则的基本概念,以便以后复习使用。具体的原则在代码中的使用我打算在以后整理各种设计模式的时候,再讲讲。
  • 领域驱动设计DDD是一种设计思想,它可以同时指导中台业务建模和微服务设计(中台本质是业务模型,微服务是业务模型的系统落地),领域驱动设计强调领域模型和微服务设计的一体性,先领域模型然后才微服务,而不是...
  • 七条原则实现简单的代码设计

    千次阅读 2011-12-23 01:00:06
    1. 命名(变量名,参数名,函数名,也包括文件名)应当体现概念...3. 如果一个函数,体现的是现实业务中的一个大概念,但是其内部若干个代码块,每个代码块体现了一个更细粒度的小概念,  则建议将这些代码块抽取
  • 一、领域驱动设计两大设计:战略设计和战术设计 二、理解和分析领域+子域+核心域+通用域+支撑域 三、理解和分析界限上下文,定义领域边界 四、理解和分析实体和值对象 五、理解和分析聚合思想:聚合和聚合...
  • 简介:在日常的开发和设计过程中,大家对技术设计上的一些问题往往会面临很多的选择,不同的人会不同的选择。本文介绍的就是我在工作中遇到的一些问题而总结和使用到的一些常用原则。 不管我一生中取得了...
  • 六大设计原则之开闭原则

    万次阅读 多人点赞 2016-08-28 10:32:38
    开闭原则的定义开闭原则是java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则定义如下:Software entities like classes,modules and functions should be open for extension but ...
  • 面向对象设计原则

    万次阅读 2018-09-28 15:36:19
    面向对象的软件设计中,23种经典的设计模式,是一套前人代码设计经验的总结,如果把设计模式比作武功招式,那么设计原则就好比是内功心法。常用的设计原则有七个,下文将具体介绍。 七种设计原则简单归纳如下 ...
  • 设计模式的七大原则: 单一职责原则SRP(Single Responsibility Principle) 就一个类而言,应该仅一个引起它变化的原因。 开放-关闭原则OCP(Open-CLosed Principle) 一个软件的实体应该对扩展开放,对修改关闭。 ...
  • 《重构 改善既有代码设计 1》重构原则

    千次阅读 热门讨论 2020-12-20 15:39:01
    重构 既有代码设计,一本经典神书,两年前入手,一年前看了一半,感觉一般般,今天起,再次拜读,希望会不一样的收获! /** * @startTime 2020-12-16 23:22 * @endTime 2020-12-16 23:59 * @startPage 1 * ...
  • 项目设计原则

    2018-12-04 13:21:58
    本篇文章围绕我在项目开发过程中的设计原则,研究如何把代码写的更加优雅。 本文研究两个内容: 1、如何把代码写的更加优雅、统一化; 2、如何养成一种代码设计风格。 1、项目分为三层,rest、...
  • 设计原则硬核干货

    千次阅读 热门讨论 2021-05-21 22:39:44
    很多人都过编写代码时候无所适从,无法写出十分优雅,高效的代码。 也有些人在翻阅设计模式的时候摸不透各种奇奇怪怪的模式到底是为了做什么,为什么这么设计的。 一篇文章带你领略 设计模式的核心:设计原则
  • 设计大型程序的时候,您必须时刻留心不同设计选项对诸如性能和可扩展性这样的特征的影响。随着软件产品的日渐复杂及其无所不在的部署,软件的“可测试性”也成了更重要的考虑事项。 彻底测试代码的重要性是显然的...
  • 数据库设计原则

    千次阅读 2019-06-09 09:52:33
    一,数据库设计原则 1. 原始单据与实体之间的关系  可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对一的...
  • 设计原则简介 设计原则是指导我们代码设计的一些经验...对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。主要包括六大基本原则; 一,单一职责原则 简称:SRP 二,开闭原...
  • 因此,高内聚、低耦合是一个软件系统设计中必须遵循的基本原则。  所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一...
  • 面向对象设计的七大设计原则详解

    万次阅读 多人点赞 2018-10-03 12:32:21
    面向对象的七大设计原则 文章目录面向对象的七大设计原则简述七大原则之间的关系一、开闭原则(The Open-Closed Principle ,OCP)概念理解系统设计需要遵循开闭原则的原因开闭原则的实现方法一个符合开闭原则的...
  • 设计模式(三)——面向对象设计原则

    千次阅读 多人点赞 2019-10-16 07:28:15
    设计模式需要遵循基本的软件设计原则。可维护性(Maintainability)和可复用性(Reusability)是衡量软件质量的重要的两个属性: 可维护性:软件能够被理解、改正、适应及扩展的难易程度 可复用性:软件能够被复用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 264,503
精华内容 105,801
关键字:

代码设计的原则包括