@symfony_php

Страница 601 из 1418
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
или что-то типа $dbAssistantFactory->create($database)->dump($path);
сущность она потому что тебе надо лог хранить что когда делал?

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
а как это через конструктор заинжектить, я не понял
ну берешь и засовываешь зависимость в конструктор сущности, а потом через postLoad ее обратно засовываешь когда доктрина тебе ее достает

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 объекта

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

тут к слову мнение других мне было бы интересно)

Sergey
26.01.2018
20:47:10
если database не сущность, то что?
ну окей, допустим сущность

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
public function export(): Dump;
как реализовать?

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
mailer->send(email)
почему так а не второй вариант? я не вижу этого

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
про солид не хочу

давай за trunk based
ммм... думаешь?

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

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

Страница 601 из 1418