Can you give an example of refactoring code to follow SRP?
Before (SRP Violation):
public class Invoice
public void GenerateInvoice() { /* logic */ }
public void SaveToDatabase() { /* logic */ }
public void SendEmail() { /* logic */ }
This class has 3 responsibilities: generating, saving, and emailing.
After (SRP-compliant):
public class InvoiceGenerator
public void Generate() { /* logic */ }
public class InvoiceRepository
public void Save(Invoice invoice) { /* logic */ }
public class EmailService
public void Send(Invoice invoice) { /* logic */ }
Now each class has a single reason to change.