Junior — Senior
50
Нарушение принципа слабой связанности в трехслойной системе
Условие задачи
В системе реализованы три уровня: представление (View), контроллер (Controller) и модель (Model). В текущем варианте слой представления напрямую вызывает функции контроллера, а контроллер сразу обращается к модели. Такое взаимодействие нарушает принцип слабой связанности: уровни становятся зависимыми друг от друга, что усложняет замену, тестирование и масштабирование компонентов.
Для исправления следует ввести промежуточный слой‑сервис или использовать паттерн «Facade», чтобы View зависел только от абстракций контроллера, а контроллер – от абстракций модели.
Пример текущего кода (с переименованными функциями):
# View
@app.route("/user/<user_id>")
def fetch_user(user_id):
return ctrl_fetch_user(user_id)
# Controller
def ctrl_fetch_user(user_id):
...
return model_fetch_user(user_id)
# Model
def model_fetch_user(user_id):
return session.query(User).filter(User.id == user_id)
После рефакторинга слой представления будет работать с сервисом, а сервис – с репозиторием модели, что полностью разъединит уровни.