# Utilisation des records - Status: accepted - Date: 2022-03-02 Technical Story: [card associé](https://github.com/Nouuu/AL-TradeMe/issues/40) ## Il y a une nouvelle syntaxe dans java ```java public final class ContractorDeleted implements ApplicationEvent { private final EventId eventId; private final ZonedDateTime occurredDate; private ContractorDeleted(EventId eventId, ZonedDateTime occurredDate) { this.eventId = Objects.requireNonNull(eventId); this.occurredDate = Objects.requireNonNull(occurredDate); } public static ContractorDeleted withContractor() { return new ContractorDeleted(EventId.create(), ZonedDateTime.now()); } /** * GETTER */ @Override public String toString() { } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof ContractorDeleted)) return false; ContractorDeleted that = (ContractorDeleted) o; if (!eventId.equals(that.eventId)) return false; if (!occurredDate.equals(that.occurredDate)) return false; return contractor.equals(that.contractor); } @Override public int hashCode() { int result = eventId.hashCode(); result = 31 * result + occurredDate.hashCode(); result = 31 * result + contractor.hashCode(); return result; } } ``` --- ```java public record ContractorDeleted( EventId eventId, ZonedDateTime occurredDate, EntityId contractorId ) implements ApplicationEvent { public ContractorDeleted { Objects.requireNonNull(eventId); Objects.requireNonNull(occurredDate); Objects.requireNonNull(contractorId); } public static ContractorDeleted of(EntityId contractorId) { return new ContractorDeleted(EventId.create(), ZonedDateTime.now(), contractorId); } } ``` Il existe une nouvelle syntaxe plus courte pour définir des data class. ## Considered Options - Rester sur des class final avec static factory method - Passer les objets de transfert en record - Passer les objets de transfert et les value objects et les entities en record ## Decision Outcome Option 3 ### Positive Consequences - Shorter - immutable - Gestion automatique de "equals", hashcode et toString - Plus de génération via l'IDE ### Negative Consequences - Le constructeur par défaut ne peut pas avoir un scope plus petit que le record lui-même ## Guideline On a décidé en interne dans l'équipe dans nos conventions de code de faire usage des constructeurs static plutôt que du constructeur par défaut.