prenez pas tout comme argent comptant ;) On va parler de vrai applications web avec de vrais règles métiers. Toutes les applications ne se prettent pas forcément au DDD. Mais si vous savez déjà que vous allez tendre vers quelque chose de plus complexe, commencez au plus tôt !
sa structure. Vouloir utiliser la dernière nouveauté de Symfony. Ne pas réfléchir en terme d'application globale. Le concept de Bundle poussé trop loin. Réfléchir à son model en fonction de son stockage.
l'organisation Framework comme un détail Doctrine, Redis, ... des détails aussi Focus sur le code qui crée la valeur : Le Domain Se mettre des barrières
penser à les stocker. Toutes actions de votre application doit impliquer un model. Vos modeles doivent être au centre de tout. Tout concept que vous utilisez dans votre code doit être modélisé. Résultat : documentation par le code plus limpide
De petites classes pour profiter de l'encapsulation Une classe = namespace + un nom + nom d'attributs + nom de méthodes = Autant d'aide pour expliciter ce qu'on fait
Money, CreditCard, Address, ... Doit être immutable ! Exemple DTO (Data Transfer Object) : Communication entre 2 parties : Client <=> Serveur, Model <=> Vue, ... Command Permet d'expliciter l'action que vous souhaitez réaliser : RegisterUserCommand, AddToBasketCommand Injecté seulement des scalaires. Rendez les le plus simple à construire possible. Exemple
avec le Validator Symfony 2 étapes de validation. Une validation classique, de type, de longueur, etc... Et une étape de validation métier DANS VOTRE MODEL ! On ne doit pas pouvoir construire un model dans un état invalide !
un tout cohérent. Eux seuls ont un repository Accès à une Entity Child par son AggregateRoot Un seul Aggregate par Bounded Context Merci Doctrine et le cascade persist
Profitons-en ! EventDispatcher Dédié Communication entre vos Bounded Context. Injectez y surtout des scalaires Et pourquoi pas demain penser à faire de l'event Sourcing ? Mais ça c'est une autre histoire...
Séparez en couches, même imparfaite pour commencer. Procédez itérativement pour construire vos barrières entre vos BC Reprenez le contrôle de vos Models