User Tools

Site Tools


prom20:person:person

Person

Hierbei handelt es sich um die Person selbst1), welche eine echte Person repräsentiert. Die Daten von Person werden absichtlich flach gehalten, damit die Person nicht zu spezifisch wird, und in allen Anwendungen2) verwendet werden kann, wo eine (erweiterbare) Person benötigt wird.

Identität

Eine Person wird durch die Kontinuität identifiziert. Sie hat einen Namen und einen Matchcode3), sowie ein Geburtsdatum. Das kann sich alles ändern. Der Name z.B. durch eine Heirat, das Geburtsdatum durch eine Korrektur. Es muss auch alles änderbar sein.

Wenn jemand Hans Hansen, geboren am 1.1.1950 in Petra Petersen, geboren am 31.12.1999 ändert, dann ist das zwar erlaubt und hat wenig Sinn, PRO·M kann das aber nicht verhindern. Der Anwender muss da einfach wissen, was er tut, und die Kontinuität4) der Änderungen der Person ist ja vorhanden, so dass im schlimmsten Fall alles wieder korrigiert werden muss.

Es gäbe die Möglichkeit, den Matchcode nach einer Freigabe der Person nicht mehr ändern zu können, oder zumindest den Vornamen, den Mittelnamen, den Geburtsnamen und das Geburtsdatum. Ich denke, so was wäre realisierbar, wenn man dafür einen Freigabeprozess einrichtet, damit mindestens 2 Anwender die Angaben vorher prüfen. Das kann noch weiter analysiert werden.

Index

Es gibt einen Matchcode-Index, über den sicher gestellt wird, dass der Matchcode einer Person pro Mandant eindeutig ist, da über diesen gesucht und über Auswahllisten ausgewählt wird. Ein Index bedeutet immer, dass die Datenbank an dieser Stelle nicht aufteilbar ist, dass also alle Personen im selben transaktionalen Knoten existieren müssen5).

Der Matchcode muss aber nicht eindeutig sein, das ist lediglich aus Gründen der Bequemlichkeit so. Eindeutigkeit über Eventual Consistency herzustellen, und dabei auch mal doppelte Matchcodes zuzulassen, wäre absolut kein Problem. Ich sehe bei PRO·M aber keine Notwendigkeit, die Personen zu sharden6), eine Installation ist ja immer über die Anzahl Mandanten skalierbar, und ein Mandant ist i.d.R. eine Firma7). Somit werden es nicht 2 Milliarden Personen in einem Mandanten geben, sondern maximal tausende, was heutzutage die einfachste Datenbank handhaben kann.

Inhalte

Entitäten

Kommunikationswege

Eine Person hat beliebig viele Kommunikationswege, z.B. E-Mail, Telefon, Fax, Facebook, Skype, Mobil, Twitter, usw. Da man mehrere Angaben zu einer Art machen kann, z.B. zwei oder drei E-Mail Adressen, handelt es sich hierbei um Entitäten, und nicht um Value-Objects. Die Identität ist noch eine surrogate ID, kann auch gar nicht die Kombination aus CommunicationWay8) und dem Wert sein, weil auch diese doppelt sein können9).

Regeln

Eine Personkann beliebig verändert werden, aber nicht gelöscht.

Befehle

  • AddPerson: Neue Anrede hinzufügen
  • CorrectPerson: Korrigieren. Ist nicht toll gewählt, aber man kann später noch ChangeName einführen, mit einer Begründung, z.B. Heirat, damit man in der Kontinuität unterscheiden kann zwischen einfachen Korrekturen und echten Änderungen.
  • To-Do: Befehle für Kommunikationswege

Ereignisse

  • PersonAdded
  • PersonCorrected
  • To-Do: Ereignisse für Kommunikationswege
1) Im Grunde das Haupt-Aggregate dieses Moduls
2) Auch in anderen Anwendungen als PRO·M
3) Alias, über den sie gesucht und angezeigt wird
4) Historie
5) Oder verteilte Transaktionen verwendet werden
6) Auf mehrere Datenbanken, bzw. Server zu verteilen
7) Konzerne werden auf mehrere Mandanten aufgeteilt
8) die pro Kommunikationsweg für die Typisierung referenziert wird
9) zu überlegen wäre, das zu ändern, indem man einfach erst pro Script doppelte Daten löscht
prom20/person/person.txt · Last modified: 2013/11/13 11:35 by rtavassoli