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

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Массив используется там, где нужна гибкость. Т.е. там, где разработчик не может предугадать, сколько параметров придёт при вызове метода, какие типы данных будут иметь передаваемые значения и т.п. За такую гибкость разработчик должен платить, создавая код обработки массива, что может быть весьма нетривиальной задачей. Кроме трудоёмкости и сложности кода получите ещё и потерю производительности. Излишней гибкости следует избегать.

    В общем случае лучше передавать либо несколько параметров, либо строго типизированный объект с заданными полями. Причём при передаче большого количества параметров тоже могут быть просадки с производительностью.
    Ответ написан
  • SOLID. Dependency inversion. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Что имеется ввиду под "детали"?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Роберт Мартин в своё время говорил по этому поводу, что не должно быть зависимостей от конкретных классов, а связи должны вести на абстрактный класс или интерфейс. Считайте, что "детали" - суть конкретная реализация, а "абстракция" - это некая выделенная основа, необходимая и достаточная для определения связи.
    Ответ написан
  • Проектирование архитектуры классов модели. Какой из двух вариантов выбрать?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Класс "Заказ" может иметь указатель на экземпляр класса "Заказчик" (в случае ООП это будет ссылка на объект). Каждый "Заказчик" может иметь список "Заказов" (массив указателей на сделанные им заказы).

    "Заказ" должен быть композицией нескольких составных частей - "работ", каждая из которых должна иметь указатель на исполнителя, а "Исполнитель" может иметь массив указателей на "работы", которые ему назначены.

    При таком исполнении не нужно смотреть все заказы, чтобы выявить относящиеся к данному заказчику. И не нужно отдельно выбирать работы для исполнителя. Вы же работаете с классами, а не с таблицами БД: тут логика несколько иная. Реляционные БД основаны на теории множеств, а не на теории взаимосвязанных объектов.
    Ответ написан
    Комментировать