Re[9]: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.06.21 12:31
Оценка: +1
Здравствуйте, Nikita Lyapin, Вы писали:

NL>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, Nikita Lyapin, Вы писали:


NL>>>Странный вопрос. Даже очень. Тестировать я хочу бизнес-правила. Например, что при задании определенных пермишенов мне только заданные items отоброжаются. И да, Linq2Db мне тестировать ну совсем не хочется. И как это реализовать в вашем примере без теста Linq2Db? С статическими то переменными в коде... выкрутиться можно. Но будет такое себе зрелище. Просто интересно как вы это решаете.


G>>Я не знаю как там у linq2db, но у EF вполне можно инмемори контекст для тестов сделать. И в конце концов что мешает тесты запускать на базе sqlite например?


NL>Решение с sqllite — костыль. Давайте себе честно в этом признаемся. Разница с постгресом будет где-то в два раза быстрее. Настоящие true unit тесты будут в тысячи раз быстрее.


Давай на конкретных примерах:
1) Что нужно чтобы протестировать правило "нельзя продавать два билета на одно место"? Как проверить без базы? Какие будут true unit тесты?
2) В каких конкретно примерах синклена нужна база для тестирования? Ты же в курсе что IQueryable можно получить из IEnumerable и на нем можно тестировать все linq-запросы?



NL>Ну вот вы пишите с EF — да уже лучше. Немно сдвинули нашу кривую затратности (см график из статьи). Но опять же не всегда имеет смысл. Для простейшего проекта где две таблицы и все — достаточно дапера. Дазем все уложнять. И интеграционные тесты там вполне могут жить, потому что их не много и написать их легко.

Хорошо, согласились уже что для простого приложения EF достаточно. Осталось найти границу где EF становится недостаточно и обязательно надо городить что-то свое.
На практике граница двигается вперед в зависимости от навыка программиста использования Linq и возможности базы.
Более того, там где возможности большинства linq-провайдеров кончаются, "доменная модель" не помогает от слова совсем.
Re[11]: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.06.21 12:54
Оценка:
Здравствуйте, Nikita Lyapin, Вы писали:

NL>Я могу вам порекомендовать курс

Открою тайну, аппелция к "авторитетам" тут не работает. Даже если бы по ссылке был курс фаулера это нисколько бы не укепило веру в то, что он говорит не туфту.


NL>Там все подробно разбирается. Если у меня будет время — напишу вам пример, который вы хотите. Но чуть позже. Пока времени нет.

Как найдете время напишите пример веб-приложения, где будет использоваться EF или linq2db, и в котором "domain model" выигрывает по метрикам у "transaction script".
Метрики которые студия собирать умеет — LOC, class coupling, code complexity, depth of inheritance

Я, к сожалению, за все 15 лет холиваров не увидел ни одного такого примера.
Re[12]: Как определить где размещать бизнес-логику
От: Nikita Lyapin Россия https://architecture-cleaning.ru/
Дата: 10.06.21 12:57
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Nikita Lyapin, Вы писали:


NL>>Я могу вам порекомендовать курс

G>Открою тайну, аппелция к "авторитетам" тут не работает. Даже если бы по ссылке был курс фаулера это нисколько бы не укепило веру в то, что он говорит не туфту.
Причем тут авторитеты? Вы хотите пример учебный — вот вам. Его ведь тоже разрабатывать нужно, писать. Так чтобы все было понятно. Поэтому люди за это небольшую плату берут. Я думаю, что уж можно раскошелится на курс выше если интересно. Если не интересно — не надо.

NL>>Там все подробно разбирается. Если у меня будет время — напишу вам пример, который вы хотите. Но чуть позже. Пока времени нет.

G>Как найдете время напишите пример веб-приложения, где будет использоваться EF или linq2db, и в котором "domain model" выигрывает по метрикам у "transaction script".
G>Метрики которые студия собирать умеет — LOC, class coupling, code complexity, depth of inheritance

G>Я, к сожалению, за все 15 лет холиваров не увидел ни одного такого примера.

К сожалению для кого?
Будет время — напишу, так уж и быть.
Меня сейчас больше интересуют фикусы. И как они могут задушить...
Отредактировано 10.06.2021 13:03 Nikita Lyapin . Предыдущая версия .
Re[11]: Как определить где размещать бизнес-логику
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.06.21 13:04
Оценка: -1
Здравствуйте, Nikita Lyapin, Вы писали:
NL>Я могу вам порекомендовать курс
NL>Там все подробно разбирается. Если у меня будет время — напишу вам пример, который вы хотите. Но чуть позже. Пока времени нет.
Ну, я вот этих статей и курсов видел в ассортименте. Пока что — ничего интересного.
Самое интересное, что видел (но так и не изучил глубоко) — это использование для бизнес-логики ФП на F#. Там при помощи алгебраических типов данных довольно круто описываются ограничения доменной модели.

Смотреть видео — самый бездарный способ потратить время разработчика. Я читаю текст примерно в 5-10 раз быстрее, чем закадровый голос в этом курсе.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Как определить где размещать бизнес-логику
От: IT Россия linq2db.com
Дата: 10.06.21 13:26
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я не знаю как там у linq2db, но у EF вполне можно инмемори контекст для тестов сделать. И в конце концов что мешает тесты запускать на базе sqlite например?


Если не баловаться диалектами SQL и специфическими фичами конкретных СУБД, то ничего.
Если нам не помогут, то мы тоже никого не пощадим.
Re[13]: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.06.21 13:34
Оценка:
Здравствуйте, Nikita Lyapin, Вы писали:

NL>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, Nikita Lyapin, Вы писали:


NL>>>Я могу вам порекомендовать курс

G>>Открою тайну, аппелция к "авторитетам" тут не работает. Даже если бы по ссылке был курс фаулера это нисколько бы не укепило веру в то, что он говорит не туфту.
NL>Причем тут авторитеты? Вы хотите пример учебный — вот вам. Его ведь тоже разрабатывать нужно, писать. Так чтобы все было понятно. Поэтому люди за это небольшую плату берут. Я думаю, что уж можно раскошелится на курс выше если интересно. Если не интересно — не надо.
Смотри: был конкретный вопрос, сценарий. Ты вместо ответа на него кинл сылку на курс, где не только нет ответа на этот вопрос, но и нет сравнения с другии подходами для решения тех же задач.
Тут два варианта: или ты так слился с обсуждения, или решил авторитетом автора курса надавить на собеседника.
Re[12]: Как определить где размещать бизнес-логику
От: IT Россия linq2db.com
Дата: 10.06.21 13:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Самое интересное, что видел (но так и не изучил глубоко) — это использование для бизнес-логики ФП на F#. Там при помощи алгебраических типов данных довольно круто описываются ограничения доменной модели.


АТД и ПМ штука мощная, но хорошо работает для консервативных моделей с предсказуемой логикой. А у большей часть типовой бизнес логики всё плохо с формализацией и ещё хуже с предсказуемостью. Хотя нет, предсказание о том, что всё будет только хуже обычно сбывается.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.06.21 14:04
Оценка: 76 (2)
Здравствуйте, Nikita Lyapin, Вы писали:

NL>Привет всем!


NL>Часто возникают обсуждения о том где размещать бизнес-логику приложения. В итоге я собрался силами, систематизировал свои знания по этому вопрос и написал статью. Здесь

NL>По большому счету Фаулер все написал, но я взял на себя смелость его дополнить. Я прав? Или ошибаюсь? Хотелось бы обсудить с сообществом.

Я тепрь тоже подавлю авторитетом, предложив прочитать серию статей Эрика Липперта (небезызвестный человек) про моделирование предмтной области с помощью классов и методов

https://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/
https://ericlippert.com/2015/04/30/wizards-and-warriors-part-two/
https://ericlippert.com/2015/05/04/wizards-and-warriors-part-three/
https://ericlippert.com/2015/05/07/wizards-and-warriors-part-four/
https://ericlippert.com/2015/05/11/wizards-and-warriors-part-five/

Они изначально берет задачу моедлирования, когда нет внешних хранилищ, пользовательных запросов и затрат на вытагивание данных.
Казалось бы идеальная ситуация для "domain model"

Небольшим усложнением "бизнес-правил" он добивается того, что наивный ООП-код на C# перестает описывать павила достаточно внятно без лишнего количества технических деталей.

В итоге приходит к выводу, который я процитирю:

The fundamental problem is my initial assumption that the business rules of the system are to be expressed by writing code inside methods associated with classes in the business domain

Чтобы согласиться с ним надо обязательно прочитать все пять статей, и понять то, о чем он говорит.

Далее липперт выводит то, что называется anemic model

Now all our previous problems fade away. A player has a weapon, great, that’s fine, we’ll make a Player class with a property of type Weapon. That code makes no attempt to try to represent that a wizard can only wield a staff or a dagger; all that code does is keep track of game state, because state is its concern.


Далее он описывает архитектуру, которую фаулер назвал бы transaction script

Then we make a Command object called Wield that takes two game state objects, a Player and a Weapon. When the user issues a command to the system “this wizard should wield that sword”, then that command is evaluated in the context of a set of Rules, which produces a sequence of Effects.


Бизнес-правила он предлагает описывать классам-стратегиями (так же, как показывал Синклер).

Всем рекомендую почитать эту серию статей для очистки мозга.
Отредактировано 10.06.2021 14:05 gandjustas . Предыдущая версия .
Re[14]: Как определить где размещать бизнес-логику
От: Nikita Lyapin Россия https://architecture-cleaning.ru/
Дата: 10.06.21 14:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Смотри: был конкретный вопрос, сценарий. Ты вместо ответа на него кинл сылку на курс, где не только нет ответа на этот вопрос, но и нет сравнения с другии подходами для решения тех же задач.

G>Тут два варианта: или ты так слился с обсуждения, или решил авторитетом автора курса надавить на собеседника.

Стас, надовить авторитетом на собеседника? Ну ладно... каких-то 5 лет назад Тот же автор курса, тот же Стас и ровно такие же вопросы. Вот человек сделал пример. Ну так почему бы его не посмотреть за эти 5 лет? Так-то и не 15 лет можно потратить, а все 30 лет на холивары. Без результатов.

Еще раз. Не вижу никакой необходимости тратить время на создание примера по общеизвестной и хорошо изученной проблеме. Если у меня спрашивают пример с уровнями изоляции транзакций — я просто кидаю ссылку на книжку или статью, где это хорошо описано. Так в данно случае и поступил.
В противном случае мы получим такой троллинг. Когда в диалоге один не понимает якобы и тратит время своего собеседника на выдуманные примеры. Не очеь мне это интересно.
Re[15]: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.06.21 14:34
Оценка:
Здравствуйте, Nikita Lyapin, Вы писали:

NL>Здравствуйте, gandjustas, Вы писали:


G>>Смотри: был конкретный вопрос, сценарий. Ты вместо ответа на него кинл сылку на курс, где не только нет ответа на этот вопрос, но и нет сравнения с другии подходами для решения тех же задач.

G>>Тут два варианта: или ты так слился с обсуждения, или решил авторитетом автора курса надавить на собеседника.

NL>Стас, надовить авторитетом на собеседника? Ну ладно... каких-то 5 лет назад Тот же автор курса, тот же Стас и ровно такие же вопросы. Вот человек сделал пример. Ну так почему бы его не посмотреть за эти 5 лет? Так-то и не 15 лет можно потратить, а все 30 лет на холивары. Без результатов.

Там нет примеров, которые хоть что-то показывают. Не описаны задачи, проблемы и их решения.


NL>Еще раз. Не вижу никакой необходимости тратить время на создание примера по общеизвестной и хорошо изученной проблеме.

Наверное поэтому 15 лет холивары не утихают, раз проблема такая изученная.

NL>Если у меня спрашивают пример с уровнями изоляции транзакций — я просто кидаю ссылку на книжку или статью, где это хорошо описано. Так в данно случае и поступил.

Уровни изоляции достаточно формально описаны в стандарте, которому следуют многие создатели движков СУБД. А "domain model" вообще не имеет формального описания, более того многие даже буксуют на том, чтобы формально очертить границы DDD.
Поэтому ссылки на курсы и статьи по теме без сравнения разных подходов и хотя бы попоыток формализации — не более ем аппеляция к авторитетам, которые в общем-то не очень авторитеты.
Re[16]: Как определить где размещать бизнес-логику
От: Nikita Lyapin Россия https://architecture-cleaning.ru/
Дата: 10.06.21 14:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

NL>>Стас, надовить авторитетом на собеседника? Ну ладно... каких-то 5 лет назад Тот же автор курса, тот же Стас и ровно такие же вопросы. Вот человек сделал пример. Ну так почему бы его не посмотреть за эти 5 лет? Так-то и не 15 лет можно потратить, а все 30 лет на холивары. Без результатов.

G>Там нет примеров, которые хоть что-то показывают. Не описаны задачи, проблемы и их решения.
В курсе есть примеры. И репозиторий тоже есть.

NL>>Если у меня спрашивают пример с уровнями изоляции транзакций — я просто кидаю ссылку на книжку или статью, где это хорошо описано. Так в данно случае и поступил.

G>Уровни изоляции достаточно формально описаны в стандарте, которому следуют многие создатели движков СУБД. А "domain model" вообще не имеет формального описания, более того многие даже буксуют на том, чтобы формально очертить границы DDD.
G>Поэтому ссылки на курсы и статьи по теме без сравнения разных подходов и хотя бы попоыток формализации — не более ем аппеляция к авторитетам, которые в общем-то не очень авторитеты.
В DDD точно так же формально все описано. Есть бизнесовые сервисы, есть application сервисы, есть репозитории, есть абстрактные фабрики, есть агрегаты. И когда я вижу в примере у человека процессор, как в ветке ниже — то скорее всего он всего этого не знает. И ему не мешало бы освежить знания. Не так?
Re[17]: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.06.21 08:10
Оценка:
Здравствуйте, Nikita Lyapin, Вы писали:

NL>>>Если у меня спрашивают пример с уровнями изоляции транзакций — я просто кидаю ссылку на книжку или статью, где это хорошо описано. Так в данно случае и поступил.

G>>Уровни изоляции достаточно формально описаны в стандарте, которому следуют многие создатели движков СУБД. А "domain model" вообще не имеет формального описания, более того многие даже буксуют на том, чтобы формально очертить границы DDD.
G>>Поэтому ссылки на курсы и статьи по теме без сравнения разных подходов и хотя бы попоыток формализации — не более ем аппеляция к авторитетам, которые в общем-то не очень авторитеты.
NL>В DDD точно так же формально все описано.
Увы, нет. "Формально" это когда два человека могут прочитать описание и сделать одинаково работающий код.

NL>Есть бизнесовые сервисы, есть application сервисы, есть репозитории, есть абстрактные фабрики, есть агрегаты.

Это все не нужно для того, чтобы сделать приложение. У меня больше одного работающего приложения, в которых нет репозитоиев, абстрактных фабрик и агрегатов.

Резонно возникает вопрос: а что такое вообще DDD? Может это просто набор паттернов? Тогда расматривать DDD в отрыве от задачи нет смысла. И как понять где начинается и кончается DDD? Если я использую application service это DDD?

В книжке эванса делется упор на то, что DDD это методика анализа в первую очередь, ubiquitous language и все такое. Правда даже в книге эванса переход от анализа к проектированию описан мутно. Нам предлагается самостоятельно понять как нам предметную область поделить на агрегаты и сервисы.

А может DDD это фреймворк, где в некоторую готовую структуру надо написатьсвою логику? Но я такой структуры не видел.
Re[18]: Как определить где размещать бизнес-логику
От: Nikita Lyapin Россия https://architecture-cleaning.ru/
Дата: 11.06.21 08:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

NL>>Есть бизнесовые сервисы, есть application сервисы, есть репозитории, есть абстрактные фабрики, есть агрегаты.

G>Это все не нужно для того, чтобы сделать приложение. У меня больше одного работающего приложения, в которых нет репозитоиев, абстрактных фабрик и агрегатов.

Какова команда, которая его сопровождает? Как они между собой взаимодействуют? Это ведь не один человек писал и поддерживал все. Верно?
Мы ведь говорим про крупные проекты. Для небольших как я и писал выше все будет работать как вы описали.
Re[19]: Как определить где размещать бизнес-логику
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.06.21 10:25
Оценка:
Здравствуйте, Nikita Lyapin, Вы писали:

NL>Здравствуйте, gandjustas, Вы писали:


NL>>>Есть бизнесовые сервисы, есть application сервисы, есть репозитории, есть абстрактные фабрики, есть агрегаты.

G>>Это все не нужно для того, чтобы сделать приложение. У меня больше одного работающего приложения, в которых нет репозитоиев, абстрактных фабрик и агрегатов.

NL>Какова команда, которая его сопровождает? Как они между собой взаимодействуют? Это ведь не один человек писал и поддерживал все. Верно?

NL>Мы ведь говорим про крупные проекты. Для небольших как я и писал выше все будет работать как вы описали.

Это много разных проектов, по нексколько человек сопровождают. А в чем могут быть проблемы?
Re[12]: видео vs текст
От: Sharov Россия  
Дата: 11.06.21 17:27
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Смотреть видео — самый бездарный способ потратить время разработчика. Я читаю текст примерно в 5-10 раз быстрее, чем закадровый голос в этом курсе.


У меня ровно обратный опыт, если есть скорость 2х. А 2х читать я не умею. При прочих равных предпочту видео.
Кодом людям нужно помогать!
Re[13]: видео vs текст
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.06.21 03:32
Оценка: +2
Здравствуйте, Sharov, Вы писали:
S>У меня ровно обратный опыт, если есть скорость 2х. А 2х читать я не умею. При прочих равных предпочту видео.
Простите, я в это не верю. Можно просто взять текст из любого выступления, и засечь время на его чтение про себя. Потом сравнить с временем по ролику.
2х — это всё ещё очень медленно.
Плюс крайнее неудобство навигации — в тексте, если я встречаю непонятное место, я тут же возвращаюсь назад и перечитываю, сопоставляя и сравнивая. В видео прыгать по +- 10 секунд — это лотерея.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.