TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2427 2.43K
День 2004. #УрокиРазработки
Уроки 50 Лет Разработки ПО

Проектирование. Окончание

Начало

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

Соблюдение принципов, изложенных ниже, способствует уменьшению сложности проектного решения, повышению его надёжности и упрощению понимания, изменения, расширения и повторного использования.

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

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

3. Слабая связанность
Хорошо продуманный модульный проект демонстрирует слабую связанность между компонентами, поэтому изменение одного модуля требует минимальных изменений других.

4. Сильная связность
Модуль, для которого характерна сильная связность, идеально выполняет одну чётко определённую задачу.

5. Абстракция
Позволяет разработчикам писать код, не зависящий от конкретных деталей реализации, таких как тип ОС или UI. Абстракция упрощает переносимость и повторное использование.

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

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

Первые шаги
1. Перечислите приёмы проектирования, в которых особенно преуспела ваша организация. Задокументирована ли информация об этих приёмах? Доступна ли она другим членам команды, чтобы они могли ознакомиться с ними и применять на практике?
2. Определите любые проблемы, отмечавшиеся в команде и связанные с архитектурным, техническим проектированием, проектированием БД и UX.
3. Опишите, как каждая проблема влияет на вашу способность успешно завершать проекты. Как они мешают достижению успеха разработчикам и клиентам? Огрехи в проектном решении могут привести к снижению надёжности системы, что нелегко исправить, низкой производительности, дублированию кода, несоответствиям внутри продукта или между связанными продуктами и к проблемам с удобством использования.
4. Для каждой проблемы, определите основные причины, провоцирующие или усугубляющие её. Вы можете найти несколько основных причин, способствующих появлению одной и той же проблемы, или несколько проблем, обусловленных одной общей причиной.
5. Изучая лучшие практики проектирования, отмечайте, как они могут быть полезны вашей команде.

Источник: Карл Вигерс “Жемчужины Разработки”. СПб.: Питер, 2024. Глава 3.
  • 👍 8
More from @netdeveloperdiary
  1. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  2. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  3. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  4. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  5. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  6. Oct 3, 2026Post #3360
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →