Coupling & Cohesion
Definition

Types of Coupling (Worst to Best)

Types of Cohesion (Worst to Best)

Code Examples
// HIGH COUPLING - Tight dependencies
class OrderService {
// Direct dependency on concrete class
private MySQLDatabase database = new MySQLDatabase();
// Depends on internal implementation details
private PaymentGateway gateway = PaymentGateway.getInstance();
public void createOrder(Order order) {
// Directly accessing another class's internals
if (InventoryManager.stock.get(order.productId) > 0) {
database.query("INSERT INTO orders..."); // SQL coupling
gateway.chargeCard(order.user.creditCard.number); // Deep access
}
}
}
// LOW COUPLING - Loose dependencies
class OrderService {
// Depend on interfaces, not implementations
private final OrderRepository orderRepo;
private final InventoryService inventory;
private final PaymentService payment;
// Dependencies injected
public OrderService(OrderRepository orderRepo,
InventoryService inventory,
PaymentService payment) {
this.orderRepo = orderRepo;
this.inventory = inventory;
this.payment = payment;
}
public void createOrder(Order order) {
// Communicate via well-defined interfaces
if (inventory.isAvailable(order.getProductId())) {
orderRepo.save(order);
payment.charge(order.getPaymentDetails());
}
}
}
Cohesion Examples
// LOW COHESION - Unrelated responsibilities
class UserManager {
public User createUser(String name) { ... }
public void sendEmail(String to, String body) { ... }
public Report generateSalesReport() { ... }
public void backupDatabase() { ... }
public double calculateTax(double amount) { ... }
}
// HIGH COHESION - Single, focused responsibility
class UserService {
public User create(CreateUserRequest request) { ... }
public User findById(UserId id) { ... }
public User update(UserId id, UpdateUserRequest request) { ... }
public void delete(UserId id) { ... }
public List<User> findByRole(Role role) { ... }
}
class EmailService {
public void send(Email email) { ... }
public void sendBulk(List<Email> emails) { ... }
public EmailStatus checkStatus(EmailId id) { ... }
}
class TaxCalculator {
public Money calculate(Money amount, TaxRate rate) { ... }
public Money calculateWithExemptions(Money amount, List<Exemption> exemptions) { ... }
}
Microservices Coupling

Reducing Coupling Techniques

Tips & Tricks
