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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Это один из примеров ситуации, когда использование синглтона может быть частично оправдано.

    class LoggerFactory {
      static $instance = null;
      public static create() {
        if (!is_null(static::$instance)) {
          return static::$instance;
        }
         static::$instance = new Logger('name');
         // ну т.д.
         return static::$instance;  
     }
    }
    
    // используется вроде бы так
    $logger = LoggerFactory::create();


    Код я не проверял, но идея примерно такая.
    Ответ написан
    Комментировать
  • Как лучше организовать работу нескольких классов под одним началом?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Ваш пример не совсем продуман.
    Логичнее было бы предположить, что есть некоторый общий интерфейс, который будет объединять все классы и при этом представлять общие функции над операндами различных типов.
    Допустим, вам нужно будет выполнять сложение с двумя аргументами.
    Например так:

    $math = new Calculator(); // в данном случае Number плохое имя, т.к. обозначает число, а не аггрегатор вычислительных операций
    echo $math->sum(1, 2); // вернет 3
    echo $math->sum(1.3, 2.7); // вернет 4.0


    В данном случае один и тот же метод применяется к двум операндам различных типов. Вроде бы все красиво, но не совсем. В данном случае методы являются чистыми функциями и логичнее было бы их вызывать как статические методы, например так:

    echo Calculator::sum(1, 2); // вернет 3
    echo Calculator::sum(1.3, 2.7); // вернет 4.0


    Реализация класса будет выглядеть примерно так

    class Calculator 
    {
      /**
       * Метод предназначен для суммирования двух аргументов 
       * @param number $firstArgument первый аргумент
       * @param number $secondArgument второй аргумент
       */
      public static function sum($firstArgument, $secondArgument) 
      {
        return $firstArgument + $secondArgument;
      }
    }


    В данном случае не нужно изобретать велосипедов, т.к. все функции работы над числами универсальны.
    Ответ написан
    3 комментария
  • Как правильно спроектировать параметры товаров для категорий в интернет-магазине?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    attribute_group [id, name, order]
    attribute [id, group_id, name, order]
    attribute_value [id, value]
    product_attribute [product_id, attribute_id, attribute_value_id]


    У разных товаров могут быть атрибуты объединенные в группы. Их можно сортировать по полю order.
    При необходимости, вы можете создать связь между категориями и группами атрибутов.
    category_attribute [category_id, group_id]
    Не бойтесь, будут сложные запросы, но ввиду декомпозиции объем данных будет уменьшен.
    Сложность запросов легко нивелируется кэшированием.
    А до миллионов товаров в таблицах нужно еще дорасти.
    Ответ написан
    3 комментария