10 códigos de inventario de remodelación consejos

Esta vez dejamos a un lado la fuente de la máquina virtual Java de estas cosas relativamente de bajo nivel, LZ para explorar con ustedes algunas refactorización código de consejos, que proviene en parte de los libros que, en parte, de proyecto de mantenimiento LZ entre una serie de experiencias prácticas. Si los amigos mensaje de simios han utilizado esta técnica, también desean participar en el artículo entre su poca experiencia, poca experiencia para compartir con los demás, también se puede utilizar para trazar el impacto de su propia definición de la zona de aterrizaje, LZ no es muy bienvenida.

Reconstrucción del camino hay muchos, relativamente hablando, para cubrir el importe del artículo natural no se menciona en absoluto, LZ aquí sólo puede hacer algunos bastante a menudo utilizan algunas de las tácticas, como parte de la forma más alta gama, que son en interés se pueden encontrar algunos libros especializados cubiertos.

Hay también que, debido a la zona de aterrizaje está haciendo el desarrollo de Java, por lo que algunos consejos de remodelación pueden lenguaje JAVA, o estrechamente vinculados con los lenguajes orientados a objetos, pero la mayoría de las habilidades, si se trata de lenguaje orientado al proceso, o el lenguaje orientado a objetos , todo puede ser común entre sí.

Ado, Echemos un vistazo a las tablas de clasificación habilidades prácticas reconstruyó.

Nº 1: Código de refinación de la duplicación

La duplicación de código de razón es uno de los más grandes de reconstrucción manera poco, para llevar a cabo esta reconstrucción no tiene que decir nada más. Tiene muchos beneficios obvios, como el código totales muy reducido, fácil de mantener, el código más legible está estructurado.

Su objetivo es encontrar código duplicado para completar el código entre un determinado sub-funciones, por favor no dude en encontrar más adelante moverlo al método apropiado entre ellos y se almacena en la clase apropiada.

pequeño ejemplo

class BadExample {

    public void someMethod1(){
        //code
        System.out.println("重复代码");/* 重复代码块 */
        //code
    }

    public void someMethod2(){
        //code
        System.out.println("重复代码");/* 重复代码块 */
        //code
    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    public void someMethod1(){
        //code
        someMethod3();
        //code
    }

    public void someMethod2(){
        //code
        someMethod3();
        //code
    }

    public void someMethod3(){
        System.out.println("重复代码");/* 重复代码块 */
    }

}

Nº 2: largo proceso de segmentación

Dividido por el proceso largo, de hecho, a veces abstracto y la duplicación de código está estrechamente relacionada, a menudo repetido en el curso de nuestro código de refinación, sin saberlo completado una fracción de un largo proceso. Si después de extraer la mayor parte del código duplicado, aún conserva algunos de método largo, entonces debemos poner fin a estos largos métodos especiales para tratar.

Pero una cosa es digno de mención, ya que cuando nos separamos de modo considerable la mayoría de ellos en contra de algunas de las funciones que la división, así que tenemos que dar a cada niño una función del nombre del método correcto, es muy importante. Podemos decir que el método puede dar un buen nombre, a veces puede reflejar el nivel aproximado de un simio programa.

pequeño ejemplo

class BadExample {

    public void someMethod(){
        //function[1]
        //function[2]
        //function[3]
    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    public void someMethod(){
        function1();
        function2();
        function3();
    }

    private void function1(){
        //function[1]
    }

    private void function2(){
        //function[2]
    }

    private void function3(){
        //function[3]
    }

}

No.3: Optimización de bifurcación condicional anidada (1)

 Un gran número de bifurcación condicional anidada es prohibitivo código muy fácil, que debe tratar de evitar este código. Aunque los principios estructurales han sido decir que una función puede tener sólo una salida, pero en un gran número de bifurcación condicional anidada tal, hacernos olvidar esta llamada regla de ella.

 Hay un término llamado declaración profesional de la salud, se puede tratar esta sentencias condicionales anidadas terribles. Su idea central es que la situación no cumple con ciertas condiciones frente al método, y rápidamente saltar método, a fin de no afectar a la parte posterior del juez. Después de la cirugía, el código se verá muy claro, dar el siguiente LZ darle un ejemplo clásico, se puede juzgar su propia mirada a esto de dos maneras, que le hacen parecer un poco más claro.

pequeño ejemplo

class BadExample {

    public void someMethod(Object A,Object B){
        if (A != null) {
            if (B != null) {
                //code[1]
            }else {
                //code[3]
            }
        }else {
            //code[2]
        }
    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    public void someMethod(Object A,Object B){
        if (A == null) {
            //code[2]
            return;
        }
        if (B == null) {
            //code[3]
            return;
        }
        //code[1]
    }

}

No.4: optimizado de bifurcación condicional anidada (2)

Aquí dijeron anidada bifurcación condicional y un poco diferente de lo anterior, no se pueden utilizar para optimizar el estado de salud, pero debe ser la bifurcación condicional y la fusión, con el fin de lograr el propósito del código claro. También puede verse a partir de los dos, de bifurcación condicional anidada que debe evitarse en la codificación, se reduciría en gran medida la legibilidad del código.

A continuación sensación favor embargo mono desconocida Amigos Li mirada que es típico de los pequeños ejemplos.

pequeño ejemplo

class BadExample {

    public void someMethod(Object A,Object B){
        if (A != null) {
            if (B != null) {
                //code
            }
        }
    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    public void someMethod(Object A,Object B){
        if (A != null && B != null) {
            //code
        }
    }

}

No.5: suprimir las variables temporales de una sola vez

Vive a menudo utilizamos palillos desechables, esta es la destrucción de los árboles. Sin embargo, en el programa entre las variables temporales de una sola vez, no sólo para la realización de pequeñas violencia, es una profanación de la legibilidad del código. Por lo tanto, necesitamos algo de una sola vez la cirugía variables temporales.

pequeño ejemplo

class BadExample {

    private int i;

    public int someMethod(){
        int temp = getVariable();
        return temp * 100;
    }

    public int getVariable(){
        return i;
    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    private int i;

    public int someMethod(){
        return getVariable() * 100;
    }

    public int getVariable(){
        return i;
    }

}

Nº 6: eliminación de la lista de parámetros es demasiado larga

Por alguna manera de pasar un gran número de parámetros, la búsqueda de un código limpio mono programa, es inaceptable. Podemos tratar de encapsular los parámetros pasados ​​al método como un objeto, con el fin de eliminar larga lista de parámetros. En la mayoría de los casos, cuando se trata de encontrar un objeto tal, es a menudo ya existen, por lo que en la mayoría de los casos, no es necesario realizar un trabajo extra.

pequeño ejemplo

class BadExample {

    public void someMethod(int i,int j,int k,int l,int m,int n){
        //code
    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    public void someMethod(Data data){
        //code
    }

}

class Data{

    private int i;
    private int j;
    private int k;
    private int l;
    private int m;
    private int n;

  //getter&&setter

}

No.7: extracto o herencia de clases constantes de jerarquía

El propósito de reconstrucción es eliminar algunos de los número mágico o constantes de cadena, etc., el número mágico de los inconvenientes derivados de Ni que decir tiene, crearía confusión en la intención del programa. En cuanto a la eliminación del tipo de las constantes de cadena, etc., más beneficios que el mantenimiento conveniente. Debido a que sólo necesitamos modificar una constante, se puede completar todas las modificaciones en el código del programa que utiliza la constante de.

Por cierto, tal situación similar a la más común y es la acción de la clase base, estas constantes INPUT, LIST, de éxito como extracción.

pequeño ejemplo

class BadExample {

    public void someMethod1(){
        send("您的操作已成功!");
    }

    public void someMethod2(){
        send("您的操作已成功!");
    }

    public void someMethod3(){
        send("您的操作已成功!");
    }

    private void send(String message){
        //code
    }
}

/* ---------------------分割线---------------------- */

class GoodExample {

    protected static final String SUCCESS_MESSAGE = "您的操作已成功!";

    public void someMethod1(){
        send(SUCCESS_MESSAGE);
    }

    public void someMethod2(){
        send(SUCCESS_MESSAGE);
    }

    public void someMethod3(){
        send(SUCCESS_MESSAGE);
    }

    private void send(String message){
        //code
    }

}

No.8: Let clase proporciona métodos deberían proporcionar

Muchas veces, a menudo operan la mayor parte de las propiedades de una clase para obtener un resultado final que queremos. Esta vez, nos debe hacer esta clase hace lo que debe hacer, no debe permitir que hagamos en su nombre. Y la mayoría de las veces, este proceso con el tiempo se convertirá en una fuente de código duplicado.

pequeño ejemplo

class BadExample {

    public int someMethod(Data data){
        int i = data.getI();
        int j = data.getJ();
        int k = data.getK();
        return i * j * k;
    }

    public static class Data{

        private int i;
        private int j;
        private int k;

        public Data(int i, int j, int k) {
            super();
            this.i = i;
            this.j = j;
            this.k = k;
        }

        public int getI() {
            return i;
        }

        public int getJ() {
            return j;
        }

        public int getK() {
            return k;
        }

    }

}

/* ---------------------分割线---------------------- */

class GoodExample {

    public int someMethod(Data data){
        return data.getResult();
    }

    public static class Data{

        private int i;
        private int j;
        private int k;

        public Data(int i, int j, int k) {
            super();
            this.i = i;
            this.j = j;
            this.k = k;
        }

        public int getI() {
            return i;
        }

        public int getJ() {
            return j;
        }

        public int getK() {
            return k;
        }

        public int getResult(){
            return i * j * k;
        }

    }

}

Nº 9: Dividir la clase larga

Esta técnica es en realidad parte de una habilidad muy útil, pero debido a su relativamente alto grado de dificultad, por lo que es LZ fila inmediatamente posterior. Para esta técnica, las técnicas de LZ tan difícil como anteriormente, para dar una descripción del problema que es ejemplo simple y muy fácil pequeño, porque no es sólo el medio pequeños.

La mayoría de las veces, el foco debe dividir una clase se centró en las propiedades de la clase anterior. Dos lotes divididos hacia fuera propiedad puede ser lógicamente independiente, y en el que el código, utilizando dos lotes eran atributos concentradas son también entre ciertos métodos. Si en realidad hay algunos atributos están presentes en dos lotes dentro del método split, puede ser resuelto por esta transferencia parámetro dependiente de la forma.

Dividir la clase es un proyecto relativamente grande, después de todo, una categoría a menudo se ha utilizado en un programa con mucha clase, por lo que la dificultad de la reconstrucción es bastante grande, hay que tener cuidado y hacer las pruebas adecuadas

Nº 10: jerarquía de herencia de extracción duplicada a unos atributos y métodos de la clase padre

La mayoría de las veces esta técnica requiere suficiente juicio, muchas veces, este se está moviendo realmente en el proceso de Template Method. LZ no puede darle un ejemplo aquí, la razón es porque es un pequeño ejemplo no tendría sentido, no es más que subclase tiene la misma propiedad o método, y luego la propiedad de repetición o método para eliminar la clase padre en subclases de ellos.

A menudo, este tipo de reconstrucción no será un proyecto pequeño, así que éste es similar a la reconstrucción de la novena, necesitamos atención y las pruebas adecuadas. Y lo que necesita suficiente para confirmar estos extractos a la propiedad de la clase padre o método, debe ser la subclase común de tiempo antes de poder utilizar esta técnica.

conclusión

Debido LZ presente trabajo es mantener un proyecto relativamente antiguo, lo que lo anterior estas prácticas diez, LZ casi todos han sido capaces de tratar la noticia buena es que los resultados son bastante buenos.

Los dos últimos contacto limitado con la situación real de demasiado cerca, por lo LZ no puede dar un ejemplo sencillo, pero los dos últimos, después de todo, no se usa comúnmente técnica de reconstrucción, y por lo tanto pueden ser aceptadas. Pero no comunmente no significa que no sea importante, usted todavía tiene que amigos simios saben. Además LZ también les gusta decir que el ejemplo anterior es sólo una forma de mostrar simple, aplicación práctica, la estructura del código puede ser extraño, pero que siguen siendo los mismos. En tanto que el núcleo atrapado en cada sentido, es fácil de estas hojas de seguridad a través de la creación de caos.

Bueno, esta es una pequeña parte es más, usted simios amigos si sienten que algo que usted recomienda LZ estímulo, por cierto también permitir que más gente lo vea. En ese caso, tal vez cada uno de nosotros llevamos más de un código de proyecto, que no sería muy malo, puede ser considerado para proyectos como LZ defensores de una forma de salir de ella.

Publicado 50 artículos originales · ganado elogios 1706 · Vistas 2,22 millones +

Supongo que te gusta

Origin blog.csdn.net/zl1zl2zl3/article/details/105325489
Recomendado
Clasificación