L'ARCHITECTURE PROGRESSIVE - Matthieu Napoli · 2020-05-27 · HEXAGONAL ARCHITECTURE 12....

Preview:

Citation preview

L'ARCHITECTUREPROGRESSIVE

@matthieunapoli

disclaimer

LA COURSE3

PHP

<?php$result = mysql_query('SELECT * FROM users WHERE Actif = 1');while ($rs = mysql_fetch_row($result)) { $userID = $rs[0]; $userName = $rs[1]; $userMail = $rs[2]; ?> <tr> <td style="text-align: center"> <?php echo '<a href="mailto:' . $userMail . '">Ecrire</a>'; ?> </td>

4

CLASSES

class DatabaseConnector { protected static $objet;

/** * Retourne un objet PDO * @return objet PDO pour communiquer avec la BD */ public static function getHandle() { // Vérifie si l'objet est déjà chargé if (isset(self::$objet)) { return self::$objet; }

$host = DB_HOST; $database = DB_NAME; self::$objet = new PDO("mysql:host=$host;dbname=$database", DB_USER, DB_PASSWORD);

5

MVC

class MVCParent extends MVCBase {

// Recherche parent function recherche_adresse() { // Retrouve les coordonées géographiques à partir de l'adresse $this->adresses = get_coordonees_from_adresse($_REQUEST['adresse']); if (count($this->adresses) == 0) { $this->RedirectControler('recherche_adresse_error'); return; }

// Recherche les parents $latitude = $this->adresses[0]['latitude']; $longitude = $this->adresses[0]['longitude']; $this->parents = UtilisateurParent::getParentsInSquare($latitude, $longitude);

6

ORM

class Article{ /** @Id @Column(type="integer") @GeneratedValue */ private $id;

/** @Column(type="string") */ private $title;

/** @ManyToOne(targetEntity="User") */ private $author;

/** @OneToMany(targetEntity="Comment", mappedBy="article") */ private $comments;

7

SOA

class OrderService{ public function createOrder(User $user, Cart $cart) { $items = $cart->getItems(); $order = new Order($user, $items);

$this->entityManager->persist($order); $this->entityManager->flush();

$this->catalogService->updateProductsStock($items);

$this->sendConfirmationMail($order); }

8

DDD

Application/ Controller/Domain/ Entity/ ValueObject/ Service/ Repository/

9

DDD

Application/ Controller/ Service/ DTO/Domain/ Entity/ ValueObject/ Service/ Repository/Infrastructure/ Service/ Repository/

10

CQRS, EVENT SOURCING

Application/ Controller/ Service/ DTO/Domain/ Entity/ ValueObject/ Service/ Repository/ Command/ CommandHandler/ Event/Infrastructure/ Service/ Repository/

11

HEXAGONAL ARCHITECTURE

12

APPROCHE PLUTÔT QUE SOLUTION

ÇA DÉPEND

> -> -> -

16

> métier> -> -

17

> différents niveaux de complexité> différents niveaux de criticité

18

DDD is an approach to software development for complex needs

19

Ne sont pas des gros mots :

20

Ne sont pas des gros mots :

> CRUD

20

Ne sont pas des gros mots :

> CRUD> SQL

20

Ne sont pas des gros mots :

> CRUD> SQL

> Hardcoder

20

complexité technique ≤ complexité métier

21

> métier> -> -

22

> métier> business

> -

23

3X

24

EXPLORE

25

26

> Twitter

26

> Twitter> Youtube

26

> Twitter> Youtube> Slack

26

> Twitter> Youtube> Slack

> Shopify

26

EXPAND

27

Du code legacy c'est un projet qui a réussi

28

EXTRACT

29

ET VOUS ?

> Explore> Expand

> Extract

30

> métier> business

> -

31

> métier> business> humain

32

Les gens sont …

33

HUMAIN

34

HUMAIN

> compétences

34

HUMAIN

> compétences> pérennité

34

> métier> business> humain

35

DDD

> Core domain> Supporting subdomain

> Generic subdomain

36

3X

37

HUMAIN

Diversité

38

DÉCOUPER

39

40

41

> métier> business> humain

43

44

45

IDENTIFIER LES MODULES

46

MÉTIERS DIFFÉRENTS

47

MÉTIERS DIFFÉRENTS

> gestion des utilisateurs

47

MÉTIERS DIFFÉRENTS

> gestion des utilisateurs> catalogue produit

47

MÉTIERS DIFFÉRENTS

> gestion des utilisateurs> catalogue produit

> commandes

47

MÉTIERS DIFFÉRENTS

> gestion des utilisateurs> catalogue produit

> commandes> CMS

47

MÉTIERS DIFFÉRENTS

48

MÉTIERS DIFFÉRENTS

> catalogue produit

48

MÉTIERS DIFFÉRENTS

> catalogue produit> commandes

48

MÉTIERS DIFFÉRENTS

> catalogue produit> commandes

> gestion des stocks

48

ACTEURS ET USAGES DIFFÉRENTS

Catalogue produit :

49

ACTEURS ET USAGES DIFFÉRENTS

Catalogue produit :

> Front : lecture seule, produits activés et en stock uniquement…

49

ACTEURS ET USAGES DIFFÉRENTS

Catalogue produit :

> Front : lecture seule, produits activés et en stock uniquement…

> Back-office : modification de tous les produits, imports en masse…

49

src/ Catalog/ Product.php CatalogService.php PIM/ Product.php PIMService.php

50

DÉCOUPLER LES MODULES

51

DÉCOUPLER LES MODULES

52

DÉCOUPLER LES MODULES

> Évènements

52

DÉCOUPLER LES MODULES

> Évènements> Abstractions

52

DÉCOUPLER LES MODULES

> Évènements> Abstractions

> Dépendances unidirectionnelles

52

53

DUPLIQUER L'INFORMATION

54

55

56

57

DUPLIQUER LE MODÈLE SANS DUPLIQUER L'INFORMATION

58

DTO

59

SELECT * FROM categories;

Virtual Machine Debian WindowsNetwork Link Satellite (disabled) ADSL SDSL

SELECT * FROM v_front_categories;

Virtual Machine - DebianVirtual Machine - WindowsNetwork Link - ADSLNetwork Link - SDSL

60

MULTIPLE ENTITY MANAGER

61

PROGRESSIF

62

> métier> business> humain

63

ARCHITECTURE PROGRESSIVE

64

65

> Approche plutôt que solution

65

> Approche plutôt que solution> Ça dépend (métier, business, humain)

65

> Approche plutôt que solution> Ça dépend (métier, business, humain)

> Adapter les solutions à l'échelle du module

65

> Approche plutôt que solution> Ça dépend (métier, business, humain)

> Adapter les solutions à l'échelle du module> La cohérence n'est pas une priorité

65

> Approche plutôt que solution> Ça dépend (métier, business, humain)

> Adapter les solutions à l'échelle du module> La cohérence n'est pas une priorité

> Avancer progressivement

65

C'est plus compliqué

Recommended