| 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 |
Wartung 2026-04-06: Architektur-Compliance und Verbesserungen
Build- und Test-Status
dotnet build --configuration Releasedotnet testArchitektur-Compliance: Soll vs. Ist
Verglichen mit der Architektur-Vorlage
dotnet-library.Result<T>mit Success/Failure, protected ctor, implicit operatorResult<T>mit Success/Failure, public ctor, KEIN implicit operator<Nullable>enable</Nullable><TreatWarningsAsErrors>true</TreatWarningsAsErrors><IsPackable>false</IsPackable>und<IsTestProject>true</IsTestProject><Using Include="NUnit.Framework" />namespace X;ueberall.github/workflows/codeql.ymlgefordertLegacy-Projekte in der Solution
Folgende Projekte existieren als Verzeichnisse im Source-Ordner, sind aber nicht mehr in der .sln referenziert:
LocalNetAppChat.ServerLocalNetAppChat.ConsoleClientLocalNetAppChat.BotDiese wurden durch
LocalNetAppChat.Cli(Unified CLI) ersetzt. Die build.ps1 referenziert diese Legacy-Projekte aber noch impublish-Befehl.Verbesserungsvorschlaege
Prioritaet HOCH
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 (mitnull!stattnullin den Tests).CodeQL SAST-Workflow hinzufuegen
Die Vorlage fordert
.github/workflows/codeql.ymlfuer automatische Sicherheitsanalyse. Dieser fehlt komplett. Besonders relevant fuer ein Netzwerk-Tool mit API-Key-Authentifizierung und File-Storage.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
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.Global Using fuer NUnit.Framework in allen Testprojekten
Nur Bot.Tests hat
<Using Include="NUnit.Framework" />. Fuer Konsistenz in allen Testprojekten hinzufuegen.Result-Konstruktor auf protected aendern und implicit operator ergaenzen
Der Konstruktor von
Result<T>istpublicstattprotectedwie in der Vorlage. Ausserdem fehlt der implizite Konversionsoperator (public static implicit operator Result<T>(T value)), der ergonomischeren Code ermoeglicht.build.ps1 aktualisieren: Legacy-Referenzen entfernen
Der
publish-Befehl referenziert die drei Legacy-Projekte (Server, ConsoleClient, Bot). Dieser sollte aufLocalNetAppChat.Cliumgestellt werden, analog zum release.yml Workflow.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
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.
.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/.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