Coder Social home page Coder Social logo

ap-5-event-driven-architecture-cqrs-and-event-sourcing's Introduction

AP-5-Event-Driven-Architecture-CQRS-and-Event-Sourcing 🎓

1.Project Presentation

  • Créer une application qui permet de gérer des comptes bancaires.
    • Permet de : 💯
  1. Ajouter un Compte

  2. Activer un compte après création

  3. Créditer un compte

  4. Débiter un compte

  5. Consulter un compte

  6. Consulter les comptes

  7. Consulter les opérations d’un compte

  8. Suivre en temps réel l’état d’un compte

2.Architecture de l'activité pratique


2.Technologies utilisées

1.Axon

  • * 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🔗

2.Spring Boot

  • * Spring Boot facilite la création d'applications Spring autonomes de qualité production que vous pouvez "just run".

voir également à propos Spring Boot🔗

3.Design Patterns

1.Event Sourcing

  • 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🔗

1.CQRS : Command Query Responsability Segregation

* Pattern d’architecture

Pattern qui consiste à séparer la partie lecture de la partie écriture de l’application.

voir également à propos CQRS🔗


  • Architecture et terminologie

4.Réalisation

Partie Commands

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;
    }
}

Partie Query

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;

}

5.Simulation

Base de Données


Documentation Swagger

Créer un compte


Créditer un comte


Débiter un compte


Consulter un compte


Consulter tous les comptes


Consulter les opérations d’un compte


Event Store


  • 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

ap-5-event-driven-architecture-cqrs-and-event-sourcing's People

Contributors

khaoulaelmajni avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.