Upload
others
View
2
Download
0
Embed Size (px)
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
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é