Использование статических методов в качестве метода ввода не представляет особой проблемы. Это действительно зависит от того, есть ли у вас области работы, где вам нужно хранить состояние, так как статические определения могут не позволить вам хранить или отделять информацию о состоянии. К счастью, возврат от использования статических объявлений к декларациям членов обычно менее болезнен, чем обратный. Вы можете даже не столкнуться с этим как с проблемой, если элементы, возвращаемые такими методами, несут полную ответственность за состояние.
Отдельные библиотеки / проекты полезны для разбиения единиц работы. Нет строгих требований о том, что все должно быть разделено на разные библиотеки, хотя вы можете увидеть причуды со статическими переменными-членами, особенно в многопоточных приложениях, как упомянул Дэйв Сверски.
Наличие отдельных библиотек также дает следующие преимущества:
- Лучшее разделение изменений во время разработки, поскольку границы проекта обычно совпадают с границами контроля исходного кода, что позволяет большему количеству людей работать одновременно по всей поверхности вашей платформы.
- Отдельные детали, которые могут обновляться независимо в производстве, при условии совместимости компоновки и интерфейсов.
- Лучшая организация того, какие виды поведения, функции и роли пересекаются для данного сегмента на каждом уровне, будь то BLL или DAL. Некоторые разработчики предпочитают строго изолировать компоненты на основе того, что пользователям разрешено работать с элементами, предоставленными в данном BLL.
Однако некоторые партии обнаружили, что большие монолитные библиотеки работают лучше для них. Вот некоторые преимущества, которые важны в этом сценарии.
- Более быстрое время компиляции для проектов, в которых старые компоненты и зависимости редко изменяются (особенно важно для разработчиков C / C ++!). Все исходные файлы, которые не изменяются, могут подсказывать компилятору и избегать перекомпиляции целых проектов.
- Обновления и управление одним файлом (или с небольшим количеством файлов) для проектов, в которых важно минимизировать количество объектов, присутствующих в данном месте. Это очень желательно для людей, которые предоставляют библиотеки для потребления другими сторонами, так как они менее восприимчивы к тому, что отдельные элементы публикуются или обновляются не по порядку.
- Автоматическая компоновка пространства имен в проектах Visual Studio .NET, где использование подпапок автоматически подразумевает начальное пространство имен, которое будет присутствовать при добавлении нового кода. Не очень хороший перк, но некоторые люди находят это полезным.
- Разделение групп BLL и DAL по абстракции базы данных или сервера. Это несколько средний уровень, но как уровень организации люди считают этот уровень более удобным для долгосрочного развития. Это позволяет людям идентифицировать вещи по месту их хранения или получения. Но в качестве компромисса отдельные проекты могут быть более сложными, хотя и управляемыми через # 3.
Наконец, я заметил одну вещь: похоже, вы реализовали вложенные статические классы. Если другие люди, использующие вашу работу, находятся в среде с недоступными intellisense или другими ярлыками, они могут посчитать эту настройку очень сложной для использования. Вы можете рассмотреть возможность развертывания некоторых уровней вложенности в отдельные (или вложенные) пространства имен. Это также полезно для уменьшения количества печатания, необходимого для объявления объектов интереса, поскольку объявления пространства имен должны присутствовать только один раз, когда статические вложенные элементы должны присутствовать каждый раз. Вашим коллегам это понравится.