Software Engineering Principles: DRY, KISS, and YAGNI
DRY (Don't Repeat Yourself)
Principle: The DRY principle emphasizes the importance of reducing repetition within code. Repetition can lead to more errors, higher maintenance costs, and inconsistency. When the same piece of code or logic appears in multiple places, it should be abstracted out into a single location that can be reused.
Example:
Without DRY:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public double divide(int a, int b) {
return a / b;
}
public int addAndSubtract(int a, int b, int c) {
return a + b - c; // repeated addition and subtraction logic
}
}
With DRY:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public double divide(int a, int b) {
return a / b;
}
public int addAndSubtract(int a, int b, int c) {
return subtract(add(a, b), c); // reuse add and subtract methods
}
}
KISS (Keep It Simple, Stupid)
Principle: The KISS principle advocates for simplicity in design and implementation. The idea is to avoid unnecessary complexity, making code easier to understand, maintain, and debug.
Example:
Without KISS:
public class OrderProcessor {
public void processOrder(Order order) {
if (order != null && order.getItems() != null
&& !order.getItems().isEmpty()
&& order.getCustomer() != null) {
// complex processing logic
for (Item item : order.getItems()) {
// process each item
}
} else {
// handle invalid order
}
}
}
With KISS:
public class OrderProcessor {
public void processOrder(Order order) {
if (!isValidOrder(order)) {
// handle invalid order
return;
}
// simple processing logic
for (Item item : order.getItems()) {
// process each item
}
}
private boolean isValidOrder(Order order) {
return order != null && order.getItems() != null
&& !order.getItems().isEmpty()
&& order.getCustomer() != null;
}
}
YAGNI (You Aren't Gonna Need It)
Principle: YAGNI encourages developers to avoid adding functionality until it is necessary. This helps in reducing the complexity and avoiding wasted effort on features that may never be used.
Example:
Without YAGNI:
public class UserManager {
public void createUser(String username, String password) {
// create user
}
public void createUser(String username,
String password, String email,
String phoneNumber, String address) {
// create user with additional details
}
}
With YAGNI:
public class UserManager {
public void createUser(String username, String password) {
// create user
}
}
Summary
- DRY (Don't Repeat Yourself): Avoid duplication of code by abstracting repeated logic into reusable methods or components.
- KISS (Keep It Simple, Stupid): Keep code simple and straightforward to make it more understandable and maintainable.
- YAGNI (You Aren't Gonna Need It): Do not add functionality until it is necessary, preventing unnecessary complexity.
These principles collectively help in writing clean, maintainable, and efficient code.
Comments
Post a Comment