Задать вопрос
  • Хорошую helpdesk систему?

    @StepEv
    Вы внимательно почитайте. Это костыль на костыле.

    А самое печальное, что решение плохо масштабируется по бюджету. Неавторизованные пользователи не могут создавать тикеты в Jira. А за каждого авторизованного придётся платить. Модель оплаты «за операторов» для helpdesk более «правильная».
  • Посоветуйте уютный team collaboration / project management tool

    @StepEv
    Нет, не могу.

    Более-менее приличные trac и redmine не на php (хотя бесплатные). Но, поверьте, после Jira на них даже смотреть не хочется.
  • Закон Деметры. Нужен ли?

    @StepEv
    EugeneOZ

    Ну так напишите, наконец, как правильно реализовать пример из вопроса.
    Вот этого $user->getPosts()->getLast()->getComments();

    Только не пишите lastPostCommentsForUser(User user, PostsRepo posts, CommentsRepo comments), это ООП из какой-то параллельной вселенной.
  • Закон Деметры. Нужен ли?

    @StepEv
    Davert, в том то и дело, что этот пример к «пытаясь сделать всё правильно» не относится никак. Это вообще полная ересь, что бы это понять никакой теории даже не нужно знать, достаточно здравого смысла. Я, честно говоря, в шоке от некоторых комментариев (не будем показывать пальцем :). Правильно было как раз изначальный код в вашем вопросе.
  • Закон Деметры. Нужен ли?

    @StepEv
    EugeneOZ, вы сейчас о чём? Я честно не понял вашего посыла. «Моя версия LoD», это какая? Процитируйте, будьте добры. Где в обсуждении говнокод, а где нет?

    Да, цена соблюдения LoD и вообще low coupling — длинные цепочки вызовов. Но в большинстве случаев это не составляет никакой проблемы. Там где возникают проблемы с производительностью, приходится отступать от принципа. Ну так это принцип, а не свод законов Хамурапи, это нормально.

    А там где принцип соблюдается, вознаграждение — легче понимать и поддерживать код.

    Ну и уже становящийся традиционным вопрос — приведите правильный код для примера из вопроса. И, желательно, поясните почему он правильный.
  • Закон Деметры. Нужен ли?

    @StepEv
    И насчёт способности читать:

    Под каким углом у вас lastPost из

    lastPost = posts.getLast();

    вдруг стал

    Objects created by M?


    читаем внимательно про угол:

    Objects created by M, or by functions or
    methods which M calls, and objects in global
    variables are considered as arguments of M.

    Я даже переведу выделенную часть — «Объекты, созданные методами, которые M вызывает, считаются аргументами M».
  • Закон Деметры. Нужен ли?

    @StepEv
    То есть на прямые вопросы к вашему решению вы ответить не способны?

    Переход на личности — грамотный подход к дискуссии, не спорю. Не менее грамотный, чем ваши примеры кода.
  • Закон Деметры. Нужен ли?

    @StepEv
    Никто вам нигде про «правильную» реализацию не говорил.

    everzet, Я просил привести правильную, раз вы заявили, что в вопросе «не соответствует LoD».

    Извините, ваш код говно. Когда вам понадобится предпоследний пост или пост третий с конца, вы для каждого их них по методу создадите?

    И на тему закона Деметры — в скольких методах в вашем примере придётся менять реализацию в случае изменения интерфейса класса User? И это вы называете low coupling?

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

    Ещё разок процитирую, читайте до конца:
    (Objects created by M, or by functions or
    methods which M calls, and objects in global
    variables are considered as arguments of M.)


    P.S. Вашему руководству не показывайте топик, уволят :)
  • Закон Деметры. Нужен ли?

    @StepEv
    to everzet

    А что, в русском MSND вас не устраивает?
    В русском MSDN перевод англоязычной статьи. Выбрал я именно этот источник (ок, не первоисточник) за развёрнутое пояснение с примерами.

    Далее, вы выдрали кусочек из формулировки закона. Следуя закону в такой формулировке, вы наделите метод таким излишним знанием об окружении, что код поддерживать не сможете. Кстати, если вы подумаете над реализацией метода купить_молоко() из вашего примера, то увидите, что именно она будет нарушать LoD.

    Упущенная вами, и важная, часть закона:
    (Objects created by M, or by functions or
    methods which M calls, and objects in global
    variables are considered as arguments of M.)


    Выделил я ту часть, которая делает мой пример абсолютно верным, снимая ваше утверждение о нарушении закона в третьей и четвёртой строках.

    И наконец, можем мы увидеть вашу правильную реализацию примера из начального вопроса?

    P.S. Мне очень интересно, как вы кодируете, не используя цепочек вызовов :)
  • Закон Деметры. Нужен ли?

    @StepEv
    davert, ваш пример не правильный. И вы сами написали почему.

    Метод getCommentsOfLastPost(), во-первых, избыточен и слишком специален, корректнее написать общий метод с обращением к комментариям произвольного поста. Во-вторых, наделяет класс User совершенно ему лишним знанием о методах класса Post и о том, что класс Post содержит комментарии. Как раз хороший дизайн, в соответствии с законом Деметры, разделит знания:

    Класс «пользователь» знает о том, что у пользователя есть посты.
    Класс Post знает, что у постов есть комментарии.
    Что бы получить комментарии мы должны у пользователя получить объект поста, а уже у этого объекта попросить его комментарии.
  • Закон Деметры. Нужен ли?

    @StepEv
    Ок, мой bad pattern перепишем без проперти :)

    class User
    {
      Vector<comment> getComments ()
       {
          comments = this.getPosts()->getLast();
          return comments.getComments();
       } 
    }
    
  • Закон Деметры. Нужен ли?

    @StepEv
    Граждане, пример не в кассу. Не путайте алгоритм (последовательность действий) и цепочку вызовов взаимодействущих объектов. Ни в одной реальной, нормально спроектированной системе примера как в комментарии everzet быть не может. Эта хрень к ОО не имеет вообще никакого отношения.
  • Закон Деметры. Нужен ли?

    @StepEv
    При подготовке ответа можно обратиться к первоисточникам, например, msdn.microsoft.com/ru-ru/magazine/cc947917.aspx#id0070040
  • Закон Деметры. Нужен ли?

    @StepEv
    Уважаемый, все ваши комментарии к этому вопросу к закону не имеют никакого отношения. Пример с магазином, извините, вообще чушь какая-то.

    Вы же сами себе противоречите «Суть закона в ограничении любого знания объекта о коллабораторах, если эти коллабораторы этому объекту напрямую не были даны.» И? Не соблаговолите пояснить, каким именно образом и где мой пример нарушает LoD даже в вашей формулировке?
    И как было бы правильно, на ваш взгляд, реализовать данный сервис «получить комментарии к последнему посту пользователя Вася Пупкин?».
  • Как наказать недобросовестного владельца сайта, зарабатывающего на чужом труде?

    @StepEv
    Обсуждайте это со специалистом — юристом, а не здесь.

    Но вообще-то не сыграет.
  • Два ключа для разной расшифровки зашифрованного текста, возможно ли?

    @StepEv
    Забыл сказать — вот этот вариант ручкой на бумаге обладает очень высокой стойкостью. До тех пор пока не скомпроментирован ключ.
  • Два ключа для разной расшифровки зашифрованного текста, возможно ли?

    @StepEv
    Ни одна нормальная криптосистема не шифрует данные на пароле пользователя. Данные шифруются ключом. А вот ключ генерируется на основе пароля и/или зашифрован на пароле.

    Длина пароля просто не достаточна для сколько либо стойкого шифрования.
  • Два ключа для разной расшифровки зашифрованного текста, возможно ли?

    @StepEv
    Да дались вам эти два текста. TrueCrypt скрывает сам факт существования контейнера. И это намного эффективнее.

    Если найти или создать свой софт, который будет в один контейнер писать два шифротекста, то обнаружить этот факт будет не так уж сложно по косвенным признакам, главный из которых само наличие такого софта.