Призма модульности практики
Я изучаю Prism и мне нужно создать небольшое демо-приложение. У меня есть несколько вопросов дизайна. Различия в отношениях могут быть небольшими, но позже мне нужно применить эти методы к крупномасштабному проекту, поэтому я стараюсь думать о будущем.
Предполагая классический сценарий, связанный с БД - мне нужно получить список сотрудников, и двойной щелчок по элементу списка позволяет получить дополнительную информацию для этого сотрудника: если проект доступа к данным является модулем или проект, доступ к которому осуществляется через шаблон репозитория, является лучшим решением? Как насчет крупномасштабного проекта, когда БД представляет собой более одной таблицы и предоставляет, скажем, информацию о сотрудниках, продажах, компаниях и т. Д.?
В настоящее время я рассматриваю возможность использования
DataAccess
модуль как отдельный модуль, и определил его интерфейс в проекте инфраструктуры, а также тип его возврата (EmployeeInformation
). Это означает, что оба моиDataAccess
модуль и мое приложение должны ссылаться наInfrastructure
проект. Это хороший путь?- Я обращаюсь к сказанному
DataAccess
модуль с использованиемServiceLocator
(MEF
) из моего приложения. ЕслиServiceLocator
быть доступным частям приложения, или оно предназначено для использования только в разделе инициализации?
Благодарю.
1 ответ
- Модуль необходим и имеет смысл, когда он содержит часть приложения, которая может жить сама по себе. Это могут быть части приложения, которые нужны или разрешены для использования только нескольким людям, например, модуль управления пользователями имеет доступ только к администраторам. Но ваш уровень доступа к данным - это не та отдельная функциональность, которая обычно входит в модуль. Лучше поместить его в общую сборку, которую могут использовать реальные модули. Проблема здесь в том, что все модули зависят от этой сборки DAL, поэтому при разработке приложения имейте в виду задачу обновления DAL (нисходящая совместимость).
- Обычно нет проблем с типами, которые широко используются в общей сборке. Но это не сборка инфраструктуры. Инфраструктура, как следует из этого слова, предоставляет услуги для совместной работы модулей. Ваши общие типы должны входить во что-то вроде YourNamespace.Types или YourNamespace.Client.Base или...
- Эта тема во многих аргументах и до сих пор неясна (по крайней мере, с моей точки зрения). Purists of Dependency Injection говорят, что его следует использовать только во время инициализации. Прагматики используют ServiceLocator по всему своему приложению.