TL; DR : Вы должны выполнять оба, но не разбивайте свой проект на несколько сборок только ради этого.Разделив ваши сборки до повторно используемых компонентов , вы в конечном итоге будете использовать комбинацию обоих методов, где это уместно.
Во-первых, я бы сказал, что в зависимости от размера вашего проектаможет не потребоваться разделять наши концепции или слои на отдельные сборки - преимущества разделения кода на отдельные сборки имеют два аспекта:
- Позволяет другим сборкам / приложениям использовать ваш кодссылаясь на свою сборку
- Уменьшение размера больших сборок путем разбиения на множество более мелких сборок
Если у вас нет необходимости ни в одной из этих двух (и вы не захотите вбудущее), а затем упростите свою жизнь и просто объедините все в одну сборку.
Во-вторых, основная причина разделения кода на отдельные сборки - это повторное использование этого кода -например, если у вас есть часть логики обработки, используемая в приложении Windows Forms,выделение этого в отдельную сборку позволяет вам повторно использовать эту логику, например, в консоли или веб-приложении.По этой причине я обычно нахожу, что лучший способ - разделить понятия, например:
Company.Project.Concept.dll
Где «понятие» - это то, что вы хотите использовать повторно, будь то набор общих элементов управления Windowsили некоторая логика доступа к данным.
Обратите внимание, что при повторном использовании концепции довольно редко хочется повторно использовать все концептуальные уровни этой концепции (Domain / Presentation / WinForms).Обычно либо ваша концепция состоит только из 1 слоя (например, некоторая форма обработки), либо при повторном использовании этой концепции вас интересует только 1 или, возможно, 2 слоя.В этом случае, если ваши «Концептуальные» сборки также содержат другую дополнительную логику (например, WinForms), вы просто ссылаетесь на дополнительный код, который никогда не будет использоваться.По этой причине также нормально разделить на концептуальные слои, если они у вас есть, например:
Company.Project.Concept.Processing.dll
Company.Project.Concept.WinForms.dll
Т.е. в приведенном вами примере я выступаю за то, чтобы вы что-нибудь сделалихочу 9 сборок, а не 3:
MyProject.ConceptA.Domain.dll
MyProject.ConceptA.Presentation.dll
MyProject.ConceptA.WinForms.dll
Конечно, разбивать ваш проект на множество сборок совершенно бессмысленно, если только эти отдельные концепции не будут использоваться в другом месте, что возвращает меня к моей первой мысли - донне беспокойтесь о разделении сборок, если вам не нужно, или, иначе говоря, разделите ваши сборки на повторно используемые компоненты, которые имеют смысл :
- Если никто другойсобирается использовать элементы управления Windows Forms, а затем не разбивать их на отдельные сборки
- . Если большинство людей собираются использовать ConceptB и ConceptA вместе, объедините их в одну сборку
- Если большинство людей захотят использовать слои Domain и Presentation вместе, объедините их в одинСборка
В качестве рабочего примера я автоматически предпочитаю разбивать небольшие проекты на две сборки - само приложение, которое содержит все «презентации» (будь то Web, WinForms, WPF или консоль).app) и еще одна сборка, которая содержит «мясо» приложения - базовую функциональность, предоставляемую вашим приложением (например, обработка изображений, поиск данных и т. д.).Это помогает, если я когда-нибудь захочу представить одну и ту же функциональность в другом стиле приложения.
Еще раз, хотя я бы ошибался на стороне слишком небольшого количества сборок, а не слишком большого - легче разделить сборку на две части.чем объединить две сборки обратно в одну. Если вы не найдете веских причин разделить сборку / проект на несколько сборок, не беспокойтесь.