Видео прикольное,просто о сложном,но площадь квадрата высчитывается точно так же как площадь прямоугольника :))
@Кирилл-в4л8м3 жыл бұрын
Одно из лучших видео по SOLID. Максимально просто, коротко и понятно. Большое спасибо!
@koala4ka2 жыл бұрын
наверное вы единственный кто хорошо объяснил принцыпы спасибо за видео
@MaxKalama5 жыл бұрын
Я разработчик со стажем и, стыдно сказать, что всегда ленился разобраться в принципах solid. Александр, спасибо большое! За 12 минут этого видео всё стало предельно ясно!
@alextopsite4 жыл бұрын
Разобраться это одно, а начать применять - это уже совсем другая история
@JohnDoe_7774 жыл бұрын
Ты машинистка значит, а не разраб.
@jonathanlawrence22493 жыл бұрын
i dont mean to be offtopic but does anybody know a method to log back into an instagram account..? I stupidly lost my login password. I would love any help you can offer me!
@soversus53749 ай бұрын
@@alextopsite , проблема не начать применять, а принять все эти "удобства" своим естеством и понять зачем. Что если мое нутро просто орет "зачем"? Чем плохо, например иметь один класс? Чем это неудобно? Никогда не испытывал неудобства. И тут вдруг мне говорят, это неудобно. ) А работать с кучей файлов удобно? Плодить тысячи файлов удобно? Удобно, когда хостер не хочет делать резервную копию от переизбытка маленьких файлов? ... Это как бы вот только, что на скорую руку. Удобство, понятие относительное. Но тут кто то "придумал" принципы и все теперь должны им следовать порождая новый геморрой. ) Барбары Лискоу предлагает свои тапки, а пусть походит в моих, мои мне удобнее, значит и ей будет удобно. )
@soversus53749 ай бұрын
@@JohnDoe_777 , забавно. А я думал, разраб, это тот кто думает своей головой, а не копирует бездумно. Вы выходит не разраб, а конструктор? Берете готовые кубики и складываете в конструкцию? ) Без обид.
@Egadirov4 жыл бұрын
Лучший туториал по SOLID, браво!
@vrg94603 жыл бұрын
Спасибо, все четко и понятно
@alexeypashchenko4 жыл бұрын
Очень понятно объяснил!
@TheMool115 жыл бұрын
Спасибо, очень доступно объяснил и с хорошими примерами.
@maxkatrenko88654 жыл бұрын
Спасибо большое!
@mirlaniusUMK5 жыл бұрын
очень приятно изложение темы, музыка этому хорошо способствует. Спасибо
@alextopsite4 жыл бұрын
Отличное, а главное понятное объяснение SOLID
@livecodingschool89064 жыл бұрын
благодарю!
@egorslamihin24345 жыл бұрын
Спасибо, с конкретными примерами. Ясно и доступно)
@exxbrain4 жыл бұрын
В первом примере в случае с большим классом мы тоже будем менять только один класс. Наверное имелось ввиду, что причин для изменения большого класса из примера может быть 3 - это 1) изменение способа хранения, 2) изменение структуры данных и 3) изменение способа вывода, что не соответствует принципу Single Responsibility. Принцип говорит, что классы должны иметь только одну причину для изменения, а не "только одну ответственность". Есть еще одна проблема в описании первого принципа - для класса вывода есть как минимум 2 причины для изменения, собственно скорее всего то же можно сказать и о классе для хранения. Принцип Single Responsibility нарушен и в результате рефакторинга. Возможно использован слишком сложный пример.
@МартинШааф5 жыл бұрын
Прекрасное объяснение, спасибо большое!
@livecodingschool89065 жыл бұрын
Спасибо за комментарий
@ТкачукИгорь5 жыл бұрын
Спасибо! Очень полезно! Рассказываете очень доступно. Приятно слушать. Жду с нетерпением еще интересных уроков!!
@livecodingschool89065 жыл бұрын
Спасибо большое будем стараться
@nbrains63802 жыл бұрын
Класс должен выполнять не одну какую-то работу, а должен выполнять что-то для одного чего-то или для одной какой-то группы. В книге Роберт Мартин приводил пример с классом Работник в котором обледенили методы работающие с разными отделами внутри их фирмы. И вот как раз по этой причине, что они работают для разных групп, его нужно было разделить. Но сам класс может много чего делать для этой группы.
@alex_pochebut5 жыл бұрын
Классная подача и хорошие примеры, Спасибо!
@eugenstakhursky96045 жыл бұрын
Спасибо Александр! Лайк однозначно)
@batpyiiikob72455 жыл бұрын
Коротко и понятно, спасибо
@MrLOLs14 жыл бұрын
Спасибо
@mushfigagayev43964 жыл бұрын
Spasibo druq.
@alekseyradzhabov46845 жыл бұрын
Очень структурировано, спасибо!
@gsfynkjczard2 жыл бұрын
На примере ларавела удобно рассказывать)
@VCSelfDevelopment5 жыл бұрын
Лайк поставил видео крутое, но "принцЫп"...:D
@livecodingschool89065 жыл бұрын
да есть косяк спс
@Сергей-е4г5п4 жыл бұрын
АрхЕтиктура ООП в начале еще.
@TheRockmannn5 жыл бұрын
за трек на фоне тоже плюс)
@volodymyrgachkovsky72565 жыл бұрын
В описании улыбнуло "Что такое SOLID принцы". Это прям для дам ищущих своих принцев. Ищите только SOLID принцев ))) Так же там же есть "Принцы открытости закрытости (Open/Closed)"
@livecodingschool89065 жыл бұрын
Хаха и правда смешно получилось
@thejustmoose Жыл бұрын
Круто. Но прям на первом слайде опечатка. И на втором тоже.
@ТуралИскендерли4 жыл бұрын
все хорошо объяснил спасибо только последний не понял в основном из за некачественного звука.
@simplewebdev10985 жыл бұрын
С принципом подстановки Барбары Лисков пример ужасный. Такое впечатление, что автор примера вымучивал его под дулом пистолета. Там есть два класса: прямоугольник и квадрат, квадрат наследуется от прямоугольника. У прямоугольника есть два приватных поля: высота и ширина, и сеттеры + геттеры соответствующих полей. Квадрат наследуется от прямоугольника (получает поля высоту и ширину) и переопределяет сеттеры высоты и ширины. Сеттер высоты устанавливает и ширину и высоту переданным значением, сеттер ширины аналогично. Пока всё нормально (почти). Но дальше появляется метод вычисления площади. Как он работает? Он принимает три параметра: объект класса прямоугольник (или его наследник), ширину и высоту. Далее, он вызывает сеттер ширины, потом сеттер высоты, потом геттерами получает ширину и высоту и возвращает их произведение. С прямоугольником всё работает нормально, а у квадрата сначала ширина и высота устанавливается в 4, потом ширина и высота устанавливается в 5, вызываются геттеры и получается неверный ответ (не совсем так). Первый вопрос к методу: почему он неявно присваивает значения? У него в названии есть set? Тогда почему он что-то устанавливает объекту. Второй вопрос, кто так вообще делает? В нормальном мире создаётся объект, которому в конструктор передаются значения ширины и высоты. Либо, конструктор перегружается и устанавливаются значения по умолчанию. Что значит new Sqгare или new Rectangle без параметров? Прямоугольник с шириной 0? А почему 0? Должны быть инициализирующие значения. Сама суть ООП нам об этом говорит: прямоугольник - объект, со своими свойствами: ширина и высота. При его создании мы должны их указать (или получить по умолчанию). Потом мы можем их поменять сеттером, это ОК. В таком случае метод вычисления площади получает геттерами нужные значения и всё работает нормально. И не изменяет (неявно!) переданный ему объект. Кроме того, что вообще должен означать вызов calculate (new Square, 4, 5) ? Почему мы квадрату передаём два значения (ширина и высота), отличающихся между собой. Вопрос: чему равна площадь квадрата с шириной 4 и высотой 5 см? А это точно квадрат? А как наш код защищён от подобных ошибок? Почему клиент, который понятия не имеет о внутреннем устройстве класса, может делать подобные вызовы? В нормальном мире создаётся новая фигура Rectangle rect = new Rectangle (4, 5) или Square sq = new Square (4). Конструктор в прямоугольнике устанавливает значания ширины и высоты. Конструктор в квадрате вызывает конструктор прямоугольника со значениями (4, 4). В прямоугольнике определяется метод расчёта площади. Квадрат его не переопределяет. вызывается таким образом: int square = rect.calculateSquare() или int square = sq.calculateSquare() и всё работает замечательно. Если метод сторонний, ну ладно, но он не должен неявно устанавливать свойства объекта. Передали ему объект класса Rectangle и пусть вычисляет. Я не говорю, что такого принципа нет, или он не нужен. Я говорю только, что пример подобран ужасно.
@xenm854 жыл бұрын
Да просто этот пример зачастую везде описывают.
@simplewebdev10984 жыл бұрын
@@xenm85 тогда это ещё хуже. Мало того, что не понятно, в чём заключается принцип Лисков, но ещё и получается, что уважаемые авторы нихрена не понимают в том, о чём пишут. Или им пофиг, ctrl+c ctrl+v.
@eugeniabashieva25364 жыл бұрын
Да нормальный пример, всё понятно. Просто если вы никогда не программировали это сложно понять, как не объясняй. Всё отлично человек объяснаяет, подача простая и понятная, информация подобрана хорошо. 5 баллов из 5.
@xenm854 жыл бұрын
@@eugeniabashieva2536 вы видимо программировали. Приведите пример нарушения этого принципа в реальном коде
@livecodingschool89064 жыл бұрын
@@xenm85 Не все 5 принципов равнозначны так за 10 лет в веб программировании ни разу не встречал проблему связанную с подстановкой Liskov, но это не значит что данной проблемы не существует. Скорее данная проблема актуальна для более больших программ - такие как операционные системы. Я сообще не фанат наследование и если отказаться от наследования то данной проблемы не существует )
@DanielTitov_archimage5 жыл бұрын
dependency inversion можно достичь, используя паттерн фабрика. спасибо за видео
@DzhigurdaAnton3 жыл бұрын
так у Order и у OrderView один Актор. Это вы описали принцип чистого кода, в книге Чистая архитектура Роберта Мартина сказано о подобной путанице.
@TheOmokage5 жыл бұрын
Я не согласен с тем пояснением для Single Responsibility, которое представлено в этом видео. У класса должна быть одна ответственность, да. Но, Order - это целый логический кусок, который вполне может быть в одном классе, который, соответственно, будет иметь одну зону ответственности - Order. Тут все дело в количестве сущностей, которые используют этот класс. Такие сущности в uml называются Actor. Разбивать класс на более мелкие по ответственности классы стоит только в том случае, если у них в результате будут отличатся эти самые Actor'ы. Иначе, вы просто создаете более сложное и запутанное приложение, которое конфликтует со вторым принципом Open/Close. То есть есл ивы без надобности разделяете один класс на три, но ваше количество Actor не увеличилось при этом, то вы просто увеличили его связанность и у уменьшили связность, без особых преимуществ. Самый простой для понимания пример - это класс формы в WnForm. На форме может быть куча кнопок и все они делают разные вещи, но в свою очередь класс Form имеет ответственность перед Form1 и больше не перед кем. Если мы разобьем этот класс, как предлагаете вы, то сложность программы возрастет многократно.
@livecodingschool89065 жыл бұрын
Спасибо за комментарий. Дело не в том чтобы слепо следовать этим правилам если у вас небольшой интернет магазин и в классе Order находится скажет ~10 методов большого смысла такое разделение не принесет но сложность возрастет. Свами здесь согласен. Но давайте попробуем забежать вперед. Ваш интернет магазин стал успешным и разросся до размеров амазона. Вы можете представить чтобы в амазоне все что каcается заказа находилось в одном классе ? Какой он будет ~1M строк кода? Думаю что такой класс будет сложно поддерживать. Чисто теоритически все программу можно написать в одном файле в и не парится с namespace в всей этой лабудой с ооп. Для компьютера нет разницы. Но вот человеку будет очень сложно разобраться. По этому и пытаются код разделять на какие-то куски которые были бы понятны логически. Лично я бы предпочел бы 10 классов с ~100 строк кода чем один в класс в ~1000 строк так как если раздробить большой класс на небольшие кусочки у них появится название которое будет подсказывать что оно делает
@soversus53749 ай бұрын
@@livecodingschool8906 , прям аж интересно стало... что же там в order озона такого понаписано на 1м кода. )
@inilim5 жыл бұрын
Люблю делать класс монстр!
@simplewebdev10985 жыл бұрын
Видимо, не приходилось переделывать класс-монстр в связи с изменениями в проекте.
@soversus53749 ай бұрын
С одной стороны, я понимаю как отстал в теории для собеседования... Но с другой стороны, забавно смотреть, как мне рассказывают на сколько удобнее носить чужие тапочки. В особенности тапочки Барбары Лискоу. Интересно, у нее какой размер, а то вдруг и вправду удобнее? )))
@eazypeazy8559 Жыл бұрын
пожалуйста, помечайте "Clean Architecture" (и следующий из него SOLID) как торговую марку и частный взгляд создателей на то, как по их мнению надо писать код. "Чистая архитектур/код" это не ультимативные подходы.
@livecodingschool8906 Жыл бұрын
это один из способов как можно писать код чтобы потом в этом можно разобраться, но естественно не единственный )
@eazypeazy8559 Жыл бұрын
@@livecodingschool8906 это неправда)
@Antzimin2 жыл бұрын
А фоновая музыка зацикленная словами и безумно отвлекающая это специально или так получилось?
@olegpristashkin90785 жыл бұрын
Площадь прямоугольника єто вісота умноженная на ширину, площать квадрата можно тоже посчитать как произведение вісоті на ширину
@livecodingschool89065 жыл бұрын
Может не совсем удачный пример - смысл в том что если мы в дочернем классе меняем поведение функции родителя например вместо S = a*b будем делать S = a*a что в частности верно (для квадрата) то в дальнейшем можно упустить из виду что наша реализацию считает площадь не как произведение сторон а как квадрат стороны. Скажу честно не самая распространенная проблема!
@OpalGooDog3 жыл бұрын
А это пхп на примере?
@livecodingschool89063 жыл бұрын
оно самое
@OpalGooDog3 жыл бұрын
@@livecodingschool8906 благодарю!)
@OpalGooDog3 жыл бұрын
@@livecodingschool8906 спасибо за объяснения)
@olegpristashkin90784 жыл бұрын
принцип Лисков нужен для низкоуровневого кодинга, а для PHP, JS это мусор - правильно?
@livecodingschool89064 жыл бұрын
и для PHP и JS тоже актуально но достаточно редко встречается - зависит на сколько много у вас OOP кода
@AlexDeminX5 жыл бұрын
На мой взгляд пример с прямоугольником и квадратом спорный. Тут скорее всего корявая реализация с использованием. Я понимаю, что не всё из жизни можно переложить на принципы ООП, но это не тот случай. Из геометрии мы знаем, что квадрат - это частный случай прямоугольника у которого все стороны равны. Так почему при подсчёте площади передаётся new Square, а ширина и высота не равны друг другу? Так получается здесь котлеты с мухами в перемешку?!
@livecodingschool89065 жыл бұрын
Как раз отличный пример так как все это знаю т и и большенство будет ломать логику родителя зачем мол заниматься ерундой передавать два параметра когда можно один. Данную ошибку будет сложно отловить а если представить что параметров не 2 а 20 или 200 скажем это модуль аналитики - то вообще кошмар для разработчика
@AlexDeminX5 жыл бұрын
@@livecodingschool8906 я не про это, а про то что выглядит, как минимум, странно - создание квадрата и передача в параметрах двух разных величин.
@nursgrata28655 жыл бұрын
не совсем понял ваш пример класса квадрат ,просто вы там параметры не павилно задали
@dsalodki4 жыл бұрын
как-то не идеально, но лайк
@mishafomin39734 жыл бұрын
Надо бы микрофончик получше... а то немного тише чем у других..... приходится громкость накручивать
@Barsikspit4 жыл бұрын
музыка на фоне только мешает
@eugenteris5 жыл бұрын
Не уверен, что принцип open/closed описан верно. То, что описано более подходит для полиморфизма. Принцип open/closed больше о наследовании, чем об имплементации
@kind1y4 жыл бұрын
Всё понятно кроме Лисков...
@SmemsMusic4 жыл бұрын
Вроде и неплохо объясняешь, но как же скучно... Я несколько раз чуть не заснул, хотя тема и интересна. Написали бы текст какой-то, проговорил бы его несколько раз перед записью. И при монтировании либо переходы плавные, либо обрезать незаконченные слова. А то в некоторых местах обрывается на полуслове и сразу же новая тема. В итоге пока переключишься с того, что не договорили в предыдущем предложении на новое, приходится перематывать назад. Честно, лучше статью почитать чем такое видео, оно сложно к восприятию.
@Кукусик-е2э Жыл бұрын
А что такое архЕтИктура??? 😂🤦♀️
@РоманСарваров-ч5л4 жыл бұрын
Принцип открытости/закрытости не понимаю. Это про то, чтобы не делать методы private, а делать их protected или что?
@livecodingschool89064 жыл бұрын
нет это про то чтобы не изменять логику методов а дополнять и расширять
@АлексейКузьмичёв-ц7о4 жыл бұрын
Озвучка статьи с хабры, лол
@livecodingschool89064 жыл бұрын
в описание есть ссылочка
@АлексейКузьмичёв-ц7о4 жыл бұрын
@@livecodingschool8906 Вот и вспомнилось да, всё оттуда
@МаксимМакаров-о5ы Жыл бұрын
Музыка нарушает принципы solid😂
@alexpipin36934 жыл бұрын
пля как ты туго рассказываешь я представляю как бы ты про фп рассказывал))
@tao3095 жыл бұрын
принцИп, не принцЫп
@ТимурСафаров-в1ч2 жыл бұрын
Что ты тут сказал нихера ж не понятно - 9:55
@astasjr89694 жыл бұрын
Ты, конечно, невероятно красив, но, полагаю, если бы 80% места занимал код, а не твоё лицо, всё же было бы лучше.
@livecodingschool89064 жыл бұрын
хаха - следующее видео скринкаст только хард коде
@JohnDoe_7774 жыл бұрын
Мудень в кадре сам не понимает о чем рассуждает. Очередной учитель.
@livecodingschool89064 жыл бұрын
Сделай лучше и поделись. Пока вижу у тебя нечем делиться. Ну можно же ведь просто комментироваться верно же ? Очередной комментатор я тебя даже банить не буду
@desys.3 жыл бұрын
Автор не умеет объяснять(((
@angularlessons25144 жыл бұрын
Чувак все плохо))) Данное видео не рекомендуеться для понимания солид)
@livecodingschool89064 жыл бұрын
что же с ним не так ? )
@vladislavstepanov75914 жыл бұрын
дк что не так?
@alekseyfrozis9374 жыл бұрын
@@vladislavstepanov7591 да с самим комментатором все не так) Аргументов нет, он просто "пукнул", обозначив свое влажное мнение, ни чем не подкрепив. Автору ролика спасибо за разъяснения, пригодится на ближайших моих собеседованиях )