По моему мнению, есть два способа сделать это.
Опция A / lazy
Соберите все ваши повторно используемые классы в единую структуру.Эта инфраструктура будет включать / компилировать весь необходимый код поддержки (база данных, сеть и т. Д.), Чтобы выполнять свою работу.
Затем вы сможете использовать эту многократно используемую платформу для различных проектов вашего приложения.Не забудьте не только ссылаться на фреймворк, но и встраивать его в свое приложение.
Это самое простое в настройке, проектировании и обслуживании (для одного человека).Однако это также означает создание монолитной библиотеки, которая может быть слишком широкой и / или скрывать слишком много лежащих в основе технологий.
Опция B / энтузиаст
Создайте каждый из ваших повторно используемых компонентов в свои собственныефреймворк.Инфраструктуры высокого уровня будут связываться (но не встраивать) с низкоуровневыми инфраструктурами.
В ваших проектах приложений будут и ссылки, и встраивания всех необходимых платформ.
При запускеВремя, каждый фреймворк (должен) магическим образом загружается при необходимости.
Это намного больше работы, но имеет несколько преимуществ.У каждой крупной службы есть свой собственный I / F, поэтому ваше приложение может напрямую использовать компоненты, не прибегая к «сверлению» высокоуровневых структур, определяющих вашу пользовательскую службу.
Это также может означать, что у вас больше гибкости вкакой код вы включаете.Одно приложение может использовать службы регистрации клиентов, базу данных и соединение с сервером, в то время как второе приложение может просто использовать блокировку клиента и сервер.
Также может выполняться техническое обслуживание (особенно если за каждую службу отвечают разные инженеры).) и регрессионное тестирование проще.
Наконец, здесь нет правильных ответов, только компромиссы.