Ваша задача

Продолжаем карнавал веселья и кода. Мы сделали работающую версию автомата. Но так ли она хороша? Я сейчас говорю не про техническую реализацию, а про стилистику кода и удобства работы с ним. Сейчас автомат представлен как монолитный блок кода, который наполнен дублированием, смешиванием ответственностей и неясностью происходящего.

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

Ваша задача формируется очень просто, но слишком размыто.

Вам нужно:

  1. Избавиться от дублирующегося кода;
  2. Сделать программу понятней;
  3. Сокрыть структуру данных и тонкости работы с ней;

Давайте разберёмся с каждым из пунктов по отдельности.

Избавиться от дублирующегося кода

Когда у вас есть два идентичных участка кода вам необходимо их ликвидировать. Как я писал выше, достаточно всего одного дублирования для решительных действий. В нашем коде полно таких моментов которые впоследствии испортят нам настроение и самое главное замедлят разработку.

В программу мы очень часто вносим изменения и наш код образует определённую логику. Каждый раз, когда эта логика меняется под влиянием изменений бизнес-процессов, нам приходится изменять N участков кода. В случае с небольшими блоками и при маленьких N – это сделать не так уж сложно.

Но основная проблема заключается в том, что можно забыть изменить тот или иной участок. Логика без строго выраженной формы размывается по кодовой базе и можно забыть о её наличие в том или ином участке.

Итак, дублирование плохо потому, что:

  1. Сложней вносить изменения в программу ;
  2. Безосновательно увеличивает кодовую базу ;
  3. Дубли могут вносить новые аспекты в выполнение, которые будут скрыты от понимания из-за совпадения большей части кода (вспомнить детские ребусы – найди 10 отличий).

Что считается дубликатом? Код можно назвать дублирующимся по нескольким причинам. Так, например, в простейшем смысле, код дублируется, если происходит посимвольное совпадение. Но это не единственный случай. Код может дублироваться алгоритмически, при этом операции могут происходить над разными данными и с разными константами. Такое находить по началу сложней, и наша задача к этому привыкнуть.

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

Сделать программу понятней

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

Каждый раз, когда вы используете какую-нибудь библиотеку или даже базовые возможности языка C#, который в большей степени обеспечивается BCL (Base Class Library), задумайтесь о том, что это тоже некоторая кодовая база, с которой вы работаете и программисты, которые её разрабатывали, учитывали то, что вы будете работать с этим. И чем лучше они это делали, тем проще и комфортней работать вам.

При разработке своего кода учитывайте, что вы, скорей всего, забудете о том, как он работает и вам придётся разбираться с ним снова. И очень хорошо было бы упростить жизнь будущему себе. Я также надеюсь, что вы в ближайшее время начнете работать в команде и на основе вашего кода будут разрабатывать свои решения ваши коллеги. Вам повезет, если это будут мудрые, живущие в гармонии с собой и миром люди, транслирующие в мир любовь.

И не повезёт, если это будут психопаты, знающие, где вы живёте.

Есть один метод, который позволяет ответить на вопрос: “Стал ли мой код понятней?”, он заключается в задаче вопросов себе или другим людям, плохо знакомым с кодом, но знакомым со спецификой вашей программы.

Можно задавать такие вопросы:

  1. Сколько времени прошло от момента перевода взгляда на код, до момента когда была найдена нужная точка?
  2. Читается ли код также хорошо, как книга писателя прозы средней руки?
  3. Можно ли читать код не мотая головой вверх и вниз? Понятен ли он вне контекста или на сколько этот контекст важен?

Сокрыть структуру данных и тонкости работы с ней

Вы должны были заметить, что у нас есть некая сущность товара, которая описывает его стоимость, название и доступный остаток. Она представляется тремя массивами, которые не объединены друг с другом. А это значит, что при работе с товарами мы можем добавить название товара, но забыть добавить ему количество, что приведет к различным ошибкам. Более детально мы это проработаем дальше, сейчас же хотелось спрятать эти массивы и дать более очевидные методы работы с базой товаров.


Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *