Шаблоны разработки. Шаблоны GRASP

  Рет қаралды 41,356

Sergey Nemchinskiy

Sergey Nemchinskiy

Күн бұрын

Пікірлер: 43
@AlexK-md8vx
@AlexK-md8vx 10 жыл бұрын
Замечательный курс! Отлично систематизирует, раскладывает все по полочкам! Спасибо, Сергей!
@geekacademytv
@geekacademytv 10 жыл бұрын
Отличный курс! Сергей, спасибо огромное !
@yataganenko
@yataganenko 10 жыл бұрын
Да что за скромность. Просто аху***ый курс. Безмежно вдячний! :)
@yataganenko
@yataganenko 10 жыл бұрын
***** Это Вам спасибо. Ждем еще курс по Java :)
@iromanochka
@iromanochka Жыл бұрын
- Что такое "делегирующий" все знают? - да... - Ну, хорошо - наверное 35:03
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
Классно когда лекции читает практик
@mr_DorianGray
@mr_DorianGray 10 жыл бұрын
Огорчен. Когда мы писали систему управления платежными терминалами, то все обработчики событий UI я вынес в отдельный класс, там же синхронизировал ajax и искренне верил в гениальность своего изобретения... оказалось, что это просто реализация шаблона "Контроллер"
@белка-у8б
@белка-у8б 2 жыл бұрын
Не огорчайся - это все можно будет в конечном итоге автоматизировать
@АлександраТрускова-ь3ь
@АлександраТрускова-ь3ь 2 жыл бұрын
Спасибо за крутую ЛК, будь у меня такой преподаватель в университете я бы туда ходила день и ночь ! P.S Вроде на данный момент есть связанность и свяЗНость ( вместо зацепления), если я правильно понимаю о чем идёт речь )
@icywiener5421
@icywiener5421 7 жыл бұрын
--Что такое "делегирующий"- все знают? -Да...(шепотом:) наверное...
@sobaleubel
@sobaleubel 6 жыл бұрын
Да это же Гилфойл =)
@МихаилМорозов-ц1г
@МихаилМорозов-ц1г 5 жыл бұрын
В том смысле что он так же предвзято относится к индусам?
@korobkofff
@korobkofff 7 жыл бұрын
Отличный курс! Если б ещё рядом с камерой кто то не жевал сопли и не шмыгал носом - в наушниках это слушать просто адь.
@svyatoslavs945
@svyatoslavs945 5 жыл бұрын
Мне кажется, Cohesion в данном контексте стоило бы переводить как "сфокусированность"
@svyatoslavs945
@svyatoslavs945 5 жыл бұрын
@@SergeyNemchinskiy в наших силах поменять )
@WillSom056
@WillSom056 8 жыл бұрын
Блин, оператор громко дышит. А в общем как всегда классная лекция!
@Dmytrii_Havryliuk
@Dmytrii_Havryliuk 8 жыл бұрын
он дорожки занюхивает
@ilnurryazhapov
@ilnurryazhapov 5 жыл бұрын
У него дыхание захватывает от подачи Сергея))
@wd_1
@wd_1 4 жыл бұрын
нахер ты это сказал, сразу начал слышать
@dzen1234
@dzen1234 7 жыл бұрын
0:42 Что-то не вижу никакой рекурсии. Всего лишь аббревиатура.
@ИгнациусКоппер-к6ч
@ИгнациусКоппер-к6ч 5 жыл бұрын
@@0imax - первая буква расшифрована как General, а не GRASP, так что я тоже не вижу рекурсии. (но это всё мелочи и придирки, конечно же)
@maxkomarow
@maxkomarow 8 жыл бұрын
Спасибо за материал, не совсем понятно за Creator, часто слышал что нужно использовать dependency injection контейнеры и внедрять зависимости в конструктор при создании объекта. При Creator возникают проблемы при тестировании. Подскажите, какой подход чаще всего используется?
@maxkomarow
@maxkomarow 8 жыл бұрын
Спасибо за ответ, я имел в виду следующее - если класс А использует класс Б, то что используется чаще: - класс А в своем конструкторе сам создаст себе класс Б. - мы юзаем DI контейнер, который создаст А и напихает в него Б, т.е. отвечает за все зависимости. Буду признателен если подскажете, спасибо.
@Dmytrii_Havryliuk
@Dmytrii_Havryliuk 8 жыл бұрын
зависит от задачи, если у тебя данный объект абстрактный, то можно воспользоваться фабрикой, или же контейнером, но для таких задач контейнеры не совсем нужны.
@ВикторГиль-ф2ф
@ВикторГиль-ф2ф 9 жыл бұрын
Согласен, отличный курс. Единственное, фраза "бизнес логика должна быть однопоточной и не содержать mutex" возможно стоило сказать немного иначе. Бизнес логика ДОЛЖНА быть многопоточной (иначе зачем многоядерные системы), но обращаться куда либо обязана в пределах своего контекста потока. А mutex наоборот, нарушают многопоточное выполнение, т.к. блокируют потоки. Тем более что в том же EE уже есть контекст (с соединением к базе данных из пула соединений...) у бинов, и у каждого там свой поток. Но это я возможно придираюсь.
@ВикторГиль-ф2ф
@ВикторГиль-ф2ф 9 жыл бұрын
Виктор Гиль А вместо ссср лучше анекдот, про бизнес логику в тюрьме ( как в Городке). Тарелка, ложка и суп - это контекст. Бизнес логика - "это что такое, мне же мясо положено" Контроллер - "положено,значит ешь". Бизнес логика - "да в том то и дело, что оно не положено". Контроллер - "не положено, не ешь".
@ВикторГиль-ф2ф
@ВикторГиль-ф2ф 9 жыл бұрын
Виктор Гиль Кстати конструктор не совсем обычная функция. И с точки зрения компилятора тоже. Это единственная функция, которая вызывается всегда, перед использованием класса. Даже если в конструкторе потомка не указать вызов конструктора предка, он все равно вызывается компилятором неявно. Потом могут быть проблемы с исключениями при отладке, строчки нет а исключение есть... поэтому с ресурсами в конструкторах не работают, как в обычных функциях.
@ВикторГиль-ф2ф
@ВикторГиль-ф2ф 9 жыл бұрын
Виктор Гиль Конструктор даже может быть вызван до старта самой программы. public static TestConstructor tc = new TestConstructor(); public static void main(String[] args) { System.out.println("Hello!");
@aleksandrsavvopulo5473
@aleksandrsavvopulo5473 7 жыл бұрын
Возможно что все таки должна быть однопоточной, так как в этом случае не возникает блокировок. Что есть плюс в многопоточных системах.
@EyeOfInfinity-t5g
@EyeOfInfinity-t5g Жыл бұрын
Касательно заявления про однопоточность бизнес логики. Если у нас есть хендлер, который вызывают внешние клиенты, то очевидно что каждый такой вызов - это отдельный поток (ну или горутина в go и т.п.). Ставить все вызовы в очередь - это полная дичь. Обработка должна быть параллельной иначе ни о каком highload речь идти не может. Данные у нас общие и доступ к ним надо защищать мьютексами - это раз. Далее, если нам необходимо сходить в другие сервисы (а в микросервисной архитектуре это надо почти всегда), то вполне вероятно мы можем сделать это параллельно, а не последовательно. Т.е. мы опять получаем многопоточный код. Никаких проблем с юнит тестами нет - просто пишем тесты на элементы бизнес-логики отдельно. Фраза "с базами сейчас работают ORMы" - тоже не однозначна. По крайней мере там, где высокая нагрузка на операции с БД - никаких ORM нормальный архитектор не допустит.
@KhSlavjan
@KhSlavjan 9 жыл бұрын
так, как тут все перфекционисты предлагаю немного оптимизировать перевод терминов: Low Coupling назвать Низкой Зависимостью, а High Cohesion - Высокой логической Связанностью, лучше наверное Ограниченной Специализированностью (или как-то так).
@ИванИванов-в7е3у
@ИванИванов-в7е3у 8 жыл бұрын
+Sergey Nemchinsky какой смысл что либо-придумывать, если термины официально переведены, с моей т.з. идеально - это низкая связАННОСТЬ (от слова связь, зацепление, сопряжение) (ru.wikipedia.org/wiki/Зацепление_(программирование)) и высокая связНОСТЬ (от вязкости, прочности, силы взаимосвязи) (ru.wikipedia.org/wiki/Связность_(программирование)). В этом контексте перевод cohesion, как "зацепление" противоречит общепринятой логике. Но это просто термины, введенные для обобщения принципов, а так изложение максимально доступное, практически без привязки к ЯП. Большое спасибо!
@usersbit
@usersbit 4 жыл бұрын
@@ИванИванов-в7е3у Сергей ориентируется на перевод книги Крэга Лармана. В то время, в Википедии участники переводов не могут или пока ещё не пришли к единому переводу: ru.wikipedia.org/wiki/Обсуждение:GRASP ru.wikipedia.org/wiki/Обсуждение:Связность_(программирование) ru.wikipedia.org/wiki/Обсуждение:Зацепление_(программирование)
@MindsetOfMusic
@MindsetOfMusic 5 жыл бұрын
Все хорошо, но правильно говорить так : Класс должен иметь Слабое зацепление (Low Coupling) и Высокую связность (High Cohesion). Зацепление это за какие классы класс зацеплен (зависит) то есть он должен иметь минимум зависимостей, а связность значит на сколько он обладает свойством СВЯЗНОСТИ то есть на сколько легко его использовать другим классам , должно быть легко значит и связность должна быть высокой. Еще можно сказать что зацепление это СВЯЗАННОСТЬ, таким образом не надо путать свЯзность и связАнность. ru.wikipedia.org/wiki/GRASP
@usersbit
@usersbit 4 жыл бұрын
Сергей ориентируется на перевод книги Крэга Лармана. В то время, в Википедии участники переводов не могут или пока ещё не пришли к единому переводу: ru.wikipedia.org/wiki/Обсуждение:GRASP ru.wikipedia.org/wiki/Обсуждение:Связность_(программирование) ru.wikipedia.org/wiki/Обсуждение:Зацепление_(программирование)
@usersbit
@usersbit 4 жыл бұрын
Отличная статья Cohesion and Coupling: the difference enterprisecraftsmanship.com/posts/cohesion-coupling-difference/
@МаксимАлексеев-ч4й
@МаксимАлексеев-ч4й 5 жыл бұрын
Диаграммы первого примера с Low Coupling совсем чёт не отражают сказанного. "Low Coupling - низкая связанность. Мы хотим чтобы между компонентами было как можно меньше стрелочек." В итоге на диаграмме "ДО" и "ПОСЛЕ" количество стрелочек одинаковое. Этот пример точно не для демонстрации Low Coupling
@alexpepper2146
@alexpepper2146 9 жыл бұрын
Information Expert не значит всё хранить в 1 классе, это больше про разбивку по доменам и смысловым операциям, по типу информации. на примере даже того же калькулятора, мы можем иметь калькулятор который считает покупки из продуктового, а так же отдельный клас калькулятора который будет счетать из косметического магаза, и т.д. а от услышенного складывается впечатление что только 1 класс должен использовать orders и т.д. "молодые" могут запутаться тута..
@DasBrennendeHerz
@DasBrennendeHerz 8 жыл бұрын
Можно и в таком контексте воспринимать. И в плане ответственности классов и в плане ответственности пакетов, и так как Вы написали. Это ведь не энтерпрайз-паттерны, а ООП-паттерны. И кроме того нельзя забывать главное - "паттерны не являются законченным образцом проекта. Это описание или образец того, как можно решить задачу таким образом , чтобы это решение можно было использовать в различных ситуациях". Уже встречал на ютубе преподавателей которые шаг в сторону от канонического применения паттернов считают нарушением и пытаются присобачить решение к другому паттерну, хотя это далеко не всегда верно.
@kai3341
@kai3341 3 жыл бұрын
Касательно датчика много нюансов. Разделение класса на 2 имеет смысл, когда наша абстракция -- измерение, и теряет смысл, когда наш уровень абстракции -- датчик. Что делать, если значения датчик отдаёт парами? Класс должен отбросить вычитанное значение, с которым он не работает? Что делать, если физический смысл, помимо значений по отдельности, имеет именно вычитанная пара? Заниматься фикцией и надеяться, что собранная вышестоящим классом пара будет достаточно точна? Не дай боже с таким подходом писать медицинский софт Вся эта лирика о чём? Об уровне абстракции (с чем мы работаем) и здравом смысле
@vasia212
@vasia212 3 жыл бұрын
[kōˈhēZHən] же...
@gen7891
@gen7891 7 жыл бұрын
Сильная связность и слабая связанность. Просто переводы книг гавеные. Проектирование это вообще творческий процесс, который сопровождается везением.
@ax3914
@ax3914 6 жыл бұрын
ужасный оператор.. ,курс отличный
Шаблоны разработки. Шаблоны GoF 2
43:44
Sergey Nemchinskiy
Рет қаралды 24 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН
Enceinte et en Bazard: Les Chroniques du Nettoyage ! 🚽✨
00:21
Two More French
Рет қаралды 42 МЛН
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
G.R.A.S.P | шаблоны проектирования
12:09
Шаблоны разработки. Шаблоны GoF 5
54:52
Sergey Nemchinskiy
Рет қаралды 12 М.
Евгений Борисов - Power of Gradle
1:19:56
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 93 М.
Шаблоны разработки ПО. Шаблоны GRASP
1:05:12
Sergey Nemchinskiy
Рет қаралды 31 М.
Управление Миром Лекции ФСБ ( Ефимов )
2:01:38
Valery Kudryavtsev (1337 Sp34kage)
Рет қаралды 10 МЛН
Шаблоны разработки. Вводная лекция
47:52
Sergey Nemchinskiy
Рет қаралды 79 М.
Всё о нотации BPMN ✨
1:10:04
Мир вычисляем!
Рет қаралды 59 М.
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН