Warum C# nicht nur eine Sprache, sondern ein ganzes Universum an Werkzeugen ist
\nWenn ein Entwickler gerade erst in die Welt von .NET eintaucht, denkt er oft: „C# ist cool, aber was kann ich jetzt sofort tun?“ Die Antwort ist einfach: Bibliotheken nutzen. Das C#-Ökosystem ist so reichhaltig, dass es manchmal scheint, als gäbe es für jede Aufgabe bereits eine fertige Lösung auf NuGet. Und das ist großartig, denn beliebte C#-Bibliotheken ermöglichen es, das Rad nicht neu zu erfinden, sondern sich auf die Geschäftslogik zu konzentrieren.
\nIn diesem Artikel werden wir uns das Ökosystem der .NET-Bibliotheken ansehen, die jeder Entwickler wirklich braucht. Wir werden nicht einfach nur Namen aufzählen – ich zeige Codebeispiele, erkläre, wo was eingesetzt wird, und gebe praktische Tipps. Los geht's!
\n\nProtokollierung: Serilog vs NLog – Kampf der Titanen
\nProtokollierung ist das Erste, worüber man nachdenken sollte. Ohne Logs sind Sie blind. Die Bibliothek Serilog ist zum De-facto-Standard in der .NET-Welt geworden. Warum? Weil sie Logs überall hin senden kann: in eine Datei, die Konsole, Elasticsearch, eine Datenbank. Und das mit minimaler Konfiguration.
\nBeispiel: Serilog in ASP.NET Core einrichten
\nusing Serilog;\n\nLog.Logger = new LoggerConfiguration()\n .WriteTo.Console()\n .WriteTo.File("logs/myapp-.txt", rollingInterval: RollingInterval.Day)\n .CreateLogger();\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Host.UseSerilog();\n\nvar app = builder.Build();\napp.MapGet("/", () => "Hello World!");\napp.Run();\nNLog ist ebenfalls ein leistungsstarkes Werkzeug, erfordert aber mehr Konfiguration in XML. Wenn Sie es einfach und schnell möchten – wählen Sie Serilog. Wenn Sie die volle Kontrolle benötigen – NLog. Aber für 90% der Projekte ist Serilog die optimale Wahl.
\n\nEntity Framework Core: ORM, das man nicht fürchten muss
\nDie Arbeit mit Datenbanken ist der Schmerz eines jeden Entwicklers. C#-Bibliotheken für die Datenbankarbeit teilen sich in zwei Lager: schwere ORMs (Entity Framework) und leichte (Dapper). Entity Framework Core (EF Core) ist ein leistungsstarkes Werkzeug, das SQL für Sie generiert. Es ist ideal für komplexe Domänenmodelle.
\nBeispiel: Einfaches CRUD mit EF Core
\npublic class User\n{\n public int Id { get; set; }\n public string Name { get; set; }\n}\n\npublic class AppDbContext : DbContext\n{\n public DbSet<User> Users { get; set; }\n}\n\n// Verwendung\nusing var db = new AppDbContext();\nvar user = new User { Name = "Alexej" };\ndb.Users.Add(user);\ndb.SaveChanges();\nEs gibt jedoch einen Haken: EF Core kann bei komplexen Abfragen langsam sein. Für hochbelastete Systeme verwenden Sie besser Dapper – ein Micro-ORM, das um ein Vielfaches schneller arbeitet, aber das manuelle Schreiben von SQL erfordert.
\nWann sollte man Dapper wählen?
\n- \n
- Wenn maximale Leistung benötigt wird \n
- Bei einfachen Abfragen (CRUD ohne komplexe Logik) \n
- Wenn Sie keine Angst vor SQL haben \n
using var connection = new SqlConnection(connectionString);\nvar users = connection.Query<User>("SELECT * FROM Users WHERE IsActive = @Active", new { Active = true });\n\nAutoMapper: Mapping ohne Schmerz
\nWenn Sie in C# programmieren, stoßen Sie ständig auf die Umwandlung eines Objekts in ein anderes. DTO → Entity, Entity → ViewModel. Manuelles Mapping ist langweilig und fehleranfällig. AutoMapper automatisiert diesen Prozess.
\nBeispiel: Profil einrichten
\npublic class UserProfile : Profile\n{\n public UserProfile()\n {\n CreateMap<User, UserDto>()\n .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"));\n }\n}\n\n// Verwendung\nvar config = new MapperConfiguration(cfg => cfg.AddProfile<UserProfile>());\nvar mapper = config.CreateMapper();\nvar dto = mapper.Map<UserDto>(user);\nTipp: Übertreiben Sie es nicht mit AutoMapper. Wenn das Mapping zu