
Sergei
25.02.2017
08:09:04
Ну я как раз про это - считать ли например persistence частью бизне-логики / поведения объекта, или нет?

Sergey
25.02.2017
08:09:35

Sergei
25.02.2017
08:09:42
Если считать - то по моему разумению active record как-то не особо анемично выглядит.

Google

Sergey
25.02.2017
08:10:15
потому что того требует бизнес логика или потому что у тебя есть ограничения в духе "я не могу просто оставить объект висеть в памяти и мне надо куда-то его сохранить, но бизнесу плевать куда и почему"
Ок, убедительно.
persistance layer это часть инфраструктуры. То без чего проект работать не будет но это что-то что не влияет на бизнес логику от слова совсем. И в идеале бизнес логика вообще ничего не должна об этом знать.
но последнего добиться весьма и весьма сложно

Sergei
25.02.2017
08:13:09
Да, собственно оно после вопроса "как соотносится с бизнесом" все стало на свое места.
Потому я и написал "убедительно" - действительно, анемичные модели - это про отсутсвие бизнес-логики в них, а персистентность оно не про бизнес, оно про ограничения технологии.
Таким образом наличие какого-то кода для сохранения в active record на анемичность не то чтобы как-то влияло.
Спасибо!

Sergey
25.02.2017
08:17:38
а можешь сказать чем плохи анемичные модели?)

Sergei
25.02.2017
08:20:29
в моём разумении - примерно тем же, чем и глобальные данные

Sergey
25.02.2017
08:21:03
ну ты можешь схитрить и навесить проверку инвариантов на стэйт, и дергать проверки всякий раз как мы меняем стэйт
ну то есть не все так плохо как тупо с глобальным стэйтом

Sergei
25.02.2017
08:23:22
отсутствием контроля доступа?
раскрытием внутреннией реализации в первую очередь - и отсутстивие контроля доступа я рассматриваю как последствие оного

Google

Sergei
25.02.2017
08:24:56
данные вынужденно торчат наружу - сложнее отследить кто когда и по каким правилам их изменяет.
следствие этого - сложно одним взглядом охватить код, описывающий правила этоих изменений - говоря иными словами, есть данные, но сложно разорбраться что является поведением над ними.

Sergey
25.02.2017
08:25:26
а вот последнее - соглашусь
ну мол что мы ничерта не знаем о поведении

Sergei
25.02.2017
08:27:00
ну мол что мы ничерта не знаем о поведении
в моей практике это чуть не основная пробема вообще в разработке - "хз как оно работает".
со всеми вытекающими последствиями - сложно maintain, сложно расширять, сложно модифицировать, сложно knowledge transfer и т.д.

Sergey
25.02.2017
08:29:03
ну тип того да)
с другой стороны если ты будешь иметь отдельную модель данных и она будет использоваться в контексте конкретного доменного объекта - весь профит сохраняется
проблемы то не в целом с объектами без стэйта - их можно как структуры данных воспринимать. А проблема в том что их как доменные объекты используют и это вызывает расползание логики
ну мол даже AR - ты можешь делать полноценую модель с ним
а можешь не делать

Sergei
25.02.2017
08:31:22
теперь мне идея более ясна
спасибо

Sergey
25.02.2017
08:31:32
просто AR подразумевает что логики мало, а если ее много - надо просто уже смотреть в сторону Row Data GAteway

Evgeniy
25.02.2017
13:05:53
а какие еще есть варианты кроме active record, data mapper, row data gateway ?

Sergey
25.02.2017
13:06:12

Evgeniy
25.02.2017
13:06:25
так про dao Знал

Sergey
25.02.2017
13:06:27
в целом оно покрывает все потребности

Evgeniy
25.02.2017
13:06:40
но он очень похож на data mapper :D

Sergey
25.02.2017
13:06:52

Google

Sergey
25.02.2017
13:07:04
ты можешь внутри dao юзать AR илли data mapper

Evgeniy
25.02.2017
13:07:16
верней у нас давно было забавно, юзали hibernate а потом над hibernate был dao
а над dao слой сервисов)

Sergey
25.02.2017
13:07:51
зачем вам хибернейт тогда)

Evgeniy
25.02.2017
13:08:22
ага было забавно, там я был девелопером прост)

Sergey
25.02.2017
13:09:03
вот я сейчас сижу и думаю... вот есть у меня ORM... она мне сущности выплевывает... для операций записи вообще чудо
а вот чтение...

Evgeniy
25.02.2017
13:09:13
там была очень "прикольная" архитектура (для крупного заказчика)
да мне orm Не нравится на чтение

Sergey
25.02.2017
13:09:26
мне надо тупо выплюнуть массивчик джесонкой... нафиг мне этот жирнющий слой для этого

Evgeniy
25.02.2017
13:09:45
мне орм не нравится

Sergey
25.02.2017
13:09:48
сижу и размышляю над плюсами и минусами различных подходов к этому добру

Evgeniy
25.02.2017
13:10:06
я думал над вариантом что почему бы не сделать QueryInterface
и объекты которые разные запросы создают и placeholder проставляют

Sergey
25.02.2017
13:10:32
с одной стороны здорово было бы выплевывать сразу DTO, с другой стороны это мне надо доктрину для этого допиливать.... с другой стороны можно сделать просто спецификации и самому гедрировать резальтаты на те же DTO или массивчики
но это муторно

Evgeniy
25.02.2017
13:10:41
и некий QueryManager ( как EntityManager)

Sergey
25.02.2017
13:10:50
```
interface Finder
{
public function find(Query $query);
}

Evgeniy
25.02.2017
13:11:15
получилось бы легко делать выборки различные

Google

Evgeniy
25.02.2017
13:11:26
опа опа
и как такая архитектура ? я просто о таком думал но на бою не проверял

Sergey
25.02.2017
13:12:20
нужен поиск по каталогу - ProductSearchQuery

Evgeniy
25.02.2017
13:12:39
а маппинг query на сущность?

Sergey
25.02.2017
13:12:56

Evgeniy
25.02.2017
13:13:06
получается есть сущность
которая внутри создает query и получает результаты

Sergey
25.02.2017
13:13:23
я сейчас пытаюсь запилить в доктрину фичу что бы можно было делать так

Evgeniy
25.02.2017
13:13:26
и это все скрыто (инкапсулированно)

Admin
ERROR: S client not available

Sergey
25.02.2017
13:14:01
select new ProductItemView(
p.id,
p.details // embeddable штука
m.profile // embeddable штука
)
public function find(Query $query)
{
$qb = $this->em->createQueryBuilder();
return $query->prepare($qb)->getQuery()->getResult();
}

Evgeniy
25.02.2017
13:15:03
я просто к этой идеи пришел но не видел чтобы где то это применялось

Sergey
25.02.2017
13:15:32
у тебя что-то похожее?

Evgeniy
25.02.2017
13:15:32
ога да
я к этому пришел но пока проект не таким образом
я просто думал что это было бы удобно

Sergey
25.02.2017
13:16:03
я такой подход в сыром виде уже пол года применяю на своих проектах

Google

Sergey
25.02.2017
13:16:06
в целом народу нравится
но мне не нравится)

Evgeniy
25.02.2017
13:16:15
но только работу над бд сделать не через доктрину а через pdo

Sergey
25.02.2017
13:16:20
ну то есть сама идея как по мне логична, но реализация отстой

Evgeniy
25.02.2017
13:16:37
я думал сделать либу чисто для проверки
а потом может обкатать на практике

Sergey
25.02.2017
13:16:48
https://github.com/K-Phoen/rulerz
может натолкнет тебя на мысли какие
как по мне крутая штука НО оно хочет уметь слишком много)

Evgeniy
25.02.2017
13:17:48
ну я не очень сторонник Query билдеров
которые в oop стиле
чуваки не хотят понимать sql и придумывают oop обертки
посмотрю либу может свое что по напишу)

Sergey
25.02.2017
13:18:50
ну мол...
$query = someCriteria() + someOtherCriteria() + someOtherStuff();
c SQL ты такое не провернешь
да и некоторые вещи удобнее выражать
SQL то для query builder-ов всеравно надо знать

Evgeniy
25.02.2017
13:20:36
ну да возможно
это холиварно надо делать prof of concept и смотреть)
возможно какой проект на таком делать