Где следует размещать общие интерфейсы в Prism? - PullRequest
2 голосов
/ 20 января 2012

Я понимаю, что это может быть истолковано как вопрос мнения, но это техническая проблема и проблема, которую я сейчас пытаюсь решить.

В документации Prism указано, что модули должны иметь слабую связь безпрямые ссылки, только через общие интерфейсы.Как показано на следующем рисунке:

Module dependencies

Моя проблема в том, что если для нескольких модулей требуется IOrdersRepository, то инфраструктура является неподходящим местом для нее, поскольку она содержит общий коддля всех модулей.Если я поместил интерфейс в другой модуль, то оба модуля должны будут напрямую ссылаться на него, нарушая слабую связь.

Должен ли я просто создать библиотеку, которая содержит этот интерфейс и не следует шаблону модуля?

Спасибо, Люк

1 Ответ

5 голосов
/ 20 января 2012

Должно быть определенно Infrastructure модуль. Аргумент Маркуса абсолютно верен - вам не следует создавать отдельную сборку для каждого общего набора интерфейсов. Гораздо лучше иметь модуль Infrastructure с большим количеством интерфейсов вместо множества модулей с несколькими интерфейсами в каждом. Представьте, что однажды вы обнаружите, что 2 из вашего «набора интерфейсов» должны использовать какой-то общий интерфейс! Что вы будете делать? Добавить еще одну сборку для этих "супер-общих" интерфейсов? Или объединить эти модули в один? Это неправильно, я думаю.

Итак - определенно Infrastructure модуль!

PS. Представьте, что в .NET Framework есть библиотеки 1000-х - одна для коллекций, другая для математических функций и т. Д. *

UPDATE:

На самом деле, я использую модуль Infrastructure в основном для интерфейсов и базовых DTO. Весь общий код, который я перемещаю в другую сборку (например, YourApplication.UIControls, YourApplication.DAL и т. Д.). У меня недостаточно причин, чтобы делать именно так, но это мой способ понять рекомендации Prism. Просто ИМХО.

ОБНОВЛЕНИЕ 2:

Если вы хотите поделиться своим сервисом настолько широко - я думаю, что имеет смысл иметь такую ​​структуру, как:

  • YourApplication.Infrastructure - «очень общие» интерфейсы (например, IPaymentService)
  • YourApplication.Modules.PaymentModule - «очень общая» реализация вашего PaymentService
  • YourApplication.WPF.Infrastucture - инфраструктура вашего приложения WPF (в дополнение к YourApplication.Infrastructure
  • YourApplication.WPF.Modules.PaymentUI - некоторый пользовательский интерфейс WPF для вашего YourApplication.Modules.PaymentModule
  • YourApplication.WebSite.Modules.PaymentUI - интерфейс для веб-сайта

И так далее. Итак, ваши модули почти всегда будут иметь ссылки на YourApplication.Infrastructure и YourApplication.TYPEOFAPP.Infrastructure, где TYPEOFAPP может быть WPF, WebSite, WinService и т. Д. Или вы можете назвать его как YourApplication.Modules.PaymentUI.WPF. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...