
Ivan
26.01.2018
20:28:29
ребята, такой вопрос.
Есть сущность Database, которая представляет базу данных, которую можно сдампить и восстановить из дампа, причём в полях сохраняется информация вроде даты последнего восстановления после dump или import. Хочется юзать что-то вроде $db->import($pathToDump) и $db->dump($pathToDump). Нужно ли в таком случае передавать в методы объект, который действительно будет делать работу с базой и файлами? Или создавать отдельный объект, который будет вызывать эти методы и делать работу с файлами?
то есть типа
$db->import($path, $dbManager)
или
$dbManager->import($database, $path)
или что-то типа
$dbAssistantFactory->create($database)->dump($path);

Google

Sergey
26.01.2018
20:32:45

Ivan
26.01.2018
20:33:21
Лог, размер базы и прочее

Sergey
26.01.2018
20:34:13
что будет если мы начали лить дамп и что-то пошло не так? мы должны как-то это отображать в логах?

Ivan
26.01.2018
20:35:31
ох, это важно?)

Sergey
26.01.2018
20:35:43
ну так)

Ivan
26.01.2018
20:36:26
а если рассмотреть оба варианта?

Sergey
26.01.2018
20:36:52
ну в любом случае я бы сервис аргументом передал

Ivan
26.01.2018
20:37:07
дело не конкретно в этом примере, часто я сталкиваюсь с мыслью, что неплохо было бы в сущность добавить зависимость
но вроде как нельзя такое делать

Sergey
26.01.2018
20:37:23
ну тебе никто не мешает это делать)

Ivan
26.01.2018
20:37:58
а ты делаешь так?
ну вот есть DatabaseManager с методами drop(database) create(database) dump(database) import(database)

Sergey
26.01.2018
20:39:05
у тебя есть 2 варианта:
- double dispatch, то есть через аргументы метода
- "заинджектить" через конструктор + postLoad доктрины - но что бы то было валидно у тебя ВСЕ методы твоей сущности должны пользоваться этой зависимостью.

Google

Ivan
26.01.2018
20:39:28
и в каждом методе по одному аргументу, принимающего database на вход
почему-то хочется переместить логику в сам database
вроде как дальше от процедурного подхода

Sergey
26.01.2018
20:41:28

Ivan
26.01.2018
20:43:25
что, $entity->__construct(DbMan $m) вызывать, или reflection?
рефлекшн, я так понял

Sergey
26.01.2018
20:43:59
ну да, конструктор то вызвался уже один раз и больше низя
но я так ни разу не делал и таки задач как у тебя у меня небыло... я не очень уверен что Database это сущность

Ivan
26.01.2018
20:44:41
да я чет такого не видел, чтобы люди делали

Sergey
26.01.2018
20:44:55
вот допустим используются у меня на проекте Doctrine и Prooph
и я хочу подружить сущность пруфовскую с доктриновской
они ж обе просто 2 объекта
сервис - тоже просто объект... и если я не вижу ничего плохого в том что бы засунуть сущность в сущность, то и сервис в сущность засунуть не проблема по идее....
тут к слову мнение других мне было бы интересно)

Ivan
26.01.2018
20:46:40
даже если просто Embeddable

Sergey
26.01.2018
20:47:10

Google

Sergey
26.01.2018
20:47:28
весь вопрос - что такое DatabaseManager и что у него внутри?
много ли там внутри зависимостей?
а и еще важный вопрос - является ли эта сущность частью кор домена?

Ivan
26.01.2018
20:48:10
внутри передача шеллу запуск mysqldump,mysql
домен..

Sergey
26.01.2018
20:48:50
короч.... если не уверен - лучше пока передавай сервис как аргумент в сущность

Ivan
26.01.2018
20:48:51
приложение, база данных, файлы

Sergey
26.01.2018
20:49:03
и не выдумывай) проще будет потом откатывать задумку
то есть например у тебя был бы сервис DatabaseManager и например...
на вход подается какой-то идентификатор базы и что сделать
и нам нужно вести лог этого добра. Поговорим о логах. Мы могли бы ввести TracableDatabaseManager какой как декоратор и там вести аудит действий над базой

Ivan
26.01.2018
20:51:02
допустим

Sergey
26.01.2018
20:51:12
отсюда вопрос - что у тебя внутри сущности Database?
какие данные из этой сущности нужны для проведения операций?

Ivan
26.01.2018
20:51:43
название базы внутри
самое простое

Sergey
26.01.2018
20:52:10
ну то есть данные для подключения например мы можем вынести в VO

Ivan
26.01.2018
20:52:26
пусть в VO
DBConnection

Google

Sergey
26.01.2018
20:52:40
public function import(Dump $dump) {
$dump->load($this->credentials);
}
а Dump уже имеет внутри себя DatabaseManager или его часть, умеет из файла читать или это сделала фабрика какая
public function export(): Dump;

Ivan
26.01.2018
20:53:59
export(DumpFactory $df)
только если так
не?

Sergey
26.01.2018
20:54:25
почему?
ты можешь лениво инициализировать его
ну я дума это все же разные штуки должны быть

Admin
ERROR: S client not available

Sergey
26.01.2018
20:54:48
короч хз
сложна
я бы тупо логгер юзал)
и декоратор
и VO с данными о базе

Ivan
26.01.2018
20:55:44
да у меня часто такие дилеммы возникают, как правильно mailer->send(email) или email->send()

Sergey
26.01.2018
20:57:02
mailer->send(email)
главное что бы не mailer->sendOneEmail, mailer->sendAnotherEmail

Ivan
26.01.2018
20:57:56

Google

Ivan
26.01.2018
20:58:06
email = new Email(transport, message);
email->send();

Sergey
26.01.2018
20:58:22
допустим у тебя есть 100 разных имейлов
с каким вариантом связанность будет больше/меньше?

Ivan
26.01.2018
20:59:16
а как её посчитать?

Sergey
26.01.2018
20:59:30
email->send() - 100 классов зависят от транспорта.
send(email) - 1 класс зависит от транспорта
а как её посчитать?
примитивно - сколько модулей разделяют одну и ту же зависимость. У тебя по хорошему число зависимостей между модулями должно быть сведено к разумному минимуму

Ivan
26.01.2018
21:01:18
ведь меняется message

Sergey
26.01.2018
21:01:31
а... у тебя текст сообщения тоже в аргументы..

Ivan
26.01.2018
21:01:31
одного класса

Sergey
26.01.2018
21:01:40
не, это тоже херня, абстракция которая ничего не делает

Sergey
26.01.2018
21:01:54
@fes0r ты летом на php framework days приезжаешь?

Sergey
26.01.2018
21:01:55
mailer->send(WelcomeMessage)

Sergey
26.01.2018
21:02:15
там уже c2p

Sergey
26.01.2018
21:02:16
ну и могу, могу про тесты вещать

Sergey
26.01.2018
21:02:21
не
давай за trunk based

Sergey
26.01.2018
21:02:26
про солид не хочу

Sergey
26.01.2018
21:02:54
ну у народа начнет пригорать)

Sergey
26.01.2018
21:05:41
ммм... пригорать...