<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://ramin-tavassoli.de/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://ramin-tavassoli.de/feed.php">
        <title>tawiki technology:domainmodel</title>
        <description></description>
        <link>http://ramin-tavassoli.de/</link>
        <image rdf:resource="http://ramin-tavassoli.de/lib/tpl/dokuwiki/images/favicon.ico" />
       <dc:date>2026-06-19T15:42:13+02:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:aggregate&amp;rev=1361263625&amp;do=diff"/>
                <rdf:li rdf:resource="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:aggregatedesign&amp;rev=1362576439&amp;do=diff"/>
                <rdf:li rdf:resource="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:boundedcontext&amp;rev=1359634667&amp;do=diff"/>
                <rdf:li rdf:resource="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:domainservice&amp;rev=1359371488&amp;do=diff"/>
                <rdf:li rdf:resource="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:processmanager&amp;rev=1357977209&amp;do=diff"/>
                <rdf:li rdf:resource="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:secondaryindex&amp;rev=1361208217&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://ramin-tavassoli.de/lib/tpl/dokuwiki/images/favicon.ico">
        <title>tawiki</title>
        <link>http://ramin-tavassoli.de/</link>
        <url>http://ramin-tavassoli.de/lib/tpl/dokuwiki/images/favicon.ico</url>
    </image>
    <item rdf:about="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:aggregate&amp;rev=1361263625&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-02-19T09:47:05+02:00</dc:date>
        <title>technology:domainmodel:aggregate</title>
        <link>http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:aggregate&amp;rev=1361263625&amp;do=diff</link>
        <description>Ein Aggregate ist eine Gruppe von Entitäten und Value Objects die wichtige Business Logik umsetzt und die Einhaltung von Business Regeln, sogenannten Invariants, sicher stellt. Es gibt das Hauptobjekt, die Aggregate Root, die eine globale Identität hat. Wenn man einen Befehl an die Domäne senden möchte, wird eine Aggregate Root über die globale Identität von einem Repository geladen, und die entsprechende Methode wird in dem Aggregate aufgerufen. Die AggregateRoot kann nun ihre eigenen privaten …</description>
    </item>
    <item rdf:about="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:aggregatedesign&amp;rev=1362576439&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-03-06T14:27:19+02:00</dc:date>
        <title>technology:domainmodel:aggregatedesign</title>
        <link>http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:aggregatedesign&amp;rev=1362576439&amp;do=diff</link>
        <description>Ein Aggregate ist eine Konsistenzgrenze. Das heißt, dass alle Regeln innerhalb des Aggregates immer eingehalten werden können. Das heißt aber gleichzeitig, dass alle Regeln zwischen Aggregates nicht immer sofort eingehalten werden können, sondern im besten Fall so gut es geht und schließlich.



Ein einfaches Beispiel ist die Auftragsnummer. Klassisch ist die Auftragsnummer Teil des Auftrags. Dieser wird in der Datenbank als eine Zeile in der Tabelle ORDERS gespeichert, und auf dem Feld OrderKey…</description>
    </item>
    <item rdf:about="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:boundedcontext&amp;rev=1359634667&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-31T13:17:47+02:00</dc:date>
        <title>technology:domainmodel:boundedcontext</title>
        <link>http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:boundedcontext&amp;rev=1359634667&amp;do=diff</link>
        <description>A Bounded Context defines a context in which the ubiquitous language is uniquely defined.

A Note on Conformist, Customer-Supplier: the supplier cannot, by DEFINITION, be exchangeable. If you want to be able to exchange the implementation of parts, you must use an Anticorruption Layer. Then you can exchange the implementation of one BC, and by simply building a ACL for that BC to work with the other BCs, you are all set. Don't mistake Bounded Contexts with exchangeable parts. A BC is not, by def…</description>
    </item>
    <item rdf:about="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:domainservice&amp;rev=1359371488&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-28T12:11:28+02:00</dc:date>
        <title>technology:domainmodel:domainservice</title>
        <link>http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:domainservice&amp;rev=1359371488&amp;do=diff</link>
        <description>Es wäre optimal, weil sehr simpel zum entwickeln, wenn die gesamte Business Logik unabhängig in den Aggregates implementiert würde. Man ruft einen Methode in einem Aggregate auf, alle Regeln werden geprüft, und das Aggregate nimmt dann die entsprechenden Änderungen vor.


Es gibt aber Szenarien in denen Business Regeln mehrere Aggregates betreffen. Sei es eine einfache Regel wie der Transfer von einem Bankkonto zu einem anderen - der Transfer darf nur statt finden wenn ein Konto be- und das ande…</description>
    </item>
    <item rdf:about="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:processmanager&amp;rev=1357977209&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-12T08:53:29+02:00</dc:date>
        <title>technology:domainmodel:processmanager</title>
        <link>http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:processmanager&amp;rev=1357977209&amp;do=diff</link>
        <description>Für mich ist ein Process Manager keine Saga. Der Process Manager verwendet aber Sagas, kann aber auch weitere Dinge enthalten wie z.B. Aggregates, usw. Ein Prozess wird also dadurch definiert, wie er ausgelöst wird, und was die einzelnen Prozess Schritte sind. Wenn ein Prozess implizit ausgelöst wird, besteht er i.d.R. nur aus einer Saga, wenn er aber explizit ausgelöst wird, besteht er aus einem Aggregate, welches vom Client verwendet wird, um den Prozess explizit auszulösen. Das kann am besten…</description>
    </item>
    <item rdf:about="http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:secondaryindex&amp;rev=1361208217&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-02-18T18:23:37+02:00</dc:date>
        <title>technology:domainmodel:secondaryindex</title>
        <link>http://ramin-tavassoli.de/doku.php?id=technology:domainmodel:secondaryindex&amp;rev=1361208217&amp;do=diff</link>
        <description>In DDD heißt es, es gäbe keine transaktional einzuhaltenden, Mengenbasierten Regeln, die mehrere Aggregate umfassen. Ich behaupte, dass die explizite Verwendung von Mengenindizes eine pragmatische Abweichung von der reinen Anwendung von DDD ist. Ein Mengenindex ist im Grunde eine IoC von Entitäten und Aggregates, indem aus Entitäten Aggregates werden, und die Aggregates auf den Mengenindex zeigen. Durch Mengenindizes kann man den komplizierten Einsatz von Domain Services, SAGAs, Reservation Patt…</description>
    </item>
</rdf:RDF>
