Согласовано: использовать пространства имен для логической организации, а не проектов.Один из подходов - думать о проектах как о единицах развертывания.Будет ли Project.Client всегда развертываться с Project.ViewModels?Project.Models?Один ссылается на другой?Просто включите в тот же проект и используйте пространства имен для организации.
Несколько причин, по которым вам может потребоваться разделить библиотеки / приложения классов Silverlight на отдельные проекты:
- Повторное использование.Вы хотите разработать API, которые будут использоваться для других приложений.Ваша Project.Infrastructure может попасть в эту категорию.
- Модульность.MajorFunctionA используется только конечным пользователем в 20% случаев.Возможно, только определенные аутентифицированные пользователи имеют доступ.Может быть, это только доступ при переходе на определенную страницу, на которую никто не заходит.Вы можете встроить отдельные приложения Silverlight и загружать файлы .xaps только при необходимости, используя такие среды, как MEF или PRISM.
- Рабочие процессы разработчика.Одна команда в одном городе / офисе работает над Project.Client, а другая команда в другом городе / офисе работает над Project.Models.Возможно, имеет смысл встроить отдельные проекты, чтобы упростить жизнь.
Еще одна вещь, которую следует отметить при сборке, это то, что между сборками не может быть циклических ссылок.Другими словами, если ClassA и ClassB находятся в одной сборке, ClassA может ссылаться на ClassB, а ClassB может ссылаться на ClassA.Но если они находятся в отдельных сборках, они не могут.Теперь, если у ваших классов много циклических ссылок, это, вероятно, не очень хорошая вещь, но иногда этого трудно избежать, и ваши варианты намного более ограничены, если они оказываются в отдельных сборках.Но, с другой стороны, увеличение количества сборок ограничивает возможность циклических ссылок, которые могут улучшить качество вашего дизайна.Просто еще кое-что, о чем следует знать.
Следуя этой логике, одной из альтернатив будет группировка Project.Client, Project.Data, Project.Model, Project.UIControls и Project.ViewModels в одном проекте и группировка Project.Общее и Project.Infrastructure в другое.Основные функции могут быть оставлены отдельно или сгруппированы в Project.Client.В итоге вы получите:
- Project.Client - интерфейс для конкретного приложения, просмотр моделей и моделей.
- Project.Infrastructure - общие, многократно используемые помощники, конвертеры и интерфейсы.
- Project.UnitTests
- Project.Web
- Project.Web.Infrastructure
Также.Там нет действительно правильный ответ для этого.Я отмечаю как Сообщество Wiki.