anchor.diff:  - Höhengrad und Breitengrad sind beide floats
   - Beide werte jedoch stellen einen anderen Domain dar
   
  -' In DDD (Domain Driven Design) spielen diese oft eine wichtige Rolle.  
  +' In DDD (Domain Driven Design) spielen diese oft eine wichtige Rolle.
   ' Z.B. kann ich dadurch Primitives so definieren dass diese untereinander nicht „kompatibel“ sind, auch wenn diese vom gleichen Typ sind.
   
   *)
  
positive.code: ---
  ### Tuple: Komposition
  
  Aus einfachen Typen lassen sich komplexere erstellen
  
  *)
  
  
negative.code: 
  --- 
  ### DDD und F#
  #### Intern ODER extern
  *)
  
  type Abteilung = { Name:string; Beschreibung:string; }
  type Kunde = { Id:int; Name:string; }
  
  type Person' = { Id:int; Vorname:string; Nachname:string; Abteilung: Abteilung option; Kunde: Kunde option; }
  
  (**
  ' Theoretisch, hindert mich nichts daran sowohl Department und Customer leer zu lassen.  Ich muss aktiv über mein Code eingreifen um zu sichern dass mindestens eines der beiden belegt ist
  ' Nachnamen und Vornamen sind häufig gemeinsam anzutreffen, die Beiden werden meistens als einheit betrachtet
  ' Notfalls muss eine ReadOnly Property erstellen um herauszufinden dass eine Person intern oder extern ist
  ' Diese Property muss immer z.B. aufgerufen werden um sich zu vergewissern 
  
  --- 
  ### DDD und F#
  #### Komposition
  
  - Komposition 
  - DUs erlauben eine "geschlossene" Auswahl
  
  *)
  
  type PersonenName = { Vorname:string; Nachname:string; }
  //type Person = { Id:int; Name:PersonalName }
  
  type Person = 
      | Angestellter of Id:int * Name:PersonenName * Department: Abteilung
      | Externer of Id:int * Name:PersonenName * Customer:Kunde
  
  (**
  
  ' Wenn ich ab jetzt nur noch mit 
  
  ---
  ### DDD und F#
  - Model für einen Namen
  
  ' In OO wäre es möglich dass MiddleName ein null wäre. Das ist zulässig und idiomatisch.
  ' Aber wie wir gesehen haben, wäre es auch möglich Length gegen einen null pointer vom Type String zu verwenden
  ' dies kann ich verhindern in dem ich die Option nutze, hier muss der String angegeben werden (wenn auch Empty auch möglich wäre)
  
  *)
  
  module DDD0 = 
  
      type PersonenName = 
          { 
              FirstName:string; // Muss
              MiddleName:string; // Kann
  