• Стоит ли все function собирать в одном файле?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Стоит ли все function собирать в одном файле?


    Нет. Группируйте функции по их зоне ответственности. В целом вам просто должно быть удобно. Попробуйте через неделю найти какую-нибудь функцию и засеките сколько на это у вас ушло времени.

    И стоит ли плодить около 5-10 функций для разборчивости кода?


    Стоит. Это называется декомпозицией. Когда вы одну большую задачу (отобразить страницу) дробите на маленькие подзадачи. Велик шанс что на других страницах что-то из этого пригодится. Да и просто так удобнее. Маленькое проще править чем большое.
    Ответ написан
    5 комментариев
  • Как получить точную время?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вам надо на уровне конфигурации сервера настроить автоматическое обновление серверного времени по ntp:

    www.howtogeek.com/tips/how-to-sync-your-linux-serv...
    Ответ написан
  • Имеет ли смысл использовать SPL структуры данных в php с выходом 7й версии?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    собственно в самой статье приводятся бенчмарки отдельного расширения для php которое вводит замену spl-ским структурам. Вывод мне кажется напрашивается сам собой. Это расширение даже предлагалось в ядро впихнуть но только на уровне хотелок.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    делайте это в контроллере, формируйте там какой-то массивчик с тем чанком данных которые вам нужно сейчас. Контроллеры как раз для такой логики и нужны, не нужно грузить презентационную логику в пассивную вьюшку (шаблон).
    Ответ написан
    Комментировать
  • Репозиторий для поиска в БД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вроде return new Post($searchResult) ?


    php.net/manual/en/reflectionclass.newinstancewitho...

    То что вам предстоит написать называется гидраторы. Они берут стэйт и запихивают его в объект минуя методы (напрямую по мэппингу). Альтернатива - сделать статический метод конструктор который будет делать все то же самое но уже почти без рефлексий. Третий вариант - прокси классы (то как это делает доктрина).
    Ответ написан
  • Как продвинуть в сеть нечто новое для рунета?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как народ привлечь без рекламы

    никак. Что бы люди пользовались вашим ресурсом они должны о нем узнать.
    Ответ написан
    4 комментария
  • Как код склонения подогнать под счетчик?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    есть в ангуляре такая штука как ngPluralize. Можно копать в этом направлении.
    Ответ написан
    Комментировать
  • Пару вопросов по MVC. Поможете?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что посоветуете?


    1) забудьте об MVC на минутку. Пока мы будем говорить о "модели". Так же пока забудьте о представлении, HTML и т.д. Только PHP, только хардкор.
    2) вынесите все действия в отдельные классы, что-бы у вас был по объекту на действие
    3) вынесите все дублирование в отдельные объекты (это что бы конкретизировать что подразумевается под вторым пунктом) и вынесите все в зависимости
    4) поскольку у вас стало много объектов - воспользуйтесь контейнером зависимостей
    5) для работы с базой данных имеет смысл организовать DAO например. То есть что бы все что относится к SQL что бы было как-то сокрыто в них а не размазано по всем объектам. Так же можете почитать на тему Table Data Gateway.

    То есть у нас должно сформироваться некое API. Нам нужны новости - достаем объект, который умеет их доставать. Нужно что-то еще - для этого чего-то тоже найдется объект умеющий это. Как он будет это делать - дело третье.

    Далее, надо добавить прослойку, которая будет конвертировать данные возвращаемые предыдущим API, в тот формат, в который мы хотим. Это будут контроллеры по сути. Для них нужен роутер, шаблонизатор и т.д.

    Дабы устранить дублирования UI-ки имеет смысл выделить отдельные компоненты (например блок с последними новостями - отдельный UI компонент). То есть страница будет собираться как-бы из кусочков.

    Ну как-то так.
    Ответ написан
    Комментировать
  • Существует ли упрощённый СУБД-независимый язык для описания структуры реляционной БД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    yuml.me можно пробовать тамошним DSL-ем строить модель данных в UML.

    Так же можете поискать какую-нибудь тулзу для организации миграций поддерживающих описание схемы в yaml.
    Ответ написан
  • AngularJS - зачем оборачивать service`s в factory?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    функции Login, SetCredentials и т.д. являются методами сервиса AuthenticationService.

    Фабрика - это способ задания сервиса. Разница между .service и .factory лишь в том, что в первом случае вы засовываете конструктор объекта, а во втором - функцию фабрику которая сама разберется как объект создавать.

    // вот сервис
    function MyService (dep1, dep2) {
        this.dep1 = dep1;
        this.dep2 = dep2;
    }
    
    // А вот фабрика этого сервиса
    function myServiceFactory(dep1, dep2) {
    
        return new MyService(dep1, dep2);
    }
    
    // в результате в контейнере зависимостей будет крутиться
    // 2 инстанса одного и того же сервиса. То есть одинаковый результат
    // при двух подходах.
    module.service('foo', MyService)
    module.factory('bar', myServiceFactory);


    В вашем примере фабрика используется баналь потому что надо где-то сделать объект и для этого используется "модуль". Ну мол для инкапсуляции и т.д. Что бы не экспоузить зависимости вашего объекта никому. Ну а Object.create просто для слабых духом.
    Ответ написан
    Комментировать
  • В каком месте mvc системы должен находиться шаблонизатор?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1. шаблонизатор - это просто компонент. Они ничего не знает о MVC и прочем булшите
    2. шаблонизатор нужен там, где формируется view. Вы можете крутиться как хотите, но view на бэкэнде пассивно (это http ответ) в подавляющем большинстве реализаций (даже в ADR от которого нынче писают кипятком), а это значит что формироваться view будет в контроллере. Отсюда делаем вывод что шаблонизатор должен дергаться в контроллере а такого компонента как view у нас просто нет. Возможны хэлперы которые помогают формировать этот самый view но не более.
    3. управление зависимостями не входит в зону ответственности MVC. Оно обычно где-то сверху, тут можно заюзать Dependency Injection (только готовый контейнер если, свой не пишите).
    4. трейты в контроллерах нормальная тема просто потому что на код контроллеров нам должно быть плевать с высокой колокольни. Если вам не плевать на код контроллеров - возможно вы там делаете что-то чего контроллеры делать не должны. Ну и опять же это будет трейт который будет делегировать задачу шаблонизатору а не реализовывать его.
    5. что-то мне подсказывает что "модель" в вашей системе координат это какой-нибудь класс для работы с базой данных. Если так - вы не поняли зачем вообще вводится это разделение.
    Ответ написан
    Комментировать
  • Можно ли поставить laravel на хостинг?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если подготовите билд локально (то есть локально поставите все зависимости и т.д.) - то почему нет?
    Ответ написан
    Комментировать
  • Как выполнить php скрипт в tpl?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Комментировать
  • Если ли смысл в ОРМ для моего случая?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Есть ли порог когда использование ОРМ становится неоправданым/оправданым? Где он?


    ORM-ки нужня для одного конкретного типа систем - OLTP (On-line Transaction Processing)

    У меня в приложении есть модуль который работает с бд Solr


    У вас есть документы, в документно ориентированных базах данных нет связей. Потому вам нужен Object Document Manager а не Object Relational Mapper.

    Каждый документ может имеет поле parent в котором сохранен ид-родителя, дальше ид-прародителя, дальше прапрародителя итд.


    Вот тут у меня есть сомнения, поскольку это связи, а связи это не ок. Тем более что вам иногда нужно забирать больше одного документа.

    бд в режиме read-only


    Тогда точно не нужна ORM/ODM.

    Итд. Иногда какая-то дополнительная трансформация.


    Но это же трансформация на уровне формирования результата выборки, так? Если так - то это опять же не та проблема.
    Ответ написан
    3 комментария
  • Что почитать про геометрию в программировании?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    2) Погуглите чего на тему "Машинная графика". Есть курсы лекций на эту тему.
    1) тут точно не скажу, но очень напоминает задачки на кластеризацию. Мол находим в массиве точек центр, самую удаленную точку от него и это будет радиус окружности.
    Ответ написан
    Комментировать
  • Как осуществить ограничение на количество запросов к API?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    гуглить "Rate limit"
    Ответ написан
    Комментировать
  • UML-модель Yii2-приложения, реализация интерфейса группой классов. Как? Есть ли под это паттерн?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нужен спец по ООП и UML, который работал в своё время с MVC!


    Наблюдаю тут несостыковку. Обычно когда говорят о UML - вот все эти вещи вроде контроллеров и т.д. расписываются на уровне компонентов. В UML обычно описывают только доменную логику, то есть то что важно.

    В любом случае в Yii такие подходы работают очень плохо. Там вы не ООП делаете а базу данных проектируете (это чуть разные вещи), и все остальное уже от этого отталкивается.

    Если вы хотите по UML фигачить (не понятно зачем правда, но это уже ваше дело), то имеет смысл брать какую ORM заточенную под ОО-first (по сути Doctrine2 из ныне существующих) и там уже развлекаться. Там профит будет.

    p.s. забудьте об этой бесполезной для бэкэнда аббревиатуре MVC. Пока вы "проектируете контроллеры" - толку от него нет (ну то есть пока у вас логика работы с данными в контроллере).

    Читаю GOF, Зандстру и т.п.


    Почитайте Applying UML and Patterns - Craig Larman - замечательная книга. Еще дядю боба можете почитать (про SOLID). Если вас интересуют темы проектирования то это будет полезно. Еще раз уж заговорили о проектировании логики предметной области - Эрик Эванса - Предметно ориентированное проектирование.

    Задача 1


    1) композиция всегда лучше наследования
    2) наследование нужно для того что бы организовать подтипы. Если у вас есть сущности которые по своей природе требуют наследование - то можно. А так - лучше его избегать. ООП как бы не про наследование вообще.
    3) интерфейсы нужны для того что бы организовать инверсию зависимости и/или полиморфизм подтипов. У Лармана можете почитать про protected variations для того что бы понять зачем их юзать.

    Задача 2


    В UML отношения между типами очень легко и просто отображаются:

    bell_fig10.gif
    - Base[classname] - wrappers для обеспечения ровного обновления самого Yii в дальнейшем, не обращайте внимания.


    Как это не обращать внимания если вы делаете UML ради UML? Пока я не увидел ничего от ООП на вашей диаграмке. Есть структуры данных с публичными пропертями, есть... контроллеры (внезапно) которые мутируют состояние этих структур.... Это не ООП - это процедурное программирование с классами.

    для такой простой задачи я пилю UML исключительно в целях тренинга


    Пока это выглядит как впустую потраченное время, поскольку вы выбрали не лучший инструмент (yii) что бы тренироваться проектировать ОО решения.

    Я рекомендовал бы вам:

    - Разобраться что такое ООП на самом деле (это не про инкапсуляцию. полиморфизм и уже тем более не про наследование ибо все это было еще до ООП и все это кроме наследования является важными принципами структурного программирования). Это про сокрытие состояния и управление зависимостями (связанность, coupling & coheasion у Лармана)
    - Взять более подходящие для проектирования ОО решений инструменты (какой-нибудь модный нынче Laravel + Doctrine2)
    - если хотите продолжать баловатся с Yii сделайте так, что бы логика предметной области ничегошеньки не знала о Yii, тогда вообще не нужно будет заниматься этими Base* классами. Почитайте про Row Data Gateway (это по сути предшевственник ActiveRecord) а именно как оно использовалось в контексте модели предметной области.

    Есть ли под это паттерн?


    Не уверен что нужно, но добавлю. Паттерны - это словарь. Это названия для типичных вещей. Мол "Вася, зафигачть кеширование каталога декоратором репозитория" и Васе понятно что и как делать. Не нужно на них зацикливаться.

    Оригинальная книга по GoF в этом плане так себе, сейчас лучше смотреть в сторону Head First Design Patterns Ну и помимо паттернов нужно разобраться с общими принципами такими как закон деметры, SOLID, GRASP и т.д. Тогда понимание всего будет более системным.
    Ответ написан
    2 комментария