Задать вопрос

Проектирование веб-программы, правильно ли я сделал?

Здравствуйте. Учусь писать гибкие программы в соответствии с MVC, SOLID и т.д.
Мне нужен модуль управления задачами. Скажите пожалуйста, правильно ли я составил классы?
Я сделал унаследование от абстрактных классов и следование интерфейсам, что бы в будущем, если появятся новые вида класса Task или TasksManager, то я мог просто создать очередного наследника например AbstractTasksManager и модифицировать или дополнить функционал скрипта не меняя содержимого других классов.

<?php

class Task extends AbstractTask implements TaskInterface
{
}

class TasksManager extends AbstractTasksManager implements TasksManagerInterface
{

}

class AbstractTasksManager implements asksManagerInterface
{
    public function find(TaskInterface $task)
    {
        /** Внедрить метод find в TasksManager правильно?
         * Или он должен быть в отдельном классе?
         * Метод find использует скоупы Yii2
         */
    }

    public function create(TaskInterface $task)
    {
        /** Содержимое метода */
    }

    public function update(TaskInterface $task)
    {
        /** Содержимое метода */
    }

    public function delete(TaskInterface $task)
    {
        /** Содержимое метода */
    }
}
  • Вопрос задан
  • 2424 просмотра
Подписаться 2 Оценить Комментировать
Решение пользователя Сергей Протько К ответам на вопрос (3)
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
AbstractTask нужен только для DRY. В вашем случае он пока лишний, чуть что добавите позже. Даже больше, можно пока даже интерфейс отдельно не делать. Если в будущем нам понадобится добавить еще одну реализацию скажем... Task-а или TaskManager-а, выделение инетфейса класса вам сделает любая нормальная IDE. Назовете этот интерфейс TaskManager и будет у вас реализация оного ScheduledTaskManager и DBTaskManager... для примера. А клиентский код такие штуки не затронет вовсе.

Советую вооружиться PhpSpec и таким образом проверять насколько удобно вы спроектировали API ваших сервисов.
Ответ написан