Существуют ли рекомендации для принятия решения, когда класс должен находиться в своей сборке / DLL? Я часто вижу две школы мысли:
1) Каждая «группа» классов принадлежит своей собственной DLL, например, репозитории, сервисы, DTO, инфраструктура и т. Д.
2) Все должно быть в одной DLL, но разделено через пространства имен / папки, например, иметь «Core» DLL с дополнительными пространствами имен, например Core.Repositories, Core.Services, Core.DTO и т. Д.
На работе мы просто объединяем все в одну сборку под названием «Бизнес». Есть несколько папок, но нет реального разделения - бизнес-объекты (с логикой, некоторые из которых не должны быть даже классами) без заботы помещаются в папку «BusinessObjects». Вещи, используемые более чем в одном классе, находятся в папке «Core». Утилиты находятся в папке «Утилиты», инфраструктура доступа к данным - это папка «Данные».
Для нового модуля, над которым я работаю, я хочу / должен иметь отдельный слой доступа к данным (представьте, как элементарную реализацию репозитория), но я не хочу просто бросать его в папку «BusinessObjects» с другими 160 (!) занятия там. В то же время я обеспокоен созданием новой библиотеки классов, поскольку каждый привык вставлять класс в одну библиотеку; однако папка / пространство имен может работать.
источник
«Дядя Боб» Мартин из Clean Code, известность SOLID Principles, изложил здесь три принципа :
Общее эмпирическое правило заключается в том, что количество проектов в вашем решении должно быть как можно меньше. Разделяйте их только в том случае, если это необходимо для реализации одного или нескольких конкретных пользовательских журналов, или если наличие одной сборки вызывает ощутимые проблемы с производительностью (обычно, когда они достигают размера в несколько мегабайт).
источник
Некоторые другие руководящие принципы, с которыми я работаю:
Как вы думаете, вы будете повторно использовать этот код в других проектах? Для одной группы связанных веб-приложений у нас был один модуль, связанный с учетными записями пользователей, который использовался во всех приложениях, поскольку все они использовали одну и ту же модель для учетных записей пользователей и входа в систему. Я делал подобные вещи с библиотеками геометрии и математики и повторно использовал их в нескольких приложениях, просто включив DLL.
Вы хотите иметь возможность изменять / развертывать этот код без повторного развертывания / перекомпиляции всего проекта? Иногда было полезно просто перестроить модуль, развернуть и перезапустить веб-приложение.
Похоже, что в вашем случае базовый и универсальный репозиторий может быть снова полезен в будущем, возможно, стоит разделить его на новую DLL, если вы можете.
источник