Projekt: TransferX.Domain
Rolle in der Architektur:
Domain Layer ist der fachliche Kern – keine Abhängigkeiten nach aussen. Alle anderen Schichten dürfen Domain referenzieren.
Projektstruktur
TransferX.Domain
| TransferX.Domain.csproj
|
+---Entities
| +---Providers
| | ProviderConfiguration.cs
| |
| \---Transfers
| Transfer.cs
| TransferConfiguration.cs
| TransferItem.cs
|
+---Enumerations
| FileTransferStatus.cs
| ProgressLevel.cs
| ProviderOperation.cs
| SyncChangeType.cs
| TransferOperation.cs
| TransferStatus.cs
|
+---Events
| | IDomainEvent.cs
| |
| +---Providers
| | ProviderConfigurationChangedEvent.cs
| | ProviderRegisteredEvent.cs
| |
| \---Transfers
| FileTransferredEvent.cs
| TransferCompletedEvent.cs
| TransferFailedEvent.cs
| TransferStartedEvent.cs
|
+---Exceptions
| DomainException.cs
| ProviderException.cs
| ProviderNotFoundException.cs
| TransferException.cs
| TransferNotFoundException.cs
|
\---ValueObjects
| Credentials.cs
| FileMetadata.cs
| TransferPath.cs
|
\---Progress
FileProgress.cs
ProgressReport.cs
TransferProgress.cs
Komponenten
Entities (Aggregate Roots)
Klasse
Typ
Beschreibung
Transfer
Aggregate Root
Dateiübertragungsauftrag mit Status-Lifecycle (Pending → Running → Completed/Failed/Cancelled)
TransferItem
Entity
Einzelne Datei im Transfer mit FileTransferStatus
TransferConfiguration
Aggregate Root
Gespeicherte Transfer-Konfiguration (Name, Quelle, Ziel, Operation, CreatedAt) – wiederverwendbar
ProviderConfiguration
Aggregate Root
Provider-Konfiguration (Name, Typ, Credentials, BasePath)
Transfer – Aggregate Root Details
Property
Typ
Beschreibung
Id
Guid
Eindeutige ID des Transfers
SourceProviderId
Guid
ID des Quell-Providers
SourcePath
TransferPath
Quellpfad des Transfers
TargetProviderId
Guid
ID des Ziel-Providers
TargetPath
TransferPath
Zielpfad des Transfers
Operation
TransferOperation
Art der Transfer-Operation
Status
TransferStatus
Aktueller Ausführungsstatus
CreatedAt
DateTime
Zeitpunkt der Erstellung (UTC)
StartedAt
DateTime?
Zeitpunkt des Starts (UTC). null wenn noch nicht gestartet
CompletedAt
DateTime?
Zeitpunkt des Abschlusses (UTC). null wenn noch nicht abgeschlossen
FailureReason
string?
Fehlermeldung bei Status Failed. null sonst
OwnerProcessId
int?
PID des Prozesses, der den Transfer gestartet hat. Für Stale-Transfer-Erkennung bei parallelen Prozessen. null bei älteren Transfers (Legacy)
Methode
Beschreibung
Create(...)
Factory-Methode – erstellt neuen Transfer im Status Pending
Restore(...)
Restore-Methode für Deserialisierung – stellt alle Properties inkl. ownerProcessId wieder her
Start()
Setzt Status auf Running, erfasst StartedAt und speichert Environment.ProcessId als OwnerProcessId
Cancel()
Setzt Status auf Cancelled, erfasst CompletedAt
Complete()
Setzt Status auf Completed, erfasst CompletedAt
Fail(...)
Setzt Status auf Failed, erfasst CompletedAt und optionalen FailureReason
AddItem(...)
Fügt ein TransferItem zur internen Liste hinzu
Value Objects
Klasse
Beschreibung
TransferPath
Normalisierter Pfad (/-Trenner), immutabel, implizite String-Konvertierung
Credentials
Username + Passwort (maskiert in ToString)
FileMetadata
Name, Grösse, LastModified – mit Validierung
TransferProgress
Gesamtfortschritt: Bytes, Dateien, Geschwindigkeit, ETA, ProgressPercent
FileProgress
Dateifortschritt: Bytes, Status, ProgressPercent
ProgressReport
Aggregierter Bericht nach ProgressLevel (Transfer / File / Byte)
Enumerationen
Enum
Werte
TransferStatus
Pending, Running, Completed, Cancelled, Failed
FileTransferStatus
Pending, Transferring, Completed, Failed, Skipped
TransferOperation
Copy, SyncPreview, Sync
ProviderOperation
Connect, GetFolderStructure, GetFiles, GetFileContent, CreateFolder, CreateFile
SyncChangeType
Added=1, Modified=2, Deleted=3
ProgressLevel
Byte, File, Transfer
Exceptions
graph TD
EX["Exception (.NET)"]
DE["DomainException\n(abstrakt)"]
TE["TransferException"]
PE["ProviderException"]
TNF["TransferNotFoundException"]
PNF["ProviderNotFoundException"]
EX --> DE
EX --> TE
EX --> PE
DE --> TNF
DE --> PNF
Domain Events
Event
Auslöser
TransferStartedEvent
Transfer wurde gestartet
TransferCompletedEvent
Transfer erfolgreich abgeschlossen (Dateien + Bytes)
TransferFailedEvent
Transfer fehlgeschlagen (Reason)
FileTransferredEvent
Einzelne Datei übertragen
ProviderRegisteredEvent
Neuer Provider registriert
ProviderConfigurationChangedEvent
Provider-Konfiguration geändert
Transfer Status Lifecycle
stateDiagram-v2
[*] --> Pending : Create()
Pending --> Running : Start()
Running --> Completed : Complete()
Running --> Failed : Fail()
Running --> Cancelled : Cancel()
Pending --> Cancelled : Cancel()
Qualitätsmerkmale
Aspekt
Umsetzung
Keine externen Abhängigkeiten
Nur .NET BCL
Immutabilität
Value Objects als sealed record
Validierung
ArgumentException, ArgumentOutOfRangeException in Konstruktoren
Kapselung
private set bei Entities, Factory-Methoden (Create(), Restore())
C# 12 / .NET 8
Primary Constructors, file-scoped namespaces
XML-Dokumentation
Alle public Members dokumentiert (Deutsch)