Die Namesdatenbank

Es gibt in einem Framework wie devel.one viele Objekte, die irgendwo registriert werden und dabei eine ID zugeteilt bekommen. Da die IDs natürlich wichtig für Referenzen sind, und daher auch geloggt werden, ist es wichtig, diese LOGs auch gut lesbar zu gestalten. Daher haben wir eine Möglichkeit geschaffen, IDs jeder Form mit einem erklärenden Namen in String-Form zu verbinden. Im LOG wird dann oft der String statt der ID abgedruckt.

Über den Kernel erreicht man die Namens-Datenbank INameDb, welche die Zuordnung ID<–>String übernimmt. Dafür sind einige Unter-Namensdatenbanken zuständig:

  • IMessageNameDb: Nimmt Namen für Nachrichten-IDs auf
  • IMessageSlotNameDb: Nimmt Namen für SlotKeys auf
  • IResultNameDb: Nimmt Namen für Result-Codes auf
  • ITargetNameDb: Nimmt Namen für Target-Adressen auf.
  • IIdNameDb: Nimmt Namen für IDs vom Typ IId auf

Gewöhnlich speichern Programmierer nur die Namen zu den IDs. Das Logging-System ist dann eher der Nutznießer dieser Namen.

Das Speichern von Namen in der Datenbank ist simple:

final IKernel kernel = getKernel();
kernel.getNameDb().getTargetNameDb().putName(getAddress(), "Monitor");

Anschließend ist die oft kryptische Adresse/ID des Objekts (hier die Monitor-Target-Adresse) im LOG einfach erkennbar. Das Eintragen der Namen erfolgt oft, sobald die ID bzw. die Adresse eines Objektes feststeht. Obige Zeilen stammen aus dem Message-Handler des Monitors für die allererste Nachricht (StartTarget).