Comment appliquer les conventions de codage en Java

Objectif

Je suis désolé pour le titre accrocheur ou de pêche m (_ _;) m En bref, je vais vous expliquer comment utiliser le modèle de méthode modèle de manière pratique. Il est difficile de diffuser la norme de codage à tous les membres du développement. Je me demande s'il y a beaucoup de choses qui ne vont pas, comme le manque de temps et de mauvaises révisions de code, différents niveaux de compétence, etc. Donc, si vous souhaitez partager et créer plusieurs logiques métier avec plusieurs personnes, considérez la classe sous-jacente qui force l'implémentation à adhérer aux conventions de codage.

environnement

--Java: JDK1.5 ou version ultérieure

Méthode

Appliquer le nom de la méthode, l'argument et la valeur de retour à implémenter La seule règle, «Doit hériter de cette classe», applique le nom de la méthode et son rôle pour chaque classe de logique métier. Le point est le modèle de méthode de modèle.

Structure de classe

La structure de la classe est la suivante. Classe DTO: FooInfoDto.java, BarInfoDto.java ビジネスロジック親クラス:Proces.java Classe de logique métier (partie de partage d'implémentation): ProcesHoge01.java, ProcesHoge02.java メインクラス(ビジネスロジック呼出し部分):Main.java

1. 1. Les classes DTO INPUT et OUTPUT sont disponibles

DTO "FooInfoDto" de la classe (INPUT) qui contient la valeur avant traitement, Créez un DTO "BarInfoDto" pour la classe (OUTPUT) qui contient les valeurs traitées. Comme il s'agit du même champ, INPUT et OUTPUT peuvent être le même DTO, mais il est plus facile à maintenir car il est préférable de séparer clairement la valeur conservée avant et après le traitement. C'est redondant, mais séparé.

FooInfoDto.java


package dto;

public class FooInfoDto {

  private Integer id = null;

  private String value = null;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }

}

BarInfoDto.java


package dto;

public class BarInfoDto {

  private Integer id = null;

  private String value = null;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }

}

2. Créer une classe parent pour appliquer l'implémentation

Étant donné que le nom de la méthode et son rôle ne peuvent être appliqués que par la règle selon laquelle «chaque logique métier hérite et implémente cette classe parente», il est facile de comprendre «quelle classe fait quel traitement?». Devenir. Le but des classes abstraites au lieu des interfaces est d'implémenter uniquement certaines parties de traitement dans chaque logique métier et d'agréger des parties communes dans cette classe parente.

Proces.java


package businesslogic;

import java.util.List;
import dto.BarInfoDto;
import dto.FooInfoDto;

public abstract class Proces {

  protected abstract String getProcesName();

  protected abstract void proces(List<FooInfoDto> input , List<BarInfoDto> output);

  public void execute(List<FooInfoDto> in, List<BarInfoDto> out) {

    System.out.println( getProcesName() + "Lancez le traitement." );

    proces(in, out);

    System.out.println( getProcesName() + "Le traitement est terminé." );

  }

}

La "méthode getProcesName" donne le rôle de "renvoyer un nom descriptif pour indiquer ce que fait la classe". En définissant le modificateur sur "protected", vous pouvez l'empêcher d'être appelé par des classes en dehors du package.

La "méthode proces" est une méthode abstraite "pour implémenter le contenu de traitement réel de la logique métier". Encore une fois, définissez le modificateur sur "protected" afin qu'il ne puisse pas être appelé par des classes en dehors du package.

La "méthode execute" est la seule méthode qui peut être appelée du côté utilisateur, c'est-à-dire la classe principale (une classe en dehors du package businesslogic). Ici, vous pouvez appliquer le traitement du hook, l'ordre de traitement, etc.

3. 3. État de la logique métier implémentée par le partage

La partie que les membres implémentent réellement.

ProcesHoge01.java


package businesslogic;

import java.util.List;
import dto.BarInfoDto;
import dto.FooInfoDto;

public class ProcesHoge01 extends Proces {

  @Override
  protected String getProcesName() {
    return "Traitement Hoge01";
  }

  @Override
  protected void proces(List<FooInfoDto> input, List<BarInfoDto> output) {

    //Contenu de traitement Hoge réel
    int index = 0;
    for( FooInfoDto dto : input ) {

      Integer tmpId = dto.getId()*10;
      output.get(index).setId(tmpId);

      String tmpValue = dto.getValue()+"_Hoge01";
      output.get(index).setValue(tmpValue);

      index++;
    }
  }
}

ProcesHoge02.java


package businesslogic;

import java.util.List;
import dto.BarInfoDto;
import dto.FooInfoDto;

public class ProcesHoge02 extends Proces {

  @Override
  protected String getProcesName() {
    return "Traitement Hoge02";
  }

  @Override
  protected void proces(List<FooInfoDto> input, List<BarInfoDto> output) {

    //Contenu de traitement Hoge réel
    int index = 0;
    for( FooInfoDto dto : input ) {

      Integer tmpId = dto.getId() + output.get(index).getId();
      output.get(index).setId(tmpId);

      String tmpValue = dto.getValue()+"_Hoge02";
      output.get(index).setValue(tmpValue);

      index++;
    }
  }
}

4. Classe qui appelle la logique métier

En fait, c'est la partie qui correspond à la classe du contrôleur. Ici, il est implémenté comme une classe facile à comprendre et exécutée simplement par la méthode main. J'ai laissé les packages par défaut, mais ce serait bien s'ils pouvaient être séparés des packages des classes de logique métier.

Main.java


import java.util.ArrayList;
import java.util.List;
import businesslogic.ProcesHoge01;
import businesslogic.ProcesHoge02;
import dto.BarInfoDto;
import dto.FooInfoDto;

public class Main {

  public static void main(String[] args) {

    //Liste DTO pour stocker les résultats du traitement
    List<BarInfoDto> out = new ArrayList<BarInfoDto>();

    //Préparer une liste DTO d'entrée à traiter
    List<FooInfoDto> in = new ArrayList<FooInfoDto>();
    for(int i=1 ; i<4 ; i++){
      FooInfoDto dto = new FooInfoDto();
      dto.setId(i);
      dto.setValue(i+"Deuxième valeur");

      //Défini dans la liste DTO d'entrée à traiter
      in.add(dto);

      //Définissez un objet DTO vide dans la liste DTO qui stocke le résultat du traitement
      out.add(new BarInfoDto());

    }

    new ProcesHoge01().execute(in, out);
    //Affichage des résultats
    for(BarInfoDto dto : out) {
      System.out.println( "-------------------------------" );
      System.out.println( "ID après traitement> " + dto.getId() );
      System.out.println( "Valeur après traitement> " + dto.getValue() );
    }

    new ProcesHoge02().execute(in, out);
    //Affichage des résultats
    for(BarInfoDto dto : out) {
      System.out.println( "-------------------------------" );
      System.out.println( "ID après traitement> " + dto.getId() );
      System.out.println( "Valeur après traitement> " + dto.getValue() );
    }
  }
}

c'est tout.

Remarques

Comment était-ce? Nous vous serions reconnaissants de bien vouloir nous faire part de vos opinions et de vos conseils. m (_ _) m

Je pense que vous pouvez faire de la classe principale une classe de façade avec un modèle de façade pour améliorer encore la lisibilité.

Recommended Posts

Comment appliquer les conventions de codage en Java
Comment implémenter le filtre de Kalman par Java
[Java] Comment implémenter le multithreading
Résumé de la mise en œuvre des arguments par défaut en Java
Comment apprendre JAVA en 7 jours
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Essayez d'implémenter Yuma en Java
Comment concaténer des chaînes avec Java
Convention de codage Java
Comment implémenter la fonctionnalité de recherche dans Rails
Essayez d'implémenter l'ajout n-aire en Java
Comment intégrer Janus Graph dans Java
Comment obtenir la date avec Java
Comment implémenter la fonctionnalité de classement dans Rails
Comment implémenter le traitement asynchrone dans Outsystems
Comment implémenter un travail qui utilise l'API Java dans JobScheduler
Conventions de codage Java lâches
Comment obtenir une classe depuis Element en Java
Comment masquer les champs nuls en réponse en Java
Comment implémenter une fonctionnalité similaire dans Rails
Comment implémenter le verrouillage optimiste dans l'API REST
Comment résoudre les problèmes d'expression en Java
Comment écrire Java String # getBytes dans Kotlin?
Comment implémenter la pagination dans GraphQL (pour ruby)
Comment implémenter UICollectionView avec du code uniquement dans Swift
Comment créer un environnement Java en seulement 3 secondes
[Java] Comment omettre le constructeur privé dans Lombok
Comment implémenter la connexion invité en 5 minutes sur le portefeuille de rails
Comment abaisser la version java
[Java] Comment utiliser Map
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Comment désinstaller Java 8 (Mac)
J'ai essayé d'implémenter la notification push Firebase en Java
Java - Comment créer JTable
Comment entrer / sortir des fichiers mainframe IBM en Java?
Comment utiliser java Facultatif
Comment réduire les images Java
Comment rédiger un commentaire java
Implémentation de l'authentification en deux étapes en Java
Comment créer un URI de données (base64) en Java
[Java] Comment utiliser removeAll ()
Implémenter l'authentification de base en Java
Comment utiliser Java Map
Comment définir des constantes Java
2 Implémentez une analyse syntaxique simple en Java
Implémenter l'envoi d'e-mails en Java
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
Comment Git gérer les projets Java EE dans Eclipse
Comment utiliser les variables Java
Implémenter un tri rapide de type fonction en Java
Comment convertir la base Java
[Rails] Comment mettre en œuvre le scraping
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java