Задать вопрос

Как правильно и удобнее всего разрабатывать модульное ПО?

Разрабатываю один решение, состоящее из 25 связанных между собой проектов. Проекты — несколько .exe и 95% библиотек. Все это взаимосвязано и более-менее разнесено по слоям. Решение по мере развития находилось в одном репозитории с двумя origin ветками main, dev и иногда несколькими локальными. Сейчас перестраиваю решение и из 25 проектов будет ~35 и ~30к строк кода суммарно. Все это изначально раскладывал по папочкам насколько это возможно, но уже ощущаю неудобства при работе с таким количеством проектов.

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

Я погуглил решения данных проблем и нашел 3:
1) Nuget Насколько я понял это самый лучший вариант для .net. Добавил локальный сервер, опубликовал пакет и вручную его скопировал в папку, поменял версию. Да, круто, что в решении не 30 проектов, но каждый раз публиковать, менять версию? Через тот же GitHub видел настраивают CI/CD, но я же могу с 10-го раза исправить что-то и мне теперь 10 раз пушить изменения? А как дебажить такой пакет?

2) SubModule. Очень понравилась эта идея, но насколько понял в ней есть главный недостаток — лавинообразное обновление версий подмодуля, если один зависит от другого, а тот еще от другого. И я не понял, можно ли репозиторий до локальной версии подмодуля, который изначально был добавлен через удаленную.

3) SubTree. Здесь столкнулся с проблемой, что внутри одного subtree был другой. Может я что-то сделал не так. Подробнее написал на SO: https://ru.stackoverflow.com/questions/1543339/%d0...

Структура проекта

Скриншот двухнедельной давности. Решение — клиент-серверное приложение (signalr) и очередная попытка создания луковичной архитектуры, но слои все же протекают. У клиента и у админа есть 4 главных блока (OS, Drive, Network, Hardware)
1) Apps — .exe файлы
2) Core.
Core.Domain — сущности клиента (ef).
Core.Application — базовые модули, совсем базовые сервисы (не связанные с UI) для админа и клиента.
Core.ServerApplication (не самое лучшее название, наверное) — общие модели между сервером и админом.
3) Infrastructure.
Infrastructure.Common — базовые сервисы, стили, хелперы, сервисы, но уже на уровне WPF. Использует и клиент и админ.
Infrastructure.Admin/Client — базовые вещи как в Common, но для модулей(далее) админа/клиента.
Infrastructure.Hardware/Network/OS — вынесение общих view, конвертеров между клиентом и админом.
4) Modules - Prism модули
Modules.Admin/Client — главные окна, инициализация приложения зависит от Modules.Admin(Client).Common.
Modules.OS/Drive/Network/Hardware — сервисы, view специфичные для админа/клиента

Проекты Admin/Client максимально пустые и состоят из нескольких файлов. Они добавляют все prism-модули и отдают инициализацию в Modules.Admin или Modules.Client.
K4jcBjR.png


P.S.
Сейчас решение большое и есть небольшой дискомфорт, но я могу перемещаться между проектами и изменять их.
  • Вопрос задан
  • 465 просмотров
Подписаться 4 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • ProductStar
    Python + Flask + Git: веб-разработка с нуля
    2 месяца
    Далее
  • Учебный центр IBS
    DEV-007 Введение в систему контроля версий Git
    1 неделя
    Далее
  • Stepik
    Git (система контроля версий)
    1 неделя
    Далее
Решения вопроса 1
25 проектов в решении - это вполне нормальное количество и ничего особенного с этим делать не нужно. (Видел решения, где их под сотню).
Хотя не исключаю вариант, что на самом деле такое разделение излишнее.

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

Лучше попробуй конкретизировать, как именно проявляется неудобство - тогда и будет вариант решения.
Подумай, почему у тебя вообще столько проектов?
Можно ли их объединить? Если нельзя, то почему ты так думаешь?

PS: из текстового описания вообще не понятно, что такое "слои" и почему между ними нужно как-то перемещаться. Попробуй добавить в вопрос пример иерархии папок из твоего репозитория.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
Made In Dream Санкт-Петербург
от 100 000 до 220 000 ₽
от 250 000 до 320 000 ₽