Задать вопрос
  • Ubuntu: Ноутбук для разработчика

    Davert
    @Davert Автор вопроса
    Наверное, возьму, как только появится в продаже. Тоже пока на нем остановился, но в наших магазинах ещё нет (
  • Ubuntu: Ноутбук для разработчика

    Davert
    @Davert Автор вопроса
    Ну значит вам просто не повезло с убунтой ) Мне не нужны gentoo/debian/arch, хочется именно работающую систему с привычным интерфейсом (оужас) Unity. И да, стабильность работы убунты напрямую зависит от того - адаптировано ли под неё железо или нет.

    Бюджет идет от требований: Core i7, SSD, т.е. планирую около 1000-1300$
  • Закон Деметры. Нужен ли?

    Davert
    @Davert Автор вопроса
    Я плохо понимаю все эти общие правила и потому прошу всё-таки двигаться от изначального примера с кодом.

    Например, мне кажется, что в данном примере:

    function lastPostCommentsForUser(User user, PostsRepo posts, CommentsRepo comments)
    {
        lastPost = posts.getLastUserPost(user);
    
        return comments.getUserPostComments(user, lastPost);
    }
    


    Мы самым неэффективным образом превращаем однострочный простой, эффективный и читабельный код в какую-то ересь, при этом ещё методы getUserPostComments и getLastUserPost не определены. Итого, пытаясь сделать всё правильно, мы 1 строчку кода превращаем в 14. И что потом легче рефакторить? Тем более что в данном случае метод зависит сразу от 3х сущностей. Действительно, где тут слабая связность?
  • Закон Деметры. Нужен ли?

    Davert
    @Davert Автор вопроса
    Ок, правильный вариант я себе могу представить:

    $user->getCommentsOfLastPost();
    
    
    class User {
    
      function getCommentsOfLastPost()
      {
       $this->getLastPost()->getComments(); 
      }
    
      function getLastPost()
      {
        $this->getPosts()->getLast();
      }
    
    }
    


    Но как по мне, в данном случае это лишний уровень абстракции. Как ни крути я оперирую только с данными здесь, тут нет каких-то четких бизнес правил: просто комментарии с последнего поста.

    Если мне скажут: а давай мы будем показывать не все комментарии поста, а по комментарию с каждого поста — вся цепочка созданных мной дополнительных функций пойдет лесом. И я подумаю: ну зачем я создавал методы: getLastPost и getCommentsOfLastPost, если мне проще было бы обойтись без них?

    Хотя метод getCommentsOfLastPost может и нужен, его несложно переписать, ну вот getLastPost вообще бесполезен.
  • Закон Деметры. Нужен ли?

    Davert
    @Davert Автор вопроса
    Огромное спасибо за детальный ответ.

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

    То есть правило более общее чем «не делайте больше одного -> вызова в строке», цитата из википедии:

    Для многих современных объектно-ориентированных языков программирования, использующих точку, как оператор доступа к членам класса, закон может быть перефразирован как «Используйте только одну точку».


    Общее правило это скорее: «не обращайтесь не к своему слою» и «не плоди лишнего». Я правильно понял?
  • Закон Деметры. Нужен ли?

    Davert
    @Davert Автор вопроса
    Ну и chained-методы в динамических языках плохи тем, что один из элементов цепи может вернуть не объект, и тогда будет ошибка обращения к методу «не-объекта».

    Проблема решается введением одной простенькой монады. Жаль, это не часто используется :(

    В данном примере мы обращаемся к API доменной модели. И как ни крути мы обьект user не рассматриваем как отдельный API, а лишь, как часть всей доменной модели. А значит мы не боимся использовать их методы у себя, пока мы абсолютно уверены в том, что getPosts вернет коллекцию постов, а getComments коллекцию комментариев.
  • Закон Деметры. Нужен ли?

    Davert
    @Davert Автор вопроса
    да, я не спорю, что есть такие примеры, где это разумно.
    я лишь утверждаю, что есть такие, где это неразумно :)
  • Закон Деметры. Нужен ли?

    Davert
    @Davert Автор вопроса
    Я тут более чем согласен. При этом паттерн «доменная модель Doctrine2» гораздо более известный чем «Закон Деметры».
    Общаясь с сущностями и реляциями, мы действуем по общим принципам, описанным в документации к той же Доктрине.

    Скорее всего можно сформулировать так: должно быть некоторое апи — конечное число классов, хорошо документеринованых, с общими правилами использования. Их мы можем использовать как угодно, пока не нарушем их правила.

    А вот для остальных классов, про которые мы можем знать мало, стоит пользоваться правилом Деметры и не лезть куда не просят :)
  • 100% width в фиксированом гриде

    Davert
    @Davert Автор вопроса
    Да, оно. Оказалось, что у меня есть position:relative в контейнере, но если убрал, то кажется ничего не сломалось )
    Спасибо
  • Как вы попадаете на IT конференции/семинары/etc?

    Davert
    @Davert
    Но на ДОУ всё равно далеко не все события.
  • Как отдавать json в symfony2?

    Davert
    @Davert
    А почему нет? Чтобы ускорить процентов на 20 (минимум) обработку запроса. Нечего Твиг подключать, если он по сути не нужен.
  • Автоматическая генерация тестов для PHP

    Davert
    @Davert
    Ой, только заметил кому я написал =) Вот я идиот %) Anyway, лучше в личке обсудить, если чо.
  • Посоветуйте книги по интернет-маркетингу

    Davert
    @Davert Автор вопроса
    Спасибо, похоже на то что нужно )
  • Посоветуйте книги по интернет-маркетингу

    Davert
    @Davert Автор вопроса
    Почему интернет-маркетинг должен сводится к SEO? Плюс я в теле вопроса оговорил эти штуки. Есть ещё SMM, есть ещё email-marketing, и остальные вкусные штуки…
  • Выбор PHP ORM, ActiveRecord?

    Davert
    @Davert
    Большой. И чо? Мы говорим о разных паттернах и разных подходах.

    Доктрина это головная боль от аннотаций, дополнений, репозиториев, query-builder'а, и т.д.
    Доктрину берите только когда понимаете, что она вам действительно нужна.

    Если же нужен просто ActiveRecord, то Propel наверное самая обширная и юзабельная разработка на PHP.
    Сейчас, кстати, развивается не менее активно, чем доктрина.
  • как быстро найти PHP программиста в Киеве?

    Davert
    @Davert
    Ну согласитесь, в этом логика есть. Всех, кого можно было привлечь деньгами уже забрали крупные аутсорсеры. Нужно привлекать или а) технологиями б) интересными проектами в) свободным графиком г) крутым офисом. Найдите свою фишку и вы найдете человека.
  • Какой выбрать Ubuntu-дистрибутив с Gnome3?

    Davert
    @Davert Автор вопроса
    Беда, установилось но сразу после установки пошел какой-то белый экран (
    Пркалятье какое-то…
  • Какой выбрать Ubuntu-дистрибутив с Gnome3?

    Davert
    @Davert Автор вопроса
    Благодарю. Качаю )