Skip to content
Snippets Groups Projects

Retours ngrekas

Merged Greg0ire requested to merge retours_ngrekas into master
Files
2
+ 63
36
@@ -71,12 +71,6 @@ Notes:
- Aucune logique (pas de tests nécessaires)
- Pas de setter pour id, il est setté par Doctrine après la persistence
---
<div class="tweet" data-src="https://twitter.com/Ocramius/status/975399920202080256"></div>
---
## ️❤️ Domain Driven Design ❤️
@@ -135,12 +129,12 @@ class Article
$this->content = $content;
}
public function getId()
public function getId(): int
{
return $this->id;
}
public function getContent()
public function getContent(): string
{
return $this->content;
}
@@ -154,6 +148,19 @@ Note:
Doctrine, Doctrine utilise de la réflection ou de la désérialisation pour
hydrater les entités.
---
## Les UUID
- Universally unique
- Indevinables
- Ne nécessitent pas de base de données
- `ramsey/uuid` à la rescousse
Notes:
- Idéalement, prendre une clé naturelle.
- Doctrine a un type `guid` qui correspond au type `uuid` dans Postgres,
jetez-y un oeil.
---
## Les value objects
@@ -178,31 +185,53 @@ Note:
- Doctrine Embeddables
- Custom types
---
## Instanciation avec des value object
Instanciation:
```php
use App\Domain\Article\Article;
use App\Domain\Article\ArticleContent;
use App\Domain\Article\ArticleTitle;
new Article(
new ArticleTitle('my title'),
new ArticleContent('This is a very short but nice article'),
new \DateTimeImmutable('now'),
);
```
Notes:
- ça peut vite devenir très pénible
---
## Les constructeurs nommés
```php
class Article
{
public static function createFromNative(string $content)
public static function createFromNative(string $title, string $content): self
{
return new self(new ArticleContent($content));
return new self(
new ArticleTitle($title),
new ArticleContent($content),
new \DateTimeImmutable('now')
);
}
}
```
Instanciation:
```php
new Article(new ArticleContent('This is a very short but nice article'));
// devient
Article::createFromNative('This is a very short but nice article');
```
Note:
- On peut faire plusieurs constructeurs nommés
- On peut passer le constructeur en privé pour encourager l'utilisation des
constructeurs nommés.
---
## Persister des VO avec Doctrine
- les custom types
- les embeddables
---
## Les custom types
@@ -241,12 +270,6 @@ Note:
l'hydratation. Si ça crashe, c'est qu'il manque des migrations.
- La méthode `getName()` fait doublon avec le nom utilisé lors de
l'enregistrement du type dans le registre de type, et disparaître dès Doctrine 3
> - `ArticleId` devrait être une clé naturelle ou un UUID, le principal c'est de
> pas avoir besoin de demander à la DB de le calculer, ça évite des attaques
> pour cause d'ID devinables, et ça évite d'exposer le nombre d'entités présentes
> dans une table. Ça évite aussi des collisions lorsque vous migrez des données
> d'une base vers une autre, et que la nouvelle base peut elle aussi être
> alimentée directement.
---
## Les embeddables
@@ -494,6 +517,23 @@ Note:
- utile si on a besoin de rajouter des conditions sans nécessiter d'hydrater
des objets de la classe jointe.
---
# Doctrine impose peu de choses
- `final` possible pour les méthodes en version 3
- `__clone` & `__wakeup` implémentables librement en version 3
---
<div class="tweet" data-src="https://twitter.com/Ocramius/status/975399920202080256"></div>
---
<!-- .slide: data-background="./iwantmore.gif" -->
---
# Protips
---
### Quelle API pour interroger la base de données?
@@ -524,9 +564,6 @@ Note:
- Si vous n'avez pas besoin de faire des requêtes dynamiques, vous pouvez vous
passer du Query Builder.
---
<!-- .slide: data-background="./iwantmore.gif" -->
---
## Result Set Mapping
@@ -559,9 +596,6 @@ $comments = $query->getResult();
SQL + Objets
---
# Protips
---
### Les dépendances circulaires entre paquets
@@ -585,13 +619,6 @@ doctrine:
---
# What's next
---
## `__clone` & `__wakeup`
Ces deux méthodes sont utilisées par Doctrine 2
Mais pas par Doctrine 3
---
# Support de MariaDB dans Doctrine&nbsp;3
Loading