Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Dies Checkliste mit all ihren Regeln bildet einen Styleguide für das Erstellen von Modellen. Die Ziele sind:

  • Möglichst klar strukturierte Modelle

  • Möglichst einfache Lesbarkeit

  • Bekannte Muster antreffen und sich in anderen Modellen zuhause fühlen

Klassen

  • Haben alle Klassen ein (Guid) primary key property? Der Name “Id” wird bevorzugt.

  • Haben allen Klassen

    • Eine Caption und PluralCaption für die verwendeten Sprachen?

    • Einen PluralName?

  • Haben alle Text-Felder eine Länge definiert?

  • Haben alle Felder eine Caption für die verwendeten Sprachen?

  • Haben alle Klassen Default-Sortierungen

  • Sind alle nötigen (unique) Indexes definiert worden?

  • Sind die Required-Felder entsprechend definiert?

  • Sind alle Relationen zwischen den Klassen definiert?

  • Zeigt ein Blick in ein DB Tool die erwarteten Felder? Fehlen welche oder sind welche zu viel in der DB? Sind alle Namen sinnvoll?

Ansichten

  • Haben alle Klassen mindestens ein Title-Layout?

  • Reichen die Informationen aus dem Title-Layout aus um das Objekt klar zu identifizieren?

  • Haben alle Klassen die in einer Liste angezeigt werden mindestens ein List-Layout?

  • Reichen die Informationen in den List-Layouts aus um die Objekte zu identifizieren und um die wichtigen Vergleiche zwischen den Objekten anzustellen?

  • Haben alle Klassen für die ein Detail angezeigt wird mindestens ein Detail-Layout?

  • Sind die Informationen im Detail-Layout sinnvoll sortiert und gruppiert?

    • Wichtige Infos zuerst?

    • Pflichtfelder sollten eine Validierung beinhalten.

    • Keine Pflichtfelder in zusammenklappbaren Gruppen platzieren.

    • Sind zusammengehörige Infos in nahe beieinander?

    • Falls zu viele Infos für einer Seite, Tabs eingesetzt?

    • Sind die Detail-Layout im Vergleich mit anderen Detail-Layouts konsistent beschriftet und aufgebaut?

    • Werden je nach Status/Datenlage unnötige Felder ausgeblendet?

    • Sind nur dort Captions definiert wo es auch wirklich nötig ist?

    • Werden wo möglich bestehende Captions/PluralCaptions von Klassen verwendet?

  • Code: Werden die Layouts in der Reihenfolge Title, List, Detail definiert?

Menü (Hauptnavigation)

  • Menu Einträge: Menu Item Caption setzen, wenn diese nicht aus den Meta-Daten der Klasse genommen werden soll. Falls benötigt, dann sollte die Caption in allen verwendeten Sprachen gesetzt werden.

Sollte die Menu Item Caption nicht gesetzt und das Target eine Liste sein, wird die Plural Caption der Liste verwendet. Sollte das Target ein Detail sein wird die Detail Caption verwendet.

Regeln für Codierung

Reihenfolge in der Builder Datei

Bitte die folgende Reihenfolge beachten:

  1. AddClasses

  2. AddPaths

  3. AddProperties

  4. AddLayouts - wo dies benötigt wird

Code Style

Builder stellt ein Fluent-API zur Verfügung. Für die Bessere Lesbarkeit

  • Builder.Add.Xxx... Add mit auf der Builder Zeile

    • Danach weitere Enrichments auf neue Zeile

  • Reihenfolge Enrichments: DB relevante Einstellungen wichtiger darum zuerst.

    • Eher Oben

      • Id

      • Transient

      • IsNotNullable

      • Default

    • Eher runter

      • Visibility

      • Captions

        • Immer gleiche Reihenfolge der Sprachen - konsistent z.B. 1. en 2. de

  • keine doppelte Leerzeilen. Wenn nötig evtl. noch Kommentar über Abschnitt

  • Wann immer möglich keine eigenen Parser verwendet. Stattdessen immer die vorhandenen Builder-Methoden für Expressions verwenden. Fehlende Methode melden. Falls ein Parser verwendet werden muss, immer den “Strict”-Mode verwenden!

AddClasses(…)

Hier werden die Klassen in der folgenden Reihenfolge definiert

  • normalen Klassen

  • Enum-basierten Klassen

definiert.

AddPaths(…)

Add.Relation -> fügt Relation-Properties (Hin- und Rückrichtung) und indirekt einen Path ins Model ein. Falls Relationen mit Daten-Ownership (Cascading) daherkommen, dann solle die Relation in der Klasse definiert werden, welche die Daten besitzt.

AddProperties(…)

  • MetaType.Text immer mit Länge, ausser Property ist transient oder calculated.

  • Einstellungen für Properties werden in folgender Reihenfolge gesetzt;

    • NotNull

    • Transient

    • Alles was in dieser Liste nicht definiert ist, sortiert danach, wie stark die Datenbank davon beeinflusst wird

    • Control

    • Caption (Immer Englisch und Deutsch setzen, mit Englisch zuerst)

    • Description (Immer Englisch und Deutsch setzen, mit Englisch zuerst)

    • Instruction (Immer Englisch und Deutsch setzen, mit Englisch zuerst)

    • Configure / ListConfiguration

  • Reihenfolge - Alle nacheinander

    1. Properties, CalculatedProperties

    2. Actions, Sorts, Index

    3. Breadcrumbs

  • Falls Properties für mehrere Klassen definiert werden Kommentare für Abtrennung verwenden:

    // Person
    Elements.Person.Add("Name", MetaType.Text, 100)
    ...
    
    // Addresse
    Elements.Adresse.Add("Strasse", MetaType.Text, 100)
    ...

AddLayouts(…)

  • Reihenfolge der Layouts

    • Title

    • List(s)

    • Detail(s)

  • Wenn das Layout in einem separatem Builder erstellt wird, wird von der CuiSandboxLayoutBuilderBase Klasse geerbt.

  • In Layouts keine zusätzlichen Core-Elemente definieren (Properties, Relations, Actions)

  • In den normalen Klammern des using Statements werden keine Einstellungen gesetzt, wie zB. Caption, diese werden innerhalb des Codeblockes am Anfang gesetzt.

  • In C# zur Sicherhet immer die klassische Form anwenden:

    using(var layout = …))
    {
      layout.Add.Link(…)
    }
  • Wenn das Layout in einem separaten Builder erstellt wird immer die generierten Metadaten verwenden.

  • Wenn die AddLayouts Methode sehr gross wird, können die List, Title, Detail und Graphic Layouts in einzelne Methoden ausgelagert werden, dabei ist folgende Reihenfolge einzuhalten;

    • AddTitle(metadata, elements)

    • AddLists(metadata, elements)

    • AddDetails(metadata, elements)

    • AddGraphics(metadata, elements)

  • No labels