- Créer une application qui permet de gérer des comptes bancaires.
- Permet de : 💯
- * AXON est un framework Open Source pour les microservices pilotés par les événements et la conception pilotée par le domaine. Il s'agit d'un framework Java qui permet aux développeurs d'accéder aux référentiels, aux implémentations de composants cruciaux, notamment les agrégats, les bus de commandes et d'événements, et aux implémentations du modèle architectural CQRS.
voir également à propos AXON🔗
- * Spring Boot facilite la création d'applications Spring autonomes de qualité production que vous pouvez "just run".
voir également à propos Spring Boot🔗
- Pattern d’architecture • Capturer tous les changements de l’état d’une application Comme Séquence d’Evénements • Ne pas se concentrer sur l’état courant de l’application, mais sur la séquence de changements d’états (Evénements métiers) qui ont abouti à l’état courant • À partir de cette séquences d’événements, on pourra agréger l’état courant de l’application • Tout changement de l’état de l’application a une cause unique (Evénement)
voir également à propos Event Sourcing🔗
* Pattern d’architecturePattern qui consiste à séparer la partie lecture de la partie écriture de l’application.
voir également à propos CQRS🔗
- Architecture et terminologie
Classe générique de command
public abstract class BaseCommand <T> {
@TargetAggregateIdentifier
@Getter private T id;
public BaseCommand(T id) {
this.id = id;
}
}
Classe de commande de création de compte
public class CreateAccountCommand extends BaseCommand<String>{
@Getter private double initialeBalance;
@Getter private String currency;
public CreateAccountCommand(String id, double initialeBalance, String currency) {
super(id);
this.initialeBalance = initialeBalance;
this.currency = currency;
}
}
Classe de Commande de crédit
public class CreditAccountCommand extends BaseCommand<String>{
@Getter private double amount;
@Getter private String currency;
public CreditAccountCommand(String id, double amount, String currency) {
super(id);
this.amount = amount;
this.currency = currency;
}
}
Classe de commande de débit
public class DebitAccountCommand extends BaseCommand<String>{
@Getter private double amount;
@Getter private String currency;
public DebitAccountCommand(String id, double amount, String currency) {
super(id);
this.amount = amount;
this.currency = currency;
}
}
Classe Account
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Account {
@Id
private String id;
private double balance;
private Instant createdAt;
private String currency;
@Enumerated(EnumType.STRING)
private AccountStatus accountStatus;
@OneToMany(mappedBy = "account")
private Collection<AccountTransaction> transactions;
}
Classe Transaction
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class AccountTransaction {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Date timestamp;
private double amount;
@Enumerated(EnumType.STRING)
private TransactionType transactionType;
@ManyToOne
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private Account account;
}
- Enfin nous tenons à remercier le seul et unique, notre professeur Mr YOUSFI Mohamed Docteur & professeur à l'ENSET MEDIA pour son soutien et son encouragement envers nous, aussi pour nous avoir donné cette opportunité d'améliorer nos compétences et de connaître les nouvelles technologies comme celles qui nous avons travaillé.
voir également à propos Mr YOUSSFI Mohamed
Created by :[name=ELMAJNI KHAOULA] [time=Mon,2022,12,12][color=#EF0101] voir également à propos de moi ELMAJNI Khaoula