Skip to main content

Single Responsibility Principle (SRP)

What is this?

This principle says:

A module should have one, and just one reason to be changed


Why use this ?

  • Helps the maintenance
  • Help to make a reusable code
  • Less git conflicts

Examples (Java)

Bad example

public class Facture {
private Book book;
private int quantity;
private double percDiscount;
private double percTax;
private double total;

public Facture(Book book, int quantity, double percDiscount, double percTax) {
this.book = book;
this.quantity = quantity;
this.percDiscount = percDiscount;
this.percTax = percTax;
this.total = this.calculateTotal();
}

public double calculateTotal() {
double price = ((book.price - book.price * percDiscount) * this.quantity);
double taxPrice = price * (1 + percTax);
return taxPrice;
}

// Print facture should not be the Facture class responsability!
public void printFacture() {
// do something to print the facture
}

// Save facture should not be the Facture class responsability!
public void saveToFile(String nomeArquivo) {
// do something to save the file
}
}

Good example

// Print Facture now have his own class and responsability!
public class PrintFacture {
private Facture facture;

public PrintFacture(Facture facture) {
this.facture = facture;
}

public void printFacture() {
// do something to print the facture
}
}

// Save Facture now have his own class and responsability!
public class SaveFacture {
Facture facture;

public SaveFacture(Facture facture) {
this.facture = facture;
}

public void saveToFile(String filename) {
// do something to save the file
}
}