
Sergey
26.06.2017
15:42:27

Aleh
26.06.2017
15:43:04
https://www.reddit.com/r/haskell/comments/b7anj/actors_are_not_a_good_concurrency_model/

Sergey
26.06.2017
15:43:27
http://wiki.c2.com/ - крутой ресурс со ссылками на первоисточники и обсуждениями основных штук в программировании.

Google

Sergey
26.06.2017
15:44:08
хз
но как ментальная модель - очень хороша)
естественно есть ситуации когда ты процессы моделируешь - тут экторы не особо спасают
хотя смотря что конечно

Aleh
26.06.2017
15:48:05
кстати, кто победил в конкурсе на самый оопшный рефакторинг?

Denis
26.06.2017
15:48:38
Был такой конкурс?)
Интересно в чём результат измерялся?)
В фаулерах?))

Aleh
26.06.2017
15:49:40
https://github.com/yegor256/hangman

Denis
26.06.2017
15:56:04
А как понять кто победил?) тот кому книжку подарили?)
Логично)

Aleh
26.06.2017
15:58:51
так да
вполне оопшно

Google

Denis
26.06.2017
16:01:01
Я имел ввиду есть ли какая шкала оопэшности или диаграмма крутости кода?)

Aleh
26.06.2017
16:01:39
только личная оценка проверяльщика, думаю
ну вообще поэтому и интересно посмотреть, что делали люди и как они оценивались

Alex
26.06.2017
19:08:31

Артур Евгеньевич
26.06.2017
20:20:59
Так парни опишу подробнее свою проблему. Есть классы (в скобках примеры)
Course - ученая программа(матанал)
Filial - филиал в городе астана
CourseFilial - табличка в базе обозначающая конртеную реализацию программа в филиале
Plan - конкретный план с определенными датами программы в филиале
Lesson - элемент плана лекция по сути
Так и не понимаю как всю это систему разложить грамотно. Вот напрмер методы: getNearestLessonOfCourse(Course)
archiveCourse(Course) - проверка есть ли впереди активне лессоны курса и изменение статуса
cancelLessonsOfTeacher(Techer) - отмена все х уроков одного препода
Сейчас это все лежит в классах с сцуффиксомм service, которые обертки над реопзиториями и сущностями. Всё никак не могу придумать как начать их разносить, трудности даже с наименованиями. Буду благодарен за любые наводки
@mkusher @fes0r @f3ath @chipnesh и все все все))


Sergey
26.06.2017
20:22:17
> CourseFilial - табличка в базе обозначающая конртеную реализацию программа в филиале
то есть povit табличка с двумя полями или все же там что-то еще есть?
https://ru.wikipedia.org/wiki/GRASP#1._.D0.98.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D1.8D.D0.BA.D1.81.D0.BF.D0.B5.D1.80.D1.82_.28Information_Expert.29
это тип необходимый бэкграунд для дальнейших обсуждений
там недолго читать


Артур Евгеньевич
26.06.2017
20:25:48
да, я видел я и раньше знал его. Но вот например метод getNearestLessonOfCourse(Course) кто больше обладает инфой. Лессоны или Курсы. Наверно лессоны так как курс мы передаем параметром и нам от него ничего не нужно по сути. Тогда рассуждаю дальше в каокй класс связанный с Lesson переестить его из LessonService?
если в entity то будет жирная модель
которая много на себя берёт

Sergey
26.06.2017
20:26:16
не торопись

Артур Евгеньевич
26.06.2017
20:26:29
LessonToCourseRelation - ка кто нелепо на мой взгялж
Хотя тутеще усложняется тем что курсы связаны с урокам ине напрямую
а через CourseFilial и Plan

Sergey
26.06.2017
20:27:15
расскажи про связи. Lessons существуют независимо или все-таки привязаны к плану? Планы привязаны к курсу?

Артур Евгеньевич
26.06.2017
20:28:46
Course<CourseFilial<Plan<Lesson

Google

Артур Евгеньевич
26.06.2017
20:28:56
правое принадлежит левому

Sergey
26.06.2017
20:29:11
окей, давай дальше. getNearestLessonOfCourse - что делает этот метод?
1. что он должен делать, какова его задача?
2. что ему для этого нужно от кого?

da horsie
26.06.2017
20:30:08
По неймингу: getNextAvailableLesson? getNextScheduledLesson?

Sergey
26.06.2017
20:30:24

da horsie
26.06.2017
20:30:48
Nearest - это про пространственную близость, не про временнУю

Артур Евгеньевич
26.06.2017
20:31:03
По курсу получает все CourseFilial по ним все Plan по ним все lesson и из лессонов выбирает тот начало которого максимально близко к текущей дате
я метод как пример привел, не помню есть ли он точно или нет в проекте

Sergey
26.06.2017
20:34:27
ну решение влоб

Артур Евгеньевич
26.06.2017
20:34:49
вот реальный пример который утром писал вам пытался сделать - isStudyProgrammFinished - проверяет есть ли у конкретного плана, уроки которые будут проведены в будущем. Я так и не определился утром куда его засунуть в итоге написал sql в файле консольной команды (( без повторного изпользования естесвенно и объектов

Sergey
26.06.2017
20:35:29
1. просим курс предоставить список всех ближайших лекций
2. просим каждый филиал предоставить список ближайших лекций
3. просим каждый план предоставить список ближайших лекций
4. возвращаем агрегированный результат

da horsie
26.06.2017
20:35:53
StudyProgram - это наывается Curriculum

Sergey
26.06.2017
20:36:48
минусы - большое количество запросов в базу, не годится когда данных много. Либо если твоя ORM умеет очень хорошо работать с коллекциями. С другой стороны если у тебя лекции ничего не знают о курсах и надо ходить через большую цепочку зависимостей... ну у нас будут проблемы
> Я так и не определился утром куда его засунуть в итоге написал sql в файле
если это просто репорт - то в целом норм
вообще я не вижу проблем с тем что бы подобного рода выборки делать простым SQL-ем в сервисах. Если это задачи именно на отображение например.
ибо судя по описанию задача не из разряда OLTP
то есть у тебя корень агрегата выходит курс и все его потраха входят в бизнес транзакцию... хотя нам нужны только курсы и занятия.

Denis
26.06.2017
20:39:42
В ддд (так сказал эванс) репозиторий - это вроде как коллекция, только умная) т.е. там самое место сложным агрегирующим запросам

Aleh
26.06.2017
20:40:01
только если они вытягивают сущности

Google

Aleh
26.06.2017
20:40:12
а если это какие-то вьюшки-дтошки, то не надо

Sergey
26.06.2017
20:40:21

Denis
26.06.2017
20:40:28
Вытягивать можно только рут)

Sergei
26.06.2017
20:40:31
Если нужно знать когда будет ближайший курс может запилить LessonCalendar?

Aleh
26.06.2017
20:40:34

Denis
26.06.2017
20:40:36
*желательно

Aleh
26.06.2017
20:40:37

Sergey
26.06.2017
20:40:43
хотя тут тоже... если у нас репозиторий реализует интерфейс коллекции - в теории мы можем ее отфильтровать и получить новую коллекцию

Admin
ERROR: S client not available

Aleh
26.06.2017
20:40:45
очень зависит от кейса, лучше не надо)

Sergey
26.06.2017
20:40:46
но хз

Артур Евгеньевич
26.06.2017
20:40:53

Sergey
26.06.2017
20:40:56

Артур Евгеньевич
26.06.2017
20:41:42
но я хотел часть методов описать где то в общих файлах чтобы юзать их потом
окзалось sql в разы проще для меня

Denis
26.06.2017
20:42:08
Используй цкуэрэс ?

Aleh
26.06.2017
20:43:22

da horsie
26.06.2017
20:43:52

Артур Евгеньевич
26.06.2017
20:44:05

Google

Артур Евгеньевич
26.06.2017
20:45:01

Denis
26.06.2017
20:46:09
Прост положи свои скрипты в методы репозитория)

Артур Евгеньевич
26.06.2017
20:47:25
Так тогда репозиторий будет свалкой геттеров и фильтров

Denis
26.06.2017
20:47:46
?

Sergey
26.06.2017
20:47:52

Denis
26.06.2017
20:47:54
Откуда геттеры?)

Артур Евгеньевич
26.06.2017
20:48:06
Так нихуя и не понял как мою предметную область отобращзить в маленьких классах

Aleh
26.06.2017
20:48:06
д - декомпозиция, если у тебя много фильтров, то сделай объекты представляющие собой фильтры

Sergey
26.06.2017
20:48:14

Артур Евгеньевич
26.06.2017
20:48:31
Откуда геттеры?)
Гетерами я назвал методы запросы возвращающие коллекции по условию

Denis
26.06.2017
20:48:44
Я думал это всё скуэль запросом можно сделать? Не?)

Sergey
26.06.2017
20:48:59
но у этого способа если втупую делать куча минусов

Артур Евгеньевич
26.06.2017
20:49:21
Курс это вершина иерархии
И вск так или иначе на нкго ссылается

Sergey
26.06.2017
20:49:46
мне кажется у тебя отношения между сущностями какие-то неправильные
и тебе надо это переработать

Артур Евгеньевич
26.06.2017
20:50:38