Skip to content

lady-logic/SolidExcersises

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SOLID Exercises

Ein C# .NET 8.0 Projekt mit praktischen Übungen zu den SOLID-Prinzipien der objektorientierten Programmierung.

📋 Übersicht

Dieses Repository enthält sechs verschiedene Übungen, die jeweils eines der SOLID-Prinzipien demonstrieren. Jede Übung zeigt sowohl die problematische Implementierung als auch die verbesserte Lösung nach den SOLID-Prinzipien.

🎯 SOLID-Prinzipien

  • S - Single Responsibility Principle (SRP)
  • O - Open/Closed Principle (OCP)
  • L - Liskov Substitution Principle (LSP)
  • I - Interface Segregation Principle (ISP)
  • D - Dependency Inversion Principle (DIP)

🚀 Getting Started

Voraussetzungen

  • .NET 8.0 SDK oder höher
  • Visual Studio 2022 oder Visual Studio Code
  • C# Entwicklungsumgebung

📚 Übungen

Exercise 1: Single Responsibility Principle (SRP)

Problem: Die Exersise1_Invoice Klasse hat mehrere Verantwortlichkeiten - Rechnung generieren, speichern und drucken.

Lösung: Aufteilen in separate Klassen:

  • InvoiceService - Rechnung generieren
  • InvoiceRepository - Rechnung speichern
  • InvoicePrintPdfService - Rechnung drucken

Dateien:

  • Exersise1/Exersise1.cs (Problem)
  • Exersise1/InvoiceService.cs (Lösung)
  • Exersise1/InvoiceRepository.cs (Lösung)
  • Exersise1/InvoicePrintPDFService.cs (Lösung)

Exercise 2: Open/Closed Principle (OCP)

Problem: Die Exersise2_ShapeAreaCalculator Klasse muss für jede neue Form modifiziert werden.

Lösung: Verwendung von Interfaces und Polymorphismus:

  • IShape Interface mit CalculateArea() Methode
  • Jede Form implementiert IShape
  • ShapeAreaCalculator arbeitet mit dem Interface

Dateien:

  • Exersise2/Exersise2.cs (Problem)
  • Exersise2/IShape.cs (Lösung)
  • Exersise2/Circle.cs, Rectangle.cs, Square.cs (Implementierungen)
  • Exersise2/ShapeAreaCalculator.cs (Verbesserte Lösung)

Exercise 3: Liskov Substitution Principle (LSP)

Problem: Die Exersise3_DiscountCalculator Klasse verwendet String-Vergleiche für verschiedene Kundentypen.

Lösung: Vererbungshierarchie mit korrekter Substitution:

  • ICustomerType Interface
  • RegularCustomer, PremiumCustomer, NoDiscountCustomer Implementierungen
  • CustomerTypeFactory für Objekterstellung

Dateien:

  • Exersise3/Exersise3.cs (Problem)
  • Exersise3/ICustomerType.cs (Interface)
  • Exersise3/RegularCustomer.cs, PremiumCustomer.cs (Implementierungen)
  • Exersise3/DiscountCalculator.cs (Verbesserte Lösung)

Exercise 4: Liskov Substitution Principle (LSP) - Vererbung

Problem: Die Exersise4_ElectricEngine Klasse verletzt LSP durch Werfen einer Exception.

Lösung: Korrekte Vererbungshierarchie:

  • Bird Basisklasse
  • IFlyable Interface für flugfähige Vögel
  • Eagle implementiert IFlyable
  • Penguin implementiert nur Bird

Dateien:

  • Exersise4/Exersise4.cs (Problem)
  • Exersise4/Bird.cs, IFlyable.cs (Lösung)
  • Exersise4/Eagle.cs, Penguin.cs (Implementierungen)

Exercise 5: Interface Segregation Principle (ISP)

Problem: Das Exersise5_IDevice Interface zwingt Klassen dazu, Methoden zu implementieren, die sie nicht benötigen.

Lösung: Aufteilen in spezifische Interfaces:

  • IPrintDevice - für Druckfunktionalität
  • IScanDevice - für Scanfunktionalität
  • IFaxDevice - für Faxfunktionalität

Dateien:

  • Exersise5/Exersise5.cs (Problem)
  • Exersise5/IPrintDevice.cs, IScanDevice.cs, IFaxDevice.cs (Spezifische Interfaces)
  • Exersise5/SimplePrinter.cs (Implementierung)

Exercise 6: Dependency Inversion Principle (DIP)

Problem: Die Exersise6_OrderService Klasse ist direkt von einer konkreten Datenbankimplementierung abhängig.

Lösung: Abhängigkeiten umkehren durch Interfaces:

  • IOrderRespository Interface definieren
  • OrderRepository implementiert das Interface
  • OrderService verwendet Dependency Injection

Dateien:

  • Exersise6/Exersise6.cs (Problem)
  • Exersise6/IOrderRespository.cs (Interface)
  • Exersise6/OrderRepository.cs (Implementierung)
  • Exersise6/OrderService.cs (Verbesserte Lösung)

🔧 Projektstruktur

SolidExcersises/
├── SolidExcersises.sln
├── SolidExcersises/
│   ├── SolidExcersises.csproj
│   ├── Program.cs
│   ├── Exersise1/          # Single Responsibility Principle
│   ├── Exersise2/          # Open/Closed Principle  
│   ├── Exersise3/          # Liskov Substitution Principle
│   ├── Exersise4/          # Liskov Substitution Principle (Vererbung)
│   ├── Exersise5/          # Interface Segregation Principle
│   └── Exersise6/          # Dependency Inversion Principle

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages