Solid. Single Responsibility Principle
Принцип единственной ответственности.
Класс должен быть ответственен лишь за что-то одно. Если класс отвечает за решение нескольких задач, его подсистемы, реализующие решение этих задач, оказываются связанными друг с другом. Изменения в одной такой подсистеме ведут к изменениям в другой.
Правильное применение принципа единственной ответственности приводит к высокой степени связности элементов внутри модуля, то есть к тому, что задачи, решаемые внутри него, хорошо соответствуют его главной цели.
#codeprinciples #solid
Принцип единственной ответственности.
Класс должен быть ответственен лишь за что-то одно. Если класс отвечает за решение нескольких задач, его подсистемы, реализующие решение этих задач, оказываются связанными друг с другом. Изменения в одной такой подсистеме ведут к изменениям в другой.
Правильное применение принципа единственной ответственности приводит к высокой степени связности элементов внутри модуля, то есть к тому, что задачи, решаемые внутри него, хорошо соответствуют его главной цели.
#codeprinciples #solid
Все хотят иметь дело только с понятным чистым кодом.
Но не все могут его создавать.
Версия для C#, проверь себя!
Clean Code Game
#cleancode #apps
Но не все могут его создавать.
Версия для C#, проверь себя!
Clean Code Game
#cleancode #apps
Open-Closed Principle
Принцип открытости-закрытости
Программные сущности (классы, модули, функции) должны быть открыты для расширения, но не для модификации. Рассмотрим простой пример ниже.
При добавлении нового Animal придётся дополнять код функции AnimalSound. Если подобная архитектура используется в реальном проекте, функцию придётся постоянно расширять, добавляя в неё новые выражения if.
Решение: У каждого класса, описывающего животного, будет собственный метод MakeSound и, к примеру, при переборе массива с животными достаточно будет вызвать метод MakeSound для каждого элемента массива.
#cleancode #solid
Принцип открытости-закрытости
Программные сущности (классы, модули, функции) должны быть открыты для расширения, но не для модификации. Рассмотрим простой пример ниже.
При добавлении нового Animal придётся дополнять код функции AnimalSound. Если подобная архитектура используется в реальном проекте, функцию придётся постоянно расширять, добавляя в неё новые выражения if.
Решение: У каждого класса, описывающего животного, будет собственный метод MakeSound и, к примеру, при переборе массива с животными достаточно будет вызвать метод MakeSound для каждого элемента массива.
#cleancode #solid
Favor functional programming over imperative programming
Отдавайте предпочтение функциональному программированию над императивным.
Функциональные языки программирования могут быть чище и проще для тестирования. Используйте этот стиль, когда сможете. Однако нужно быть предельно осторожным и хорошо понимать, что делает функция и как именно она выполняется, иначе это может привести к накладным расходам.
#functions
Отдавайте предпочтение функциональному программированию над императивным.
Функциональные языки программирования могут быть чище и проще для тестирования. Используйте этот стиль, когда сможете. Однако нужно быть предельно осторожным и хорошо понимать, что делает функция и как именно она выполняется, иначе это может привести к накладным расходам.
#functions
Don't ignore caught errors
Не игнорируйте обнаруженные ошибки.
Ничего не делать с обнаруженной ошибкой не дает вам возможности исправить или отреагировать на указанную ошибку. Вывод ошибки на консоль (console.log) не намного лучше, так как часто он может потеряться в море других вещей, напечатанных на консоли. Если вы добавляете какой-либо фрагмент кода в try / catch, это означает, что вы думаете, что там может произойти ошибка, и поэтому вам нужно правильно на нее отреагировать.
#errors
Не игнорируйте обнаруженные ошибки.
Ничего не делать с обнаруженной ошибкой не дает вам возможности исправить или отреагировать на указанную ошибку. Вывод ошибки на консоль (console.log) не намного лучше, так как часто он может потеряться в море других вещей, напечатанных на консоли. Если вы добавляете какой-либо фрагмент кода в try / catch, это означает, что вы думаете, что там может произойти ошибка, и поэтому вам нужно правильно на нее отреагировать.
#errors
Readme Driven Development
RDD — это крайне простая практика.
Пишите Readme в первую очередь, вот в принципе и все. A какие приемущества это вам даст читайте в статье.
#architecture
RDD — это крайне простая практика.
Пишите Readme в первую очередь, вот в принципе и все. A какие приемущества это вам даст читайте в статье.
#architecture
Medium
Readme Driven Development
RDD — это крайне простая практика. И здесь «DD» может означать «минута на освоение и вся жизнь для мастерства». Но, к счастью, не в этом…
Quality your working
WakaTime - сервис, который считает Ваше рабочее время. Большой плюс данного сервиса в том что он сам включается когда Вы начинаете писать код, и сам видит когда Вы ушли.
Он умеет логировать самую разную информацию, от количества рабочих часов над проектом, до составления графика об использовании языков программирования.
#work #quality #apps
WakaTime - сервис, который считает Ваше рабочее время. Большой плюс данного сервиса в том что он сам включается когда Вы начинаете писать код, и сам видит когда Вы ушли.
Он умеет логировать самую разную информацию, от количества рабочих часов над проектом, до составления графика об использовании языков программирования.
#work #quality #apps
Liskov Substitution Principle
Принцип подстановки Барбары Лисков.
Цель этого принципа заключаются в том, чтобы классы-наследники могли бы использоваться вместо родительских классов, от которых они образованы, не нарушая работу программы. Если оказывается, что в коде проверяется тип класса, значит принцип подстановки нарушается и вам следует пересмотреть свое решение.
#solid
Принцип подстановки Барбары Лисков.
Цель этого принципа заключаются в том, чтобы классы-наследники могли бы использоваться вместо родительских классов, от которых они образованы, не нарушая работу программы. Если оказывается, что в коде проверяется тип класса, значит принцип подстановки нарушается и вам следует пересмотреть свое решение.
#solid
Group the blocks by meaning
Группируйте блоки по смыслу. Используйте психологический эффект восприятия — «Эффект близости»: близко расположенные фигуры при восприятии объединяются. Получить код, подготовленный для анализа и обобщения можно, расположив рядом строки, объединенные смыслом или близкие по функционалу, разделив их пустой строкой.
#formatting
Группируйте блоки по смыслу. Используйте психологический эффект восприятия — «Эффект близости»: близко расположенные фигуры при восприятии объединяются. Получить код, подготовленный для анализа и обобщения можно, расположив рядом строки, объединенные смыслом или близкие по функционалу, разделив их пустой строкой.
#formatting
Function arguments
Аргументы функции.
Ограничение количества параметров функции невероятно важно, поскольку оно упрощает тестирование функции. Наличие более чем трёх аргументов приводит к комбинаторному взрыву, когда вам приходится перебирать массу различных случаев с каждым отдельным аргументом.
Идеальная ситуация — отсутствие аргументов. Один или два аргумента — хорошо, а трех уже следует избегать.
#functions
Аргументы функции.
Ограничение количества параметров функции невероятно важно, поскольку оно упрощает тестирование функции. Наличие более чем трёх аргументов приводит к комбинаторному взрыву, когда вам приходится перебирать массу различных случаев с каждым отдельным аргументом.
Идеальная ситуация — отсутствие аргументов. Один или два аргумента — хорошо, а трех уже следует избегать.
#functions
Dublication
Дублирование.
Каждый раз, когда в программе встречается повторяющийся код, он указывает на упущенную возможность для абстракции. Возможно, дубликат мог бы стать функцикй или даже отдельным классом. "Сворачивая" дублирование в подобные абстракции, вы расширяете лексикон языка программирования. Другие программисты могут воспользоваться созданными вами абстрактными концепциями. Повышение уровня абстракции ускоряет программирование и снижает вероятность ошибок.
#tips
Дублирование.
Каждый раз, когда в программе встречается повторяющийся код, он указывает на упущенную возможность для абстракции. Возможно, дубликат мог бы стать функцикй или даже отдельным классом. "Сворачивая" дублирование в подобные абстракции, вы расширяете лексикон языка программирования. Другие программисты могут воспользоваться созданными вами абстрактными концепциями. Повышение уровня абстракции ускоряет программирование и снижает вероятность ошибок.
#tips
Ad Hominem
Переход на личности.
Инспектируйте программу, а не программиста. Замечания о его личности лишь усложняют восприятие им критики.
Если вы пишите негативные комментарии, пишите «патч» или «код» вместо «ты». Например, вместо "У тебя глюк в get_message" пишите "После применения этого патча в get_message появился глюк"
#cleancode
Переход на личности.
Инспектируйте программу, а не программиста. Замечания о его личности лишь усложняют восприятие им критики.
Если вы пишите негативные комментарии, пишите «патч» или «код» вместо «ты». Например, вместо "У тебя глюк в get_message" пишите "После применения этого патча в get_message появился глюк"
#cleancode
Dependency Inversion Principle
Суть принципа инверсии зависимостей проста: заменить композицию агрегацией. Вместо создания зависимостей напрямую, класс должен требовать их у более высокого уровня через аргументы метода или конструктора. При этом зависимость должна передаваться не в виде экземпляров конкретных классов, а в виде интерфейсов или абстрактных классов.
Подробнее вы можете прочитать в статье.
S O L I D
#solid
Суть принципа инверсии зависимостей проста: заменить композицию агрегацией. Вместо создания зависимостей напрямую, класс должен требовать их у более высокого уровня через аргументы метода или конструктора. При этом зависимость должна передаваться не в виде экземпляров конкретных классов, а в виде интерфейсов или абстрактных классов.
Подробнее вы можете прочитать в статье.
S O L I D
#solid
Medium
Dependency Inversion Principle
Принцип инверсии зависимостей
Compact Functions
Компактные функции.
Есть всего два привила. Первое: функции должны быть компатными. Второе: функции должны быть еще компактнее.
Лучше 10 функций по 20 строк, чем один монстр на 200 строк. Чем компактнее вы будете писать свои функции, тем более примитивными и очевидными они будут казаться для читающего.
#functions
Компактные функции.
Есть всего два привила. Первое: функции должны быть компатными. Второе: функции должны быть еще компактнее.
Лучше 10 функций по 20 строк, чем один монстр на 200 строк. Чем компактнее вы будете писать свои функции, тем более примитивными и очевидными они будут казаться для читающего.
#functions
Mvvm Design Pattern
Mvvm был представлен Джоном Госсманом в 2005 году как модификация шаблона Presentation Model и был первоначально нацелен на разработку приложений в WPF. И хотя сейчас паттерн вышел за пределы WPF и применяется в самых различных технологиях, в том числе при разработке под Android, iOS, тем не менее WPF, UWP и Xamarin являются довольно показательными технологиями, которые в полной мере раскрывают возможности данного паттерна.
#designpatterns
Mvvm был представлен Джоном Госсманом в 2005 году как модификация шаблона Presentation Model и был первоначально нацелен на разработку приложений в WPF. И хотя сейчас паттерн вышел за пределы WPF и применяется в самых различных технологиях, в том числе при разработке под Android, iOS, тем не менее WPF, UWP и Xamarin являются довольно показательными технологиями, которые в полной мере раскрывают возможности данного паттерна.
#designpatterns
Medium
MVVM
Model-View-ViewModel Architecture for your projects