Ответы пользователя по тегу Паттерны проектирования
  • Чем заменить абстрактную фабрику в данном случае?

    @maxtm
    Make money, not job
    Как бы это глупо не звучало, но замените абстрактную фабрику любой другой фабрикой.

    Class MyDoorFactory {
     public function factory($door) {
      $class = 'MyNamespace\\' . $door;
      return new $class;
     }
    }
    Ответ написан
    Комментировать
  • Как в Фабике методов передать значение свойству объекта?

    @maxtm
    Make money, not job
    У Вас метод uploaded всегда возвращает новый инстанс TruckDelivery, а не ранее созданный
    Ответ написан
  • Как лучше организовать классы с большим числом полей?

    @maxtm
    Make money, not job
    Если свойства известны заранее, то используйте "в лоб".
    Если свойства могут меняться (например, на основе справочника из БД) - то второй вариант.
    Ответ написан
    Комментировать
  • Порекомендуйте источники по алгоритмам проектирования приложений?

    @maxtm
    Make money, not job
    К сожалению, материалов посоветовать не могу, но напишу небольшую заметку из своего опыта.

    Первое, ваше приложение/игра/сервис должен быть разбит на логические блоки.
    Метод дробления - бизнес-задачи, логически разные задачи, зоны ответственности.
    Эти блоки могут быть названы компонентами, модулями, и т.п.

    Далее, нужно разбить модули на составные части, еще не классы - скорее "сервисы".
    Каждый сервис должен обслуживать одну логическую часть системы, например - обработка платежей, или регистрация пользователей.
    Сам сервис может быть представлен целым пакетом классов, библиотек и т.п., главное - у него один вход (интерфейс, класс). Сервисы могут взаимодействовать между собой через внутренне API. Но чем ниже уровень связанности - тем лучше.
    Сервис не должен работать с каким либо видом вывода - он должен предоставлять исключительно программный API.

    Далее, имея начальную декомпозицию по сервисам - можно дробить далее каждый сервис в отдельности, если это уместно и/или возможно до уровня классов/интерфейсов.

    После, вы получаете некий список (на бумаге) модулей, сервисов, классов.
    Имея это Вы можете легко начать разработку фронтенда - будь-то контроллеры, обертка в виде REST-api и т.п.

    Как организовать морду - отдельный вопрос, и зависит от типа задачи.
    Ответ написан
    Комментировать