@oop_ru

Страница 429 из 785
Mykola
14.12.2017
23:48:32
мы берем чистую математику и радуемся, а если она не подходим - то пытаемся приблизить нашу программу к математике

а это не работает, так как программа работает с реальным миром

тут нужна обобая математика, темпоральная логика и всякие системы с оракулами

Google
kana
14.12.2017
23:50:26
тут нужна обобая математика, темпоральная логика и всякие системы с оракулами
так есть же, теория типов, та самая математика, активно используемая в программировании

Mykola
14.12.2017
23:51:27
в программировании математика и теория типов - тоже особая

и тоже допускает разные трактовки

kana
14.12.2017
23:52:41
ну да, это есть такое, тот же bottom

Mykola
14.12.2017
23:52:57
пример: тайпклассы

если есть клюв - значит птица

но это не всегда работает в реальном мире

еще алан кей пример прекрасный приводил, о ролях

kana
14.12.2017
23:54:16
так, стоп, это просто проблема нейминга

Mykola
14.12.2017
23:54:31
вот все говорят, что нейминга

kana
14.12.2017
23:54:32
есть есть клюв, то ЕстьКлюв

Mykola
14.12.2017
23:54:38
берем утконоса, он не птица

но у него есть клюв

Google
Mykola
14.12.2017
23:54:55
переименуем клюв у утконоса?

чтоб тайпкласы не нарушать

kana
14.12.2017
23:57:28
наличие клюва не является достаточным для определения птицы мы заранее берем какое-то понятие и формализируем его. То есть мы вводим свое понятие "Птица - есть клюв и летает". И уже делаем тайплкассы на основе этой формализации. И если некий утокон имеет клюв и летает, то он птица, потому что мы так формализовали птицу

есть есть клюв, то ЕстьКлюв

Mykola
14.12.2017
23:57:28
есть есть клюв, то ЕстьКлюв
а это прекрасное замечание тоже говорит о многом

Mykola
14.12.2017
23:58:16
ну мы же пишем программы постоянно, мы не формализируем один раз

мы меняем наши формализмы в процессе

и по сути нам нужна птица, а не ЕстьКлюв, так как это семантично

kana
15.12.2017
00:02:13
ну это смотря как посмотреть если есть какая-то операция, которая требует клюв и только клюв. Эта операция не должна требовать на вход птицу, она должна требовать на вход HasКлюв. И утконос сюда подходит вполне А есть операция, которая требует клюв и крылья. То есть HasКлюв ∩ HasКрылья, и сюда уже не пройдет утконос.

именно так алгебра и работает, мы отнимаем и добавляем по свойству и доказываем всякие теоремы для вещей с некоторыми свойствами, а не для птиц

Mykola
15.12.2017
00:03:34
тогда что именно мы програмируем? :)

kana
15.12.2017
00:03:46
интернет-магазины

я не понял вопрос)

Mykola
15.12.2017
00:04:51
ну мы програмируем некую абстрактную систему, в которой есть непонятные сущности, и что-то с ними происходит, но хрен его знает что

главное чтоб типы сходились

а в задаче стоял вопрос, скажем, накормить птицу... а оказалось, что у нас нет птицы, зато ЕстьКлюв

kana
15.12.2017
00:05:35
не-не, вполне понятно что. Интернет магазины продает продаваемое, покупатели покупают покупаемое.

Mykola
15.12.2017
00:05:55
на пхп их гораздо больше

не будем про то, что они выполняют задачу

Google
Mykola
15.12.2017
00:06:17
будем о программировании

как искусстве)

kana
15.12.2017
00:07:16
но я так и не понял, какое тайпклассы имеет отношение к тому, что мы неверно что-то формализуем

не-не, вполне понятно что. Интернет магазины продает продаваемое, покупатели покупают покупаемое.
ну тут я под "покупаемое" и "продаваемое" тоже имел тайплкассы/интерфейсы

просто я увидел тенденцию в фп все максимально обобщать

а, хм, возможно твой посыл что это все слишком точно

Mykola
15.12.2017
00:10:59
ладно, буду закругляться, но подитожу: мы слишком упоролись в статический подход проектирования систем, и забываем важные вещи касательно действительности: - программы и формализмы могут создаваться непрерывно, это процесс а не результат - выполнение программы - это тоже процесс, а не формула - оба этих процесса связаны, и мы об этом не думаем - оба эти процесса имеют стохастическую и темпоральную составляющую

вот под это надо специальную математику

kana
15.12.2017
00:13:58
буду пытаться понять эти вещи)

Pavel
15.12.2017
05:56:08
тут есть dotnet'чики из Краснодара?

Victor
15.12.2017
06:58:08
Есть один в сишарп чате

Roman
15.12.2017
07:01:39
Enterpise
15.12.2017
08:35:07
- оба эти процесса имеют стохастическую и темпоральную составляющую огласите весь список, ожалуйста!

Aleh
15.12.2017
08:38:53
мы работаем с промисом исключительно внутри промиса через .then
Не, передача действия в then это уже работа вне объекта, это хороший пример открытости для расширения

kana
15.12.2017
08:41:49
так весь код работы со значением находится внутри Promise<T>. Я говорю не про то, что код внутри типа промиса, а про то, что наш код какбы помечен эффектом Promise это совсем не то, про что говорил Бугагенко, я об этом уже писал

Aleh
15.12.2017
08:42:40
(прямо как принято делать в фп-языках без ооп, лол)
Несовсем, в жаваподобных языках мы теряем при этом возможность юзать полиморфизм, а в фп с adhoc - нет

Enterpise
15.12.2017
09:22:11
в чем ты меряешь жирность классов?
а в чем нужно мерять жырноту класса? в кол-ве капель стекаюшего с класса в минуту?

Sergey
15.12.2017
09:25:26
а в чем нужно мерять жырноту класса? в кол-ве капель стекаюшего с класса в минуту?
ну дальше почитай, можешь мерять в твоих рефакотрингах

Enterpise
15.12.2017
09:29:07
Sergey
15.12.2017
09:29:20
дочитай а потом комменти

Google
Sergey
15.12.2017
09:29:23
мы уже все это обсудили

Maksim (Ellrion)
15.12.2017
09:31:56
дочитай а потом комменти
А вот в случае с эвентами. Как я могу узнать какие действия происходят во время определенного бизнес процесса (вот с той же регистрацией. как узнать что и вип может добавиться и еще что то, учитывая что эвенты бросаются непонятно где). не затрудняет ли это отладку? и вообще понимание системы?

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

или я вообще не въехал?)

Sergey
15.12.2017
09:35:07
А вот в случае с эвентами. Как я могу узнать какие действия происходят во время определенного бизнес процесса (вот с той же регистрацией. как узнать что и вип может добавиться и еще что то, учитывая что эвенты бросаются непонятно где). не затрудняет ли это отладку? и вообще понимание системы?
- они бросаются не непонятно где. а в сущности. - да, это требует некоторого соглашения "где что смотреть и как смотреть". В целом у тебя есть явный тригер для операции - да, это требует некоторых доп инфраструктуры упрощающей отладку - каждая пачка ивентов выкидывается только по окончанию логической транзакции. Как делать транзакционно операции включающие в себя несколько логических транзакций - тут есть варианты.

ну то есть минусы тоже есть, конечно, но большую их часть можно невилировать если с умом подойти к вопросу

если у тебя система не подразумевает каких-то длительных процессов состоящих из кучи логических транзакций (а на самом деле - это большинство систем) - то проблем будет мало

Maksim (Ellrion)
15.12.2017
09:40:38
- они бросаются не непонятно где. а в сущности. - да, это требует некоторого соглашения "где что смотреть и как смотреть". В целом у тебя есть явный тригер для операции - да, это требует некоторых доп инфраструктуры упрощающей отладку - каждая пачка ивентов выкидывается только по окончанию логической транзакции. Как делать транзакционно операции включающие в себя несколько логических транзакций - тут есть варианты.
спсибо за ответ. но вот в случае с сервисом, я захожу и явно вижу что при регистрации дернится вип сервис, потом дернится сервис реферала и сервис еще чего то. Что у них там внутри уже может быть и не важно, картина процесса уже у меня грубая есть. а в случае с эентами я должен посмотреть кто подписан на эвент, пойти в его слушатель, найти что делается там, зайти в реализацию метода сущьности и посмотреть какой эвент бросается там, и так по цепочке. Звучит очень неприятно Что может облегчить мне этот путь? Документация?

не приятнее ли например команд бас? так же дает независимость элементам системы

ах ну и еще раз заговорили, нет ли проблем с порядком обработки эвентов?

Sergey
15.12.2017
09:46:17
спсибо за ответ. но вот в случае с сервисом, я захожу и явно вижу что при регистрации дернится вип сервис, потом дернится сервис реферала и сервис еще чего то. Что у них там внутри уже может быть и не важно, картина процесса уже у меня грубая есть. а в случае с эентами я должен посмотреть кто подписан на эвент, пойти в его слушатель, найти что делается там, зайти в реализацию метода сущьности и посмотреть какой эвент бросается там, и так по цепочке. Звучит очень неприятно Что может облегчить мне этот путь? Документация?
как правило поиск причино следственной связи начинается не с ивента. Могу тебе описать что мне обычно нужно было смотреть: - я знаю о каком-то действии, например - что надо email какой-то отправлять. Стало быть я захожу в одно место и смотрю по какому тригеру (ивенту) отправляется мой email и кому. Далее я могу по тригеру определить в каких условиях оно кидается. А еще - эти тригеры очень легко тестировать и они являются частью контракта сущности. - я знаю о каком-то тригере и мне интересно что по этому тригеру происходит. Такое мне нужно знать реже, но иногда надо. В этом случае я могу посмотреть кто подписан на событие и легко определить "следствие" какого-то тригера. - для ситуаций когда у тебя есть процесс включающих кучу бизнес транзакций - у меня обычно всеравно будет одно место где весь процесс описан. Но такое мне нужно было очень редко.

Maksim (Ellrion)
15.12.2017
09:50:46
я видимо как то себе не так это представляю ибо опираюсь на знакомые мне реализации. но не похоже ли это на сайд эффекты? вроде произошла регистрация а на самом деле еще куча всего. и одно дело когда эти сайд эфеекты уровня отправки уведомлений\записей логов и т.п. и другое когда это бизнес процессы

Sergey
15.12.2017
09:52:25
я видимо как то себе не так это представляю ибо опираюсь на знакомые мне реализации. но не похоже ли это на сайд эффекты? вроде произошла регистрация а на самом деле еще куча всего. и одно дело когда эти сайд эфеекты уровня отправки уведомлений\записей логов и т.п. и другое когда это бизнес процессы
это просто "еще один вариант" как делать дела. Он не такой явный как скажем прописать все в каком-то координаторе. Но если у тебя одно действие приводит к логике из разных контекстов - может быть полезно

Sergey
15.12.2017
09:53:14
так а почему не шина?
потому что "хэнделр команды" будет принадлежать одному контексту, а тебе надо с 5-ю что-то сделать

и да, шина команд вообще никому не нужна

ну только если у тебя обработка команд не асинхронна конечно

Maksim (Ellrion)
15.12.2017
09:54:10
короче я понял что я нихуя не понимаю) но спасибо за ответы)

Sergey
15.12.2017
09:55:43
короч если что - меня подтолкнуло к этому проблема того, что "когда все явно - все в каше и это никак не помогает разбираться с бизнес логикой"

когда все на ивентах и не явно - это тоже не удобно

Google
Sergey
15.12.2017
09:56:14
доменные ивенты - это что-то посередине

в пределах одного контекста я стараюсь не использовать ивенты, хотя иногда это удобно

Roman
15.12.2017
09:56:49
доменные ивенты - это что-то посередине
Как кстати их реализовывать в случае с back-end разработкой?

Не нативные же юзать

Sergey
15.12.2017
09:57:05
погугли)

штука распространенная

Roman
15.12.2017
09:57:19
Aleh
15.12.2017
09:57:31
Не нативные же юзать
смотря что такое нативные)

Roman
15.12.2017
09:58:09
смотря что такое нативные)
keyword event из самого языка, с подпиской, отпиской и прочими геморроями

Sergey
15.12.2017
09:58:16
Медиатор?
медиатор это медиатор, доменные ивенты это доменные ивенты

Sergey
15.12.2017
09:58:51
C#
nservicebus значит можешь взять)

https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation

неужто так сложно погуглить...

тем более как мне кажется эта тема наиболее развита как раз в .net сообществе...

Roman
15.12.2017
09:59:54
https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation
Читал я это. Предлагают при SaveChanges в EF'е это делать. Что на мой взгляд - зашквар.

Sergey
15.12.2017
10:00:43
Читал я это. Предлагают при SaveChanges в EF'е это делать. Что на мой взгляд - зашквар.
доменный ивент - это факт. Разве у тебя SaveChanges не является коммитом и точкой завершения бизнес транзакции? и разве не только тогда ивенты превращаются в факты?

Страница 429 из 785