Difference between Value Object pattern and Data Transfer pattern

后端 未结 8 926
别跟我提以往
别跟我提以往 2021-01-31 23:01

In which scenario can I use those design patterns in n-tier architecture?

8条回答
  •  不知归路
    2021-01-31 23:51

    Value Object and Data Transfer Object are design pattern.

    • Value Object : Use when need to measure the objects' equality based on the objects' value.

    Real world example is java.time.LocalDate

    public class HeroStat {
    
       // Stats for a hero
    
       private final int strength;
       private final int intelligence;
       private final int luck;
    
       // All constructors must be private.
       private HeroStat(int strength, int intelligence, int luck) {
        this.strength = strength;
        this.intelligence = intelligence;
        this.luck = luck;
       }
    
      // Static factory method to create new instances.
      public static HeroStat valueOf(int strength, int intelligence, int luck) {
        return new HeroStat(strength, intelligence, luck);
      }
    
      public int getStrength() {
         return strength;
      }
    
      public int getIntelligence() {
         return intelligence;
      }
    
      public int getLuck() {
         return luck;
      }
    
      /*
       * Recommended to provide a static factory method capable of creating an instance 
           from the formal
       * string representation declared like this. public static HeroStat parse(String 
         string) {}
       */
    
      // toString, hashCode, equals
    
      @Override
      public String toString() {
          return "HeroStat [strength=" + strength + ", intelligence=" + intelligence
        + ", luck=" + luck + "]";
      }
    
      @Override
      public int hashCode() {
         final int prime = 31;
         int result = 1;
         result = prime * result + intelligence;
         result = prime * result + luck;
         result = prime * result + strength;
         return result;
      }
    
      @Override
      public boolean equals(Object obj) {
           if (this == obj) {
              return true;
            }
           if (obj == null) {
              return false;
           }
           if (getClass() != obj.getClass()) {
              return false;
           }
           HeroStat other = (HeroStat) obj;
           if (intelligence != other.intelligence) {
              return false;
           }
           if (luck != other.luck) {
              return false;
           }
           if (strength != other.strength) {
              return false;
           }
              return true;
        }
        // The clone() method should not be public. Just don't override it.
      }
    

    - Data Transfer Object : Pass data with multiple attributes in one shot from client to server, to avoid multiple calls to remote server.

      public class CustomerDto {
           private final String id;
           private final String firstName;
           private final String lastName;
    
           /**
            * @param id        customer id
            * @param firstName customer first name
            * @param lastName  customer last name
            */
            public CustomerDto(String id, String firstName, String lastName) {
               this.id = id;
               this.firstName = firstName;
               this.lastName = lastName;
            }
    
            public String getId() {
               return id;
            }
    
            public String getFirstName() {
               return firstName;
            }
    
            public String getLastName() {
               return lastName;
            }
         }
    

提交回复
热议问题