欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

控制变化 CAD加密 的范围

点击: 次  来源:宝鼎软件 时间:2017-12-18

原文出处: 肖汉松

媒介

最近在看《代码大全》,昆山软件开发,可以说是一本软件开拓的百科全书,出格厚,可是干货也许多。平时写代码,代码类型是一个最低的要求(许多老代码连最低要求都达不到),为什么要这样划定代码要这么写,而不是那么写?这是一个值得深究的问题。而不是说我照着代码类型写代码就算完了,高质量的代码是一个专业工程师的追求。要知其然知其所以然,最近写发票理会的代码,因为涉及带理会PDF的算法,巨大度较量高,所以花了许多时间在重构,学乃至用的时候积聚了一些心得。

信息埋没原则

信息埋没是面向工具设计的一个原则,是对封装和模块化的一个更高维度的归纳综合。从Java的整个会见限制设计就浮现了信息埋没的原则,各类会见修饰符:public,protect,private,在类设计的时候,我们就要抉择什么袒露给外部,什么埋没起来。

举一个例子下面的代码暗示一个有自增ID的Person类。

public class Person {
    int id;
    private static int G_MAX_ID = 0;
    public Person() {
      this.id = ++G_MAX_ID;
    }
}

上面的类设计有什么问题呢?它违反了信息埋没的原则,直接将ID分派的方法袒露了,这会给后头的维护带来许多问题:当你想给id的范畴做出限制的时候怎么办?当你在所有代码中利用++G_MAX_ID分派ID时溘然需要修改ID分派的算法怎么办?是不是需要去改所有++G_MAX_ID呈现的处所?更好的设计是将ID的分派算法埋没起来。

public class Person {
    int id;
    private static int G_MAX_ID = 0;
    public Person() {
      this.id = NewId();
    }
    private int NewId() {
      return ++G_MAX_ID;
    }
}

咋一看只是将++G_MAX_ID写到一个要领内里罢了,可是它埋没了ID分派的算法,让挪用者不需要体贴内里的实现,同时节制了变革,不管ID分派算法怎么变,都不会影响其他的代码。挪用者相识的信息越多,受到的影响就越大,信息埋没可以低落巨大度,节制变革的范畴。

上面的例子只是信息埋没的一个简朴应用,下面我们来举几个其他的应用例子:

  • 为什么不推荐利用邪术值(即未经界说的常量)?:这个明明违反了信息埋没的原则,当你将字面量直接写在代码内里时,就将信息直接袒露了,后头需要修改的时候,一旦少改了某个处所的字面量,bug就呈现了。
  • 轮回依赖(即A挪用B,B挪用A的环境):类或要领之间的轮回依赖会粉碎信息埋没,一个很直接的影响就是在测试的时候,A,B都需要同时筹备好才气举办测试,而无法mock任意一方。
  • 利用全局变量:这个就不消说了,所有人都可以会见你的时候信息就袒露无疑了,全局变量能不消就不消。
  • 思量机能损失:有时候我们为了一些机能上的思量就粉碎信息埋没原则,昆山软件开发,将一些变量全局化,这样机能提高得不多,维护本钱却上升不少,完全是得不偿失。
  • 最后总结一下信息埋没的长处:

  • 埋没信息即埋没了巨大度,低落了编程的承担。
  • 埋没信息即埋没了底层变革,以便于在局部节制变革。
  • 一些不太常见的编程能力

    函数(function)与进程(procedure)的选择

    我们先来看看函数与进程区别:

  • Function:有返回值的要领
  • Procedure:没有返回值的要领
  • 平时我们编程其实没有太区别函数与进程,什么时候用函数,什么时候用进程其实没有过多的思量,感受都可以用。一个选择的法则就是当你的要领的目标是想返回跟你要领名称相符的值的时候用函数,不然用进程

    举个例子,我看过许多XXProcessor接口内里的要领都是XX process(),严格来讲,这样的定名是不切合上面的法则的,昆山软件开发,process是一个没有寄义的定名,可是却有返回值,假如没有返回值那它的定名才是公道的。

    虽然了,上面的法则仅供参考,世事无绝对,详细环境详细阐明,当你不清楚用函数照旧用进程的时候,可以参考这个法则。

    利用boolean值来给措施做注释

    相信各人看到一个if语句有许多条件的时候城市出格头痛,因为很难领略。譬喻下面的例子:

    if ( ( elementIndex < 0 ) || ( MAX_ELEMENTS < elementIndex ) || elementIndex == lastElementIndex) {
      do....
    }

    但假如换成下面的写法,用boolean值的名字来给if语句注释,看起来就很好领略了。

    finished = ( ( elementIndex < 0 ) || ( MAX_ELEMENTS < elementIndex ) );
    repeatedEntry = ( elementIndex == lastElementIndex );
    if ( finished || repeatedEntry ) {
    ...
    }

    总结