Skip to content

Wartung 2026-04-06: Architektur-Compliance und Verbesserungen #31

@stho32

Description

@stho32

Wartung 2026-04-06: Architektur-Compliance und Verbesserungen

Build- und Test-Status

Pruefung Ergebnis
dotnet build --configuration Release Erfolgreich (3 Warnungen)
dotnet test 125 Tests bestanden, 0 fehlgeschlagen
Warnungen 3x CS8625 (null-literal in non-nullable) in ResultTests.cs und BotEndToEndScenarioTests.cs

Architektur-Compliance: Soll vs. Ist

Verglichen mit der Architektur-Vorlage dotnet-library.

Kriterium Soll (Vorlage) Ist (Projekt) Status
Solution-Struktur Domain + Specialized Domain + Utility + Tests Domain + Server.Domain + CommandLineArguments + Cli + Tests + 3 Legacy-Projekte ABWEICHUNG
Layered Dependencies Specialized -> Shared -> Utility Server.Domain -> Domain -> CommandLineArguments OK
Result Pattern Result<T> mit Success/Failure, protected ctor, implicit operator Result<T> mit Success/Failure, public ctor, KEIN implicit operator ABWEICHUNG
Nullable enabled Alle Projekte <Nullable>enable</Nullable> Alle Projekte haben Nullable enabled OK
TreatWarningsAsErrors Alle Projekte <TreatWarningsAsErrors>true</TreatWarningsAsErrors> KEIN Projekt hat TreatWarningsAsErrors ABWEICHUNG
IsPackable/IsTestProject Alle Testprojekte mit <IsPackable>false</IsPackable> und <IsTestProject>true</IsTestProject> Nur Bot.Tests hat beide Attribute; Domain.Tests und Server.Domain.Tests fehlen beide ABWEICHUNG
NUnit.Analyzers In allen Testprojekten Nur in Bot.Tests vorhanden ABWEICHUNG
Global Using NUnit.Framework In allen Testprojekten <Using Include="NUnit.Framework" /> Nur in Bot.Tests vorhanden ABWEICHUNG
File-scoped Namespaces namespace X; ueberall 57 Dateien file-scoped, 38 Dateien block-scoped (v.a. Bot, Cli, ConsoleClient) ABWEICHUNG
Immutable Domain Models Records fuer Domain-Modelle LnacMessage, ReceivedMessage, CommandLineParameters als Records OK
Namespace-Organisation Spiegel der Ordnerstruktur Konsistent in Domain und Server.Domain OK
CI/CD Workflow ci.yml mit Build+Test auf ubuntu+windows, Coveralls Vorhanden, korrekt konfiguriert fuer .NET 10.0 OK
Release Workflow Vorhanden mit SemVer, Tag-basiert release.yml mit workflow_dispatch, SemVer, Cross-Platform Publish OK
CodeQL SAST .github/workflows/codeql.yml gefordert FEHLT komplett ABWEICHUNG
Dependabot nuget + github-actions weekly Vorhanden und korrekt konfiguriert OK
build.ps1 build, test, pack, clean build, test, publish, clean -- referenziert Legacy-Projekte (Server, ConsoleClient, Bot) ABWEICHUNG
Coverage-Konfiguration coverlet.msbuild in allen Testprojekten, lcov-Format Vorhanden, aber Domain.Tests und Server.Domain.Tests verwenden zusaetzlich coverlet.collector OK
.gitignore Umfassend fuer .NET Vorhanden, aber weniger umfassend als Vorlage (fehlt: nupkg/, *.nupkg, *.dll, *.exe, *.pdb, Packages/) ABWEICHUNG
Security Pattern IAccessControl mit FixedTimeEquals Vorhanden und korrekt implementiert OK
Pipeline Pattern IMessageProcessor + Collection + Factory Vorhanden und korrekt implementiert OK
Anforderungen-Verzeichnis Vorhanden Vorhanden (1 Anforderung: R00001 Migration .NET 10) + Legacy Requirements-Ordner OK

Legacy-Projekte in der Solution

Folgende Projekte existieren als Verzeichnisse im Source-Ordner, sind aber nicht mehr in der .sln referenziert:

Projekt Typ Status
LocalNetAppChat.Server ASP.NET Web (Legacy-Server) Nicht in .sln, nicht gebuildet
LocalNetAppChat.ConsoleClient Console App (Legacy-Client) Nicht in .sln, nicht gebuildet
LocalNetAppChat.Bot Console App (Legacy-Bot) Nicht in .sln, nicht gebuildet

Diese wurden durch LocalNetAppChat.Cli (Unified CLI) ersetzt. Die build.ps1 referenziert diese Legacy-Projekte aber noch im publish-Befehl.

Verbesserungsvorschlaege

Prioritaet HOCH

  1. TreatWarningsAsErrors in allen Projekten aktivieren
    Kein einziges .csproj hat <TreatWarningsAsErrors>true</TreatWarningsAsErrors>. Dies ist eine zentrale Qualitaetsanforderung der Architektur-Vorlage. Die aktuell 3 Warnungen (CS8625) muessen vorher behoben werden (mit null! statt null in den Tests).

    • Betrifft: Alle 7 .csproj-Dateien in der Solution
  2. CodeQL SAST-Workflow hinzufuegen
    Die Vorlage fordert .github/workflows/codeql.yml fuer automatische Sicherheitsanalyse. Dieser fehlt komplett. Besonders relevant fuer ein Netzwerk-Tool mit API-Key-Authentifizierung und File-Storage.

  3. IsPackable/IsTestProject in Domain.Tests und Server.Domain.Tests ergaenzen
    Nur Bot.Tests hat <IsPackable>false</IsPackable> und <IsTestProject>true</IsTestProject>. Die beiden anderen Testprojekte sollten diese ebenfalls setzen, um versehentliches NuGet-Packaging zu verhindern.

Prioritaet MITTEL

  1. NUnit.Analyzers in alle Testprojekte
    Nur Bot.Tests hat NUnit.Analyzers. Domain.Tests und Server.Domain.Tests fehlt dieses Paket. Die Analyzers finden haeufige Testfehler zur Compile-Zeit.

  2. Global Using fuer NUnit.Framework in allen Testprojekten
    Nur Bot.Tests hat <Using Include="NUnit.Framework" />. Fuer Konsistenz in allen Testprojekten hinzufuegen.

  3. Result-Konstruktor auf protected aendern und implicit operator ergaenzen
    Der Konstruktor von Result<T> ist public statt protected wie in der Vorlage. Ausserdem fehlt der implizite Konversionsoperator (public static implicit operator Result<T>(T value)), der ergonomischeren Code ermoeglicht.

  4. build.ps1 aktualisieren: Legacy-Referenzen entfernen
    Der publish-Befehl referenziert die drei Legacy-Projekte (Server, ConsoleClient, Bot). Dieser sollte auf LocalNetAppChat.Cli umgestellt werden, analog zum release.yml Workflow.

  5. Block-scoped Namespaces auf file-scoped migrieren
    38 von 95 C#-Dateien verwenden noch block-scoped Namespaces (namespace X { }). Die Vorlage fordert file-scoped Namespaces (namespace X;). Hauptsaechlich betroffen: Bot, Cli, ConsoleClient, Bot.Tests.

Prioritaet NIEDRIG

  1. Legacy-Projektverzeichnisse entfernen
    Die drei nicht mehr genutzten Projekte (Server, ConsoleClient, Bot) existieren noch als Verzeichnisse. Da sie nicht in der Solution sind, koennen sie entfernt werden, um Verwirrung zu vermeiden.

  2. .gitignore erweitern
    Die .gitignore ist funktional, aber weniger umfassend als die Vorlage. Fehlende Eintraege: *.nupkg, nupkg/, *.dll, *.exe, *.pdb, *.cache, project.lock.json, [Dd]ebug/, [Rr]elease/, [Bb]in/, [Oo]bj/ (Gross/Klein-Varianten), [Pp]ackages/.

  3. NUnit-Version in Domain.Tests und Server.Domain.Tests vereinheitlichen
    Bot.Tests verwendet NUnit 4.5.1, aber NUnit3TestAdapter 6.2.0. Domain.Tests und Server.Domain.Tests verwenden ebenfalls NUnit 4.5.1 und NUnit3TestAdapter 6.2.0. Die Versionen sind konsistent, aber der Adapter-Name "NUnit3TestAdapter" ist historisch -- fuer NUnit 4.x koennte der neuere Adapter geprueft werden.

Zusammenfassung

Kategorie Anzahl
Kriterien geprueft 20
Compliant (OK) 11
Abweichung 9
Compliance-Quote 55%
Verbesserungsvorschlaege HOCH 3
Verbesserungsvorschlaege MITTEL 5
Verbesserungsvorschlaege NIEDRIG 3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions