💡 1. Enterprise Architektur & Async Pipelines
Führe alle modernen C#-Konzepte zusammen: Unveränderliche Records, Repository-Pattern, sichere Fehlerbehandlung und kooperative Task-Abbrüche:
public class OrderEngine(IOrderRepository repo, ILogger logger) {
public async Task ProcessOrdersAsync(
IEnumerable incoming,
CancellationToken ct = default)
{
var processed = new List();
foreach (var order in incoming) {
// Kooperativer Abbruch bei Server-Timeout:
ct.ThrowIfCancellationRequested();
var validated = order with { IsProcessed = true };
await repo.SaveAsync(validated, ct);
processed.Add(validated);
}
// LINQ Analytics:
var totalRevenue = processed.Sum(o => o.Total);
var topCustomer = processed
.GroupBy(o => o.Customer)
.OrderByDescending(g => g.Sum(x => x.Total))
.First().Key;
return new OrderSummary(processed.Count, totalRevenue, topCustomer);
}
}
Pakete rollen über das Band, Scanner prüfen Barcodes (`Records`), Roboter sortieren nach Destination (`LINQ`), und bei einem Feueralarm stoppt das Band sofort kooperativ (`CancellationToken`).
⚡ 2. Quick-Cheat-Sheet
| Komponente | Verwendetes C# Feature | Architektur-Vorteil |
|---|---|---|
| Datenmodell | Positional Records mit Immutability | Thread-sichere Datenstrukturen |
| Analytics | LINQ Fluent Chaining | Deklarative, lesbare Abfragen |
| Datenzugriff | Repository-Interface mit DI | Testbar mit Mock-Repositories |
| Asynchronität | async/await mit CancellationToken | Nicht-blockierend und ressourcenschonend |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Übergibt man ct nicht an nachfolgende asynchrone Methoden (`SaveAsync(order, ct)`), läuft der I/O-Vorgang trotz Abbruch sinnlos weiter!
Wertet man ein übergebenes `IEnumerable` mehrfach mit `.Count()` und `foreach` aus, wird die Abfrage doppelt ausgeführt. Erst mit `.ToList()` materialisieren!
🧠 4. Diagnostischer Selbst-Check
Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.