
Ihor
11.09.2018
12:47:36
значит неверно сформулировал :)

Sergey
11.09.2018
12:49:01
или ты про предикаты?

Ihor
11.09.2018
12:49:42
Инвариант

Google

Sergey
11.09.2018
12:50:33
ну инварианты это инварианты (предикаты, описывающие валидное состояние) а предусловия это предусловия (предикаты, описывающие валидные входные значения)

Dmitry
11.09.2018
12:50:50
контракты?

Sergey
11.09.2018
12:51:06
да, предусловия, постусловия и инварианты формируют контракт
и называется все это логикой Хоара

Ihor
11.09.2018
12:53:41

Sergey
11.09.2018
12:54:09

Батманов
11.09.2018
12:55:19

Sergey
11.09.2018
12:55:58

Батманов
11.09.2018
12:58:51
мм, а если у нас объект с данными без поведения, я так понимаю это DTO. А должен ли тот кто работает с этим DTO проверять его на валидность или он должен доверять тем данным, которые находятся в этом DTO?

F01134H
11.09.2018
13:00:37
Мне кажется DTO подразумевает какую-никакую валидацию

Roman
11.09.2018
13:02:10

Батманов
11.09.2018
13:03:58

Adel
11.09.2018
13:04:33
PhoneNumber to :)

Google

Roman
11.09.2018
13:05:22

Батманов
11.09.2018
13:05:29
PhoneNumber to :)
мы так далеко пойдем) SmsMessage{ PhoneNumber from, PhoneNumber to, Message message} ?))

Adel
11.09.2018
13:05:38

Roman
11.09.2018
13:05:42

Батманов
11.09.2018
13:05:54
тогда валидация происходит внутри VO PhoneNumber?

Roman
11.09.2018
13:06:06
Можете поправить, если не прав. Хочу понять разницу между OOA (object-oriented analysis) и OOD (obj.-orin. design).
OOA - это процесс\методология, в которой разработчики общаются со стакхолдерами, собирают информацию о проекте, определяют классы и объекты, группируют их по контексту, определяют как объекты контактируют друг с другом, определяют каким поведением объекты владеют и какие данные должны содержать. Рисуются диаграмы с целью упростить понимание системы и коммуникацию между бизнессом и девелоперами.
OOD - это процесс, когда ставятся\определяются ограничения в виде технологий (язык, фреймворк, бд и т.д.), ожидаемой нагрузки, масштабируемости, бюджета и времени.
Далее, это ограничения реализуются с использованием выбранных технологий и учетом поставленных ограничений. Могут использоваться более "технические" диаграммы.


Sergey
11.09.2018
13:21:57
Можете поправить, если не прав. Хочу понять разницу между OOA (object-oriented analysis) и OOD (obj.-orin. design).
OOA - это процесс\методология, в которой разработчики общаются со стакхолдерами, собирают информацию о проекте, определяют классы и объекты, группируют их по контексту, определяют как объекты контактируют друг с другом, определяют каким поведением объекты владеют и какие данные должны содержать. Рисуются диаграмы с целью упростить понимание системы и коммуникацию между бизнессом и девелоперами.
OOD - это процесс, когда ставятся\определяются ограничения в виде технологий (язык, фреймворк, бд и т.д.), ожидаемой нагрузки, масштабируемости, бюджета и времени.
Далее, это ограничения реализуются с использованием выбранных технологий и учетом поставленных ограничений. Могут использоваться более "технические" диаграммы.
можно просто убрать OO из этих аббривиатур и получится "анализ требований" (не путать с бизнес анализом) и "дизайн"


Aleh
11.09.2018
13:23:22
из ооп тоже можно убрать ОО

Sergey
11.09.2018
13:24:21
хуйню скинул

Roman
11.09.2018
13:25:14
нашел, спасибо))

Sergey
11.09.2018
13:34:07
а чем БА отличается от анализа требований?
БА - разобраться с проблемой и придумать решение, по сути конвертация проблем в требования. Просто занятный факт что бизнес никогда требования не генерит, он генерит воркараунды котторые смог придумать имея то что имея.

Roman
11.09.2018
13:35:46

Sergey
11.09.2018
13:41:18
какие по твоему артефакты у OOA?
UML диаграмма компонентов?)
классов?)
диаграмма юзкейсов?
короч я думаю что это просто можно убрать

Google

Roman
11.09.2018
13:57:00
какие по твоему артефакты у OOA?
По-моему все то, что ты перечислил) Но я соглашусь, что это скорее анализ требований, определение проблем и возможных путей их решения. Далее выбор самого подходящего пути решения и реализация на этапе оод.
Ну вот если бы тебя на собесе спросили, в чем разница между ООА и ООД?

Dmitry
11.09.2018
16:18:39
вот пишут, что в репозиториях не должно быть методов сохранения — только добавление и удаление, а сохранение [«списка»] реализуется через unitOfWork.
а кто занимается сохранением конкретных DO? вот я вытащил из репозитория объект, поменял в нём какое-то поле (где-нибудь в Application layer). А дальше? кому принято отдавать этот объект, чтобы он скормил его мапперу и положил его в ORM?
(объект при этом не ActiveRecord)

Roman
11.09.2018
16:25:49


Sergey
11.09.2018
17:00:43
в целом... весь вопрос в том насколько у тебя грамотно разделены сущности, правильно ли границы транзакций проведены и тд.
ну мол.... я не очень уверен в том что unit of work вообще штука нужная...


Dmitry
11.09.2018
17:02:37
у тебя есть unit of work (или нет)
нет, и я пока не понимаю как он работает
(вернее только Session в ORM есть)
оборачивание изменений в разных DO в одну транзакцию мне не нужно пока

Sergey
11.09.2018
17:02:46
одно я знаю точно - универсальный UoW это не оч хорошая идея

Dmitry
11.09.2018
17:04:03
м… а если UoW не нужен, то методы обновления DO «можно» класть в репозиторий? и это не будет дурно пахнуть?

Aleh
11.09.2018
17:07:36

Sergey
11.09.2018
17:08:04
ну save в репозитории не такая уж и плохая идея если у тебя все грамотно на агрегаты разбито)
ну либо у тебя репозиторий должен экспоузить какой-то метод который должен кто-то дернуть когда логическая транзакция завершена.

Dmitry
11.09.2018
17:08:41
а вот тут пишут, что плохо
https://programmingwithmosh.com/entity-framework/common-mistakes-with-the-repository-pattern/
Save/Update method in repositories
но там говорят про UoW

Aleh
11.09.2018
17:08:56
сделайте отдельную штуку для этого

Sergey
11.09.2018
17:09:29
понятно что не сам репозиторий будет это делать и что у меня там под копотом будет какой-то UoW. просто я бы не хотел деталь реализации репозитория экспоузить наружу
а потому у меня был бы метод в репе типа..
void commit() {
uow.commit()
}

Aleh
11.09.2018
17:09:59
ведь именно это ты сделаешь, добавив в него commit/save

Google

Sergey
11.09.2018
17:10:14
сложный вопрос
в идеале можно еще так сделать...
repoOrUowNotSure.transactional(repo => {
// logical transaction goes here
})
короч меня оч напрягают решения которые включают в себя отдельный глобальны UoW
типа того что ты можешь в доктрине увидеть например
или в Hibernate

Aleh
11.09.2018
17:12:06

Dmitry
11.09.2018
17:12:45
сделайте отдельную штуку для этого
презентацию не грузит
а как назвать такую штуку?
сейчас у меня в репозитории есть метод save(DO) в который передаю DO, он там маппится в модель и оборачивается в uow отдаётся в ORM
Но насколько это красиво?

Sergey
11.09.2018
17:15:00
ну и вообще есть мысль что все это от лукавого и надо делать replace
или еще как...
с Марко поговори на эту тему)

Aleh
11.09.2018
17:15:29
делай евенты и не парься

Sergey
11.09.2018
17:15:42
ну вот Марко топит на ES на хаскеле)

Aleh
11.09.2018
17:15:45
rx там или mostjs

Dmitry
11.09.2018
17:18:29
благодарю
и там тоже про UoW пишут…

Sergey
11.09.2018
17:45:35

Aleh
11.09.2018
17:46:00

Sergey
11.09.2018
17:46:02
ну мол... идея UoW в том что бы контролить и персистить стэйт агрегата в границах транзакции логической. То есть существование UoW вне репозитория в целом не имеет смысла

Aleh
11.09.2018
17:46:23
коммит транзакции не в репозитории ж

Sergey
11.09.2018
17:46:59
так же как нет смысла в UoW если у тебя агрегат в база хранится в табличке вида
CREATE TABLE my_cool_aggregates (
id uuid NOT NULL PRIMARY KEY,
state jsonb NOT NULL
)

Google

Aleh
11.09.2018
17:47:36
ну даже тут есть смысл
uow ж нужен только для того, чтобы избавить доменую штуку, такую как репозиторий, от лишних методов
которые совсем не доменные

Sergey
11.09.2018
17:48:32
ммм.... но возникает вопрос кто их будет дергать, когда и как сделать так что бы UoW у каждого репозитория был свой (что бы не приходилось тратить миллион человекочасов на багфиксы одного универсального UoW)
напомню что я предполагаю что у тебя один репозиторий на корень агрегата, не больше.

Aleh
11.09.2018
17:50:06

Dmitry
11.09.2018
23:30:48
а в каком месте принято проверять уровни доступа?
ну чтобы, например, юзер не менял чужие проекты подменой id.
в обработчике api вызовов? в сервисе? в репозитории?

Sergey
11.09.2018
23:40:27
p.s. ты там свой велосипед/фреймворк не изобретаешь часом?


Dmitry
11.09.2018
23:48:03
p.s. ты там свой велосипед/фреймворк не изобретаешь часом?
не, я велосипедизмом [пока ещё] не страдаю. просто пытаюсь придать форму ~400кб кода
во время лепки возникают странные необходимости из серии «дёрнуть объект из слоя хранилища из уровня приложения». тогда я понимаю, что где-то что-то не так и возникают странные вопросы.
(например, пару дней мучался мешая в репозитории объекты домена с моделью базы, а потом мне сказали, что нужны в этом месте сервисы — и наступило немного счастья)

Sergey
11.09.2018
23:48:28
слои это лож

Konstantin
11.09.2018
23:48:29
А как правильно сделать и куда вынести, приходят с поиска данные по сортировке, пишу на yii2, так вот в зависимости от данных меняется сортировка в запросе и соответственно desc asc, данные меняется селектом, сортировать по городу или по району(для примера) при чем сортировка по разным колонкам. Где и как грамотно указывать что сортировка должна быть здесь а определение какую колонку использовать уже в другом месте ?
сейчас у меня рак, для себя писал