Referenz
Die Modelle des Pakets auf einen Blick: was drin liegt, wo sie in den Demos laufen und warum das Paket ohne eigene Beispiele auskommt.
Das Paket bringt die Modelle der LikertSkala und der FrageAntwort mit, dazu die Texte, die diese
Modelle selbst brauchen, und den Template-Namen UiEditor.Kompetenzen.FrageAnwort. Builder,
EditorTemplates, Skripte und Stile liegen in FMH.Komponente.Kompetenzen.
Was drin liegt
| Namespace | Typen |
|---|---|
FMH.Komponente.Kompetenzen.Ui.Controls.LikertSkala |
LikertSkalaModel, LikertSkalaGroupModel |
FMH.Komponente.Kompetenzen.Ui.Controls.LikertSkala.Daten |
LikertSkalaRow<T>, LikertSkalaHeader<T>, LikertSkalaHeaderColumn<T>, Editable, AssessmentLegend, DegreeOfAchievementCalculator<T>, DegreeOfAchievementResult |
FMH.Komponente.Kompetenzen.Ui.Controls.FrageAnwort.Daten |
FrageAntwortViewModel, BeurteilungViewModel, AntwortResultat, AntwortStatus, AntwortTyp, Rolle |
FMH.Komponente.Kompetenzen.Resources |
KompetenzenValidierungResources, Beschriftungen, Meldungen und Legende in Deutsch, Englisch, Französisch und Italienisch |
UiEditor |
Kompetenzen.FrageAnwort, der Name des EditorTemplates für [UIHint] |
Warum dieses Paket keine Beispiele hat
Ein Beispiel muss etwas zeigen, und zeigen kann dieses Paket nichts. Es hat keine EditorTemplates,
keine Builder, keine Skripte und keine Stile. Jedes denkbare Beispiel würde die Modelle über
FMH.Komponente.Kompetenzen rendern und wäre damit eines der Beispiele, die unter Kompetenzen
schon stehen.
Anders als Basis.Validierung und FileUpload.Validierung definiert das Paket auch kein eigenes
Validierungs-Attribut. Der Name folgt dem Muster der Sub-Komponenten, nicht dem Inhalt. Die
Prüfregeln an FrageAntwortViewModel kommen von ausserhalb:
| Eigenschaft | Regel | Herkunft | wo sie gezeigt wird |
|---|---|---|---|
AntwortTextFachDelegierter, AntwortTextFachFremdDelegierter |
Begründung Pflicht, sobald die Antwort JaMitVorbehalt oder Nein ist ([RequiredIfContains]) |
FMH.Komponente.Basis.Validierung |
Basis.Validierung › RequiredIfContains |
| dieselben | höchstens 4000 Zeichen ([MaxLength]) |
.NET | Basis › Textarea, Anleitung «Weitere Konfigurationen» |
AntwortFachDelegierter, AntwortFachFremdDelegierter |
Antwortmöglichkeiten über [AdditionalMetadata] |
FMH.Komponente.Basis.Validierung |
Kompetenzen › FrageAntwort |
Das Paket liefert dazu nur die Meldungstexte FrageAnwort_GrundValidation und
FrageAntwort_Max400. Den Adapter für die Prüfung im Browser bringt die Basis mit.
Warum das Paket trotzdem geprüft ist
1. Die Demos laufen gegen genau diese Assembly. Die WebUI verweist auf FMH.Komponente.Kompetenzen,
und das verweist auf FMH.Komponente.Kompetenzen.Validierung. Eine zweite Definition der Typen gibt
es nicht mehr. Jede Kompetenzen-Demo, die rendert, belegt damit, dass die Modelle aus diesem Paket
gefunden, gebunden und angezeigt werden.
| Typ | läuft in |
|---|---|
LikertSkalaModel, LikertSkalaRow<T>, LikertSkalaHeaderColumn<T> |
LikertSkala › Grundfall und allen übrigen LikertSkala-Beispielen |
LikertSkalaHeader<T> |
intern in LikertSkalaBuilder, also in jeder Skala |
Editable, AssessmentLegend |
LikertSkala › Selbst- und Fremdeinschätzung |
DegreeOfAchievementCalculator<T>, DegreeOfAchievementResult |
LikertSkala › Erfüllungsgrad, gerechnet im LikertSkalaBuilder |
LikertSkalaGroupModel |
LikertSkala › Mehrere Skalen gruppieren |
FrageAntwortViewModel, BeurteilungViewModel, AntwortTyp, UiEditor.Kompetenzen.FrageAnwort |
FrageAntwort › Grundfall |
Rolle |
FrageAntwort › Rollen |
AntwortResultat, AntwortStatus |
FrageAntwort › Ereignis FrageAntwortStatus |
2. Die Logik der Modelle ist mit Unit-Tests abgedeckt. Was die Modelle selbst tun, prüft
FMH.Komponente.Kompetenzen.Tests, das die Assembly über FMH.Komponente.Kompetenzen bezieht:
| Testklasse | prüft |
|---|---|
FrageAntwortViewModelTests |
die Auswahlliste (Ja/Nein, JaMitVorbehalt und Unbeantwortet nur bei alten Werten, nie doppelt), GibAntwortTypText, HatFachFremdDelegierterBeantwortet, IstUneinig |
DegreeOfAchievementCalculatorTests |
Erfüllungsgrad je Kompetenzgruppe und je Spalte, je nach Editable mit der passenden Einschätzung |
DegreeOfAchievementResultTests |
Prozentwert (abgeschnitten, ohne Vorgabe leer) und TotalFulfilled |
LikertSkalaRowTests |
GetAssessmentValue je Editable |
LikertSkalaHeaderColumnTests |
Vorgabebreite und WidthInPixel |
AssessmentLegendTests |
CSS-Klassen und Texte der Legende |
FrageAnwortTests |
das EditorTemplate, gerendert über EditorFor mit [UIHint(UiEditor.Kompetenzen.FrageAnwort)]. Liefen Konstante und Dateiname auseinander, schlügen diese Tests fehl |
3. Beim Umzug hat sich kein Namespace geändert. Die Typen haben FMH.Komponente.Kompetenzen.Ui.Controls.*
behalten. Dass die Demos, die Templates und die Tests mit unveränderten using übersetzen, belegt
das bei jedem Build.
4. Es gibt nichts einzurichten. Die Modelle sind gewöhnliche Klassen ohne Registrierung, Middleware oder Konfiguration. Was ausfallen könnte, liegt ausserhalb des Pakets und steht auf der Seite Vorbedingungen.
Aus welchem Paket die Typen kommen
Die Modelle liegen seit September 2026 in einem eigenen Paket,
FMH.Komponente.Kompetenzen.Validierung. FMH.Komponente.Kompetenzen verweist darauf: Wer die
Komponente referenziert, bekommt sie unverändert mit, und kein using ändert sich.
| liegt in | was |
|---|---|
FMH.Komponente.Kompetenzen.Validierung |
die Modelle oben, KompetenzenValidierungResources, UiEditor.Kompetenzen |
FMH.Komponente.Kompetenzen |
LikertSkalaBuilder<T>, LikertSkalaGroupBuilder, LikertSkalaColumnCollection<T>, die Fabrikmethoden, die EditorTemplates, die Bundles, KompetenzenResources mit den Texten der Templates |
Die Namespaces …Ui.Controls.LikertSkala und …Ui.Controls.LikertSkala.Daten verteilen sich
damit auf zwei Assemblies. Für den Aufrufer ist das unsichtbar.
Zwei Dinge fallen beim Umstieg auf:
- Die Texte der Modelle heissen neu
KompetenzenValidierungResources.<Name>, vorherKompetenzenResources.<Name>. Beide Klassen liegen im NamespaceFMH.Komponente.Kompetenzen.Resources, dasusingbleibt also gleich. Betroffen ist nur, wer diese Texte selbst liest. - Quellkompatibel, aber nicht binärkompatibel. Eine Assembly, die vor der Auftrennung übersetzt
wurde, sucht die Modelle weiter in
FMH.Komponente.Kompetenzen. Alle FMH-Pakete gemeinsam heben und einmal vollständig neu bauen.
Nur die Modelle referenzieren
Ein ViewModel-Projekt, das die Gruppen und Zeilen der LikertSkala zusammenbaut oder eine
FrageAntwortViewModel hält, kann allein das Modell-Paket ziehen:
<ItemGroup>
<PackageReference Include="FMH.Komponente.Kompetenzen.Validierung" Version="..." />
</ItemGroup>
Es kommt mit FMH.Komponente.Basis.Validierung und dem Framework aus, ohne Razor Class Library,
Basis und Infrastruktur. Was dabei fehlt: die Builder, die Fabrikmethoden und die EditorTemplates,
also alles, was rendert. Die serverseitige Prüfung von FrageAntwortViewModel bleibt vollständig,
die Attribute kommen aus Basis.Validierung mit.
Welche Pakete es gibt und was sie voneinander verlangen, steht im Bereich Wie funktionierts unter Pakete.