Praktisches Beispiel für hexagonale Architektur in Python

Ich habe kürzlich ein internes Backend auf der Basis von Hexagonal Architecture geschrieben und es funktioniert ziemlich gut (ich werde es tun), also werde ich versuchen, die grundlegende Essenz super einfach zu schreiben.

Beispiel für die Implementierung von TagService

Domänenschicht


from zope.interface import Interface
from .base import Entity, ValueObject

class Post(Entity):
    u""" Post Model """
    ...
    
class Tag(ValueObject):
    u""" Tag Model """    
    ...

class ITagService(Interface):    # specification
    u""" Tag management domain service """
    def add_tag(post, tag):
        u""" add tag to a post """

    def remove_tag(post, tag):
        u""" remove tag from a post """

Weitere Informationen zu ValueObject und zope.interface finden Sie in den folgenden Artikeln.

Infrastrukturschicht

from zope.interface import implementer
from .domain.model import ITagService

@implementer(ITagService)    # implement TagService as described in ITagService
class TagService(object):
    u""" TagService using xxx """
    def add_tag(self, post, tag):
        u""" add tag to a post """
        # do some actual staff

    def remove_tag(self, post, tag):
        u""" remove tag from a post """
        # do some actual staff


@implementer(ITagService)
class DummyTagService(object):      # i.e. memory based implementation
    u""" TagService for tests """
    def add_tag(self, post, tag):
        u""" add tag to a post """
        # do some actual staff

    def remove_tag(self, post, tag):
        u""" remove tag from a post """
        # do some actual staff

Anwendungsschicht

from .infrastructure import TagService

def add_tag(post, tag):
    srv = TagService()
    srv.add_tag(post, tag)    # use TagService as described in ITagService

Prüfung

Informationen zur Rolle der Domänenschicht

Ich wurde intern gefragt: "Benötigen Sie ITagService?". Ich denke jedoch, dass die Rolle der Domänenschicht darin besteht, jeder Anwendungsschicht und jeder Infrastrukturschicht "Spezifikationen" zu präsentieren. .. Mit der Domänenschicht kann die Infrastrukturschicht implementiert werden, um diese Schnittstelle bereitzustellen, und die App-Schicht kann das Modell gemäß dieser Schnittstelle verwenden.

Wenn Sie es mit der ECMAScript-Spezifikation vergleichen,

Mit der dazwischen liegenden Domain-Schicht können sowohl Feature-Provider als auch Benutzer voneinander profitieren.

Recommended Posts

Praktisches Beispiel für hexagonale Architektur in Python
Objektäquivalenzbeurteilung in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Implementierung der schnellen Sortierung in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 5 von Hajipata in Python
Bildpixel-Manipulation in Python
Zeitdelta in Python 2.7-Serie teilen
MySQL-automatische Escape-Funktion von Parametern in Python
Umgang mit JSON-Dateien in Python
Audio-Wellenform-Anzeige in Python
Implementierung der ursprünglichen Sortierung in Python
Reversibles Verwürfeln von Ganzzahlen in Python
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Übung, dies in Python zu verwenden (schlecht)
Allgemeine Relativitätstheorie in Python: Einführung
Ausgabebaumstruktur von Dateien in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
Zusammenfassung verschiedener for-Anweisungen in Python
Beispiel einer dreidimensionalen Skelettanalyse von Python
Das Ergebnis der Installation von Python auf Anaconda
Gang of Four (GoF) -Muster in Python
Grundlagen zum Ausführen von NoxPlayer in Python
Massenersatz von Zeichenfolgen in Python-Arrays
Projekt Euler # 16 "Summe der Kräfte" in Python
Traffic Safety-Kun: Erkennung von Verkehrszeichen in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Nicht logische Operatorverwendung von oder in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Doppelte Pendelbewegungsgleichung in Python
Entfernen Sie DICOM-Bilder in Python
Status jedes Python-Verarbeitungssystems im Jahr 2020
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Ein Beispiel für die Antwort auf die Referenzfrage der Studiensitzung. Mit Python.
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
Metaprogrammierung mit Python
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Python 3.3 mit Anaconda
SendKeys in Python
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Erhalten Sie einen Websocket der kabu station ® API in Python
Beispiel für die Verwendung von Python> function> * args als Argument
Zusammenfassung zum Importieren von Dateien in Python 3
Projekt Euler # 10 "Summe der Primzahlen" in Python
Unbeaufsichtigter Betrieb von Google Spreadsheets (usw.) in Python
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Epoche in Python
Zwietracht in Python
Kopieren Sie die Liste in Python
Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
Deutsch in Python