Heim > Backend-Entwicklung > PHP-Tutorial > Erstellen fokussierter Domänenanwendungen. Ein Symfony-Ansatz (Speichern der Entität)

Erstellen fokussierter Domänenanwendungen. Ein Symfony-Ansatz (Speichern der Entität)

Mary-Kate Olsen
Freigeben: 2024-11-17 03:30:04
Original
800 Leute haben es durchsucht

Creating focused domain applications. A Symfony approach (Saving the entity)

Einführung

In diesem dritten Beitrag dieser Serie erstellen wir eine Entität, die aus dem DTO, das wir im ersten Artikel der Serie erstellt haben, in der Datenbank gespeichert werden kann.

Transformieren des UserInputDTO in eine Entität

Um mit diesem Abschnitt zu beginnen, gehen wir davon aus, dass wir Doctrine für die Kommunikation mit der Datenbank verwenden und unsere Benutzer-Entität wie folgt aussieht:

#[ORM\Entity(repositoryClass: UserRepository::class)]
class User
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 150)]
    private string $firstname;

    #[ORM\Column(length: 255)]
    private string $lastname;

    #[ORM\Column(length: 25)]
    private string $dob;

    #[ORM\Column]
    private \DateTimeImmutable $createdAt;

    #[ORM\Column]
    private string $token;

    // getters and setters
}
Nach dem Login kopieren

Die Felder email, firstname, lastname und dob werden mit den UserInputDTO-Werten und gefüllt Die Felder createdAt und token werden gemäß den folgenden Regeln ausgefüllt:

  • Das Feld createdAt enthält das aktuelle Datum.
  • Das Feld Token enthält eine Zeichenfolge mit 50 alphanumerischen Zeichen.

Da wir entschieden haben, wie wir die Entitätsfelder füllen, gehört dieser Teil des Codes zur Domäne, da er Domänengeschäftsregeln enthält. Wir benötigen also eine Servicedomäne, um diese Aufgaben zu erledigen. Lass es uns codieren.

class UserEntityBuilder {

    public function buildEntity(UserInputDTO $userInputDto): User
    {
        $user = new User();
        $user->setEmail($userInputDto->email);
        $user->setFirstname($userInputDto->firstname);
        $user->setLastname($userInputDto->lastname);
        $user->setDob($userInputDto->dob);
        $user->setToken(bin2hex(random_bytes(50)));
        $user->setCreatedAt(new \DateTimeImmutable());

        return $user;
    }
}
Nach dem Login kopieren

Wie Sie sehen können, erstellt die Methode UserEntityBuilder buildEntity die Entität User gemäß den vorab festgelegten Regeln und gibt die Entität zurück.

Ein Anwendungsdienst zum Erstellen und Speichern der Entität

Jetzt brauchen wir einen Dienst, der für die Koordinierung der Prozesse zur Rettung des Unternehmens zuständig ist:

  • Erstellen der Entität Benutzer mithilfe unseres kürzlich erstellten Domänendienstes UserEntityBuilder.
  • Verwendung des Doctrine-EntityManager-Dienstes, um die Entität in der Datenbank beizubehalten. Der EntityManager-Dienst sollte als Infrastrukturdienst betrachtet werden, da er vom Symfony-Framework über seine symfony/orm-pack-Komponente bereitgestellt wird.

Lass es uns codieren.

class UserCreator {

    public function __construct(
        private readonly UserEntityBuilder $userEntityBuilder,
        private readonly EntityManagerInterface $em,
    ){}

    public function createUser(UserInputDTO $userInputDto): object
    {
        $user = $this->userEntityBuilder->buildEntity($userInputDto);
        $this->em->persist($user);
        $this->em->flush();

        return '.....'; // Return a DTO ready to be used by the presentation layer
    }
}
Nach dem Login kopieren

Wie Sie im obigen Code sehen können, verwendet der UserCreator-Anwendungsschichtdienst zuerst den UserEntityBuilder, um die Entität zu erstellen, und verwendet dann den Doctrine-Entitätsmanager, um sie in der Datenbank zu speichern .

Möglicherweise ist Ihnen aufgefallen, dass die „Return“-Zeile nicht vollständig ist. ¿Was sollen wir hier zurückgeben?. Wir werden es im nächsten und letzten Artikel dieser Serie sehen :)

Was ist mit den Entitäten? Gehören sie zur Domäne?

Das ist eine gute Frage. Meiner Meinung nach würden sie zu unserer Domäne gehören, da sie zwar eine Zuordnung von Datenbanktabellen zu Objekten in unserer Anwendung darstellen, aber unsere Entscheidungen bezüglich des Datenmodells des Projekts kapseln.
Die Tatsache, dass sie zu unserer Domäne gehören können, bedeutet nicht, dass sie als DTOs verwendet werden können. Sie sollten isoliert sein und nur zum Speichern von Daten in der Datenbank und zum Empfangen von Daten von dort verwendet werden.

Abschluss

In diesem dritten Artikel haben wir einen Domänendienst erstellt, um eine Benutzerentität zu erstellen, die zur dauerhaften Speicherung in der Datenbank bereit ist, und außerdem einen Anwendungsdienst erstellt, der die Entität in der Datenbank speichert, indem wir den Domänendienst zum Erstellen des Benutzers verwenden der Doctrine-Entity-Manager, um es zu speichern.
Im nächsten und letzten Artikel lernen wir, wie man ein Ausgabe-DTO mit den gespeicherten Benutzerinformationen erstellt, die bereit sind, an die Präsentationsebene zurückgegeben zu werden.

Wenn Ihnen meine Inhalte gefallen und Sie Freude am Lesen haben und Sie daran interessiert sind, mehr über PHP zu erfahren, können Sie mein E-Book über die Erstellung einer betriebsorientierten API mit PHP und dem Symfony Framework lesen. Sie finden es hier: Erstellen einer betriebsorientierten API mit PHP und dem Symfony Framework: Eine Schritt-für-Schritt-Anleitung

Das obige ist der detaillierte Inhalt vonErstellen fokussierter Domänenanwendungen. Ein Symfony-Ansatz (Speichern der Entität). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage