Проверяет понимание принципов связанности и зацепления как метрик качества архитектуры программного обеспечения.
Связанность (coupling) и зацепление (cohesion) — это две фундаментальные метрики качества архитектуры программного обеспечения. Они помогают оценить, насколько хорошо спроектирована система с точки зрения модульности, гибкости и удобства поддержки.
Связанность показывает, насколько сильно один модуль зависит от другого. Высокая связанность означает, что изменения в одном модуле с большой вероятностью потребуют изменений в других. Низкая связанность — это цель, так как модули становятся независимыми и их можно разрабатывать, тестировать и изменять по отдельности.
Пример высокой связанности (плохо):
class OrderService {
private Database db = new Database();
public void createOrder(Order order) {
db.save(order);
EmailService.sendEmail(order);
}
}Пример низкой связанности (хорошо):
class OrderService {
private Database db;
private EmailService emailService;
public OrderService(Database db, EmailService emailService) {
this.db = db;
this.emailService = emailService;
}
public void createOrder(Order order) {
db.save(order);
emailService.sendEmail(order);
}
}Зацепление показывает, насколько элементы внутри одного модуля связаны между собой и направлены на выполнение одной задачи. Высокое зацепление — это хорошо, так как модуль становится сфокусированным и понятным. Низкое зацепление означает, что модуль делает слишком много разрозненных вещей.
Пример низкого зацепления (плохо):
class Utils {
public static double calculateTax(double price) { ... }
public static void sendEmail(String to, String msg) { ... }
public static void connectToDatabase() { ... }
}Пример высокого зацепления (хорошо):
class TaxCalculator {
public double calculateTax(double price) { ... }
public double applyDiscount(double price, double discount) { ... }
}Стремитесь к низкой связанности и высокому зацеплению. Это делает код более гибким, тестируемым и лёгким для поддержки. Данный подход применяется при проектировании любых систем, от микросервисов до монолитов, и является основой для многих архитектурных паттернов, таких как Dependency Injection и модульная архитектура.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию