Pull to refresh
64
0
Дмитрий Л.@DVLev

Senior Developer

Send message
Вы говорите про LifecycleCallbacks (в котором бизнес логике быть не должно) или про внешние EntityListener / DoctrineEventListener, в которых формирование аудита или формирование лога изменений (особенно если этот лог не связан с БД в которой идут изменения, например лог пишется в файл) вполне ОК?

Вот посмотрите пример на самом doctrine
docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#preupdate

public function preUpdate(PreUpdateEventArgs $eventArgs)
    {
        if ($eventArgs->getEntity() instanceof Account) {
            if ($eventArgs->hasChangedField('creditCard')) {
                $this->validateCreditCard($eventArgs->getNewValue('creditCard'));
            }
        }
    }


Валидация номера кредитной карты — это вполне себе бизнес логика.
Вы также внутри EntityListener можете использовать обычные Event через EventDispatcher. Т.е. не реализовывать логику отсылки письма внутри Listener, а вынести ее во вне.
В статье подход упрощенный и акцент сделан не на конкретную реализацию, а на общий принцип.
Никто и не использует Lifecycle Callbacks для бизнес логики. Вряд ли установку текущей даты внутри Entity можно отнести к бизнес-логике.
Если я правильно понял вопрос, то для Вашего случая подходят EntityListener (описаны в статье). Внутри LifecycleEventArgs, который передается в качестве события во внутрь EntityListener, есть ссылка на EntityManager, через который, в свою очередь, через getRepository() Вы можете получить доступ к любому объекту, а также к его изменению.
Лицензированию подлежит не всякая деятельность, а «Лицензия на осуществление геодезических и картографических работ федерального назначения, результаты которых имеют общегосударственное, межотраслевое значение»

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

Совершенно верно. Я писал «делаете скриншот, рисуете в Photoshop какие-то ориентиры, чтобы человек не запутался, выкладываете на свой сайт»
Если используете API — вопросов скорее всего нет.
И еще момент, по приведенной Вами ссылке https://yandex.ru/legal/maps_api/ в п. 1.1 указано следующее:

«1.1. Использование Пользователем Сервиса регулируется настоящим Соглашением, а также»…
«Условиями использования сервиса Яндекс.Карты, размещенным по адресу: https://yandex.ru/legal/maps_termsofuse/»

что, насколько я понимаю, означает что Правила использования Карт являются составной частью условия использования Maps.API
Прошу прощения, НО:

1. Вы не юрист и не владелец компании (насколько я понимаю), поэтому Ваше мнение (с которым я хотел бы согласится) является не более чем Вашей собственной частной позицией. Ни о каком «офицальном комментарии» речи быть не может по определению.

2. Даже если сейчас озвученная Вами позиция соответствует текущему положению дел — нет гарантии что она не изменится, скажем, через полгода в связи с изменением позиции руководства Яндекса по этому вопросу.

3. Карты, который использует Яндекс, не всегда принадлежат самому Яндексу. Т.е. он выступает как Лицензиат, а не как Правообладатель.Т.е. иск может подать не сам Яндекс, а владелец карт.

4. под коммерческим использованием API Яндекс.Карт подразумевается использование в сервисах, *платных для конечного пользователя* — с одной стороны Вы наверное правы (спасибо за ссылку), «Сервис может использоваться Пользователем только в рамках сайтов или приложений, доступных для бесплатного открытого использования неограниченным кругом лиц», с другой стороны, нанося разметку на карту, нарушается «2.3.3. Пользователь может использовать Данные и функции, полученные при помощи Сервиса, только в рамках функциональности, предоставляемой Сервисом.»
Повелся на рекламу и многочисленные отзывы на Amazon — купил себе «Bluedio R+ Legend» за 2 340 руб. на Aliexpress по акции (все наклейки о подлинности на месте).

По факту — на сколько наушники стоят — настолько они и играют.

Если вопрос ставить как «стоят ли наушники заплаченных за них денег» — да стоят — для любителей всего и сразу — это просто Must Have. Соотношение цена / качество отменное.

«Могут ли они заменить хорошие проводные наушники» — нет не могут (сравниваю с Audio Technica M50). Уровень звука сильно отличается как по Bluetooth, так и по проводу. Если Audio Technica — это HiFi усилитель со стационарными колонками, то Bluedio — это музыкальный центр с пластмассовыми колонками. Поэтому, если в наушниках вам важен звук, а не навороты — вариант не для вас.

С другими bluetooth наушниками, к сожалению, сравнить не могу за неимением оных, но если сравнивать например с беспроводными Sennheiser RS 160 — качество звука похожее, хотя Sennheiser стоят раза в три дороже.
В одной из IDE переопределяете порт по которому слушает Debugger

Preferences ->Debugger->Port и соответствующим образом меняете js функцию.
Во многих статьях (включая эту) встречаю мысль, что программисты вокруг — это в основном 20-30 лет. А куда они потом уходят? В менеджеры? PM? Уход в менеджеры — это скорее боковая ветвь развития, когда ты уходишь в управление людьми. В любом случае менеджеров в среднем нужно раз в 5 меньше чем программистов.
По существу вопроса Вы правы — указанный Вами способ удобнее моего. Добавил его в статью.
hstore, jsonb, всякие vartype[] — насколько я понимаю это типы полей — должен понимать.
Посмотрите
https://github.com/dlevsha/nasgrate
на мой взгляд, данный вопрос более менее раскрыт в описании
Поддержка сравнения функций и процедур есть, но она не очень подходит для анализа больших функций.
Думаю в будущем прикрутить для этого полноценный diff
Добавил в текст статьи вариант использования скрипта в консоли.
Индексы можно сравнивать уже сейчас.

Триггеры — думаю можно добавить.

Вы можете просто создать еще одну базу и слить туда свой инсталяционный скрипт.

CREATE DATABASE new_database;
source /[path_to_file]


… сравниваем с имеющейся базой

DROP DATABASE new_database;
SQLYog:
— платная
— только для MySQL
— только под Windows

Compalex (мой скрипт):
— бесплатный
— поддерживает MySQL, PostgreSQL и MSSQL (в перспективе Oracle)
— устанавливается везде где есть php (а он есть практически под любую платформу)
В описанном Вами случае правильнее использовать миграцию баз данных, которая описывает состояние баз данных на определенный момент времени и позволяет откатить базу данных на определенную точку.

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

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity