<rmcreative>

RSS

Все заметки с тегом «ООП»

Можно уточнить:

    (1)
  1. Делать метод в сущности или нет?

    20 августа 2018

    Вроде простой вопрос, но не так он прост как кажется. Если ударяться в крайности, с одной стороны у нас будут анемичные модели, где сущность не содержит какой-либо логики, а с другой - модели, которые делают слишком много всего, что с ними напрямую не связано. Как выбрать в конкретном случае, стоит ли оставить метод в сущности или вынести в отдельный класс?

    Я для себя вывел несколько критериев оставления метода в сущности. Они, конечно, не покрывают всех случаев, но помогают принять решение.

    1. Метод работает с экземпляром сущности.
    2. Метод работает или только с самой сущностью или с небольшим количеством внешних данных, передаваемых через аргументы.
    3. Метод применим ко всем контекстам, в которых используется сущность.
    4. Метод описывает поведение самой сущности, а не технические детали, такие, например, как сохранение или загрузка из базы.
    49 комментариев
  2. Вызов private-метода из static-метода

    15 февраля 2010

    Вот таким чудом озадачили меня Фёдор (unno.ru) и mihailt.

    class A {
      private function action(){
        echo 1;
      }
      public static function callAction(A $a){
        $a->action();
      }
    }
     
    $a = new A;
    A::callAction($a);
    1. Это работает.

    2. Я сомневаюсь, что могу на 100% верно объяснить, почему оно работает.

    Если вы сможете — обязательно напишите в комментариях.

    update

    Контекст модификаторов — класс, а не объект! И верно это для всех популярных реализаций ООП (на всякий случай проверили АS3 и Java).

    39 комментариев