Лучшие практические ресурсы WPF Prism

У меня есть настольное приложение WPF prism с несколькими модулями. В прошлом я помещал все свои локализованные ресурсы в общие файлы ресурсов в сборке инфраструктуры и ссылался на них во всех модулях.

Но в последнее время мне стало интересно, действительно ли это правильный подход с точки зрения обслуживания. По сути, это также нарушает модульность. Будет ли в долгосрочной перспективе лучшим подходом наличие файлов ресурсов, специфичных для модулей, в самих модулях?

Все мысли оценены.


person NVM    schedule 05.10.2010    source источник
comment
@NVM: Какой конкретный тип ресурсов вас интересует для локализации? Язык текста или макеты тоже?   -  person Gone Coding    schedule 05.10.2010
comment
@Магия высоких технологий. В первую очередь меня беспокоит языковой текст, но то же самое относится к изображениям/значкам и т. д.   -  person NVM    schedule 05.10.2010
comment
Я не понимаю, что вы имеете в виду под макетами. Я не даю никаких фиксированных размеров для каких-либо элементов управления, т.е. они всегда находятся в режиме Auto, а WPF заботится о макетах, а также о макетах слева направо/справа налево и т. д.   -  person NVM    schedule 05.10.2010
comment
@NVM: языковой текст всегда лучше всего управляется и предоставляется через центральную службу, обычно управляемую серверной базой данных/файлами данных, а не строками ресурсов. Большинство опубликованных решений привязки текста для Silverlight слишком громоздки для своих целей. Теперь мы связываемся с помощью ключей в прикрепленных свойствах. Однако другие активы нуждаются в традиционном подходе к именованным файлам ресурсов MS, и определенно предпочтительнее на модуль.   -  person Gone Coding    schedule 05.10.2010
comment
Текст @HiTech Magic Language всегда лучше всего управляется и предоставляется через центральную службу. Почему?   -  person NVM    schedule 05.10.2010
comment
@NVM: набор строк может быть создан для нескольких файлов, но локализация выполняется как полный набор для каждого языка. Доставка обратно в приложение упрощается, если вы рассматриваете каждый язык (все строки во всем приложении) как единую единицу данных подключаемого модуля. Это основано исключительно на практическом опыте локализации десятков бизнес-приложений (и компьютерных игр).   -  person Gone Coding    schedule 05.10.2010
comment
Большое спасибо. То, что вы говорите, имеет смысл, и я хотел бы дать вам очки!   -  person NVM    schedule 05.10.2010
comment
@NVM: Просто здесь, чтобы помогать и учиться. Балльная система хороша, но ненастоящая :)   -  person Gone Coding    schedule 05.10.2010
comment
Я думаю, что баллы важны на таком веб-сайте QA, как этот. Хотя всегда есть исключения, когда кто-то, скажем, со 100 тысячами баллов дает ответ, можно с уверенностью предположить, что он действительно знает, что говорит. Очевидно, что очки обычно не являются реальной мотивацией людей, помогающих другим здесь.   -  person NVM    schedule 07.10.2010
comment
@NVM, ты нашел решение этой проблемы с локализацией? Я полностью согласен с вами в вопросе о модульности и попытках добиться того же, но пока безуспешно.   -  person    schedule 13.01.2011
comment
Ну да. Теперь у меня есть ресурсы в отдельных сборках. Все осталось по-прежнему, но теперь каждая сборка использует свои ресурсы. Это не было проблемой для начала. Я просто хотел узнать, какой правильный подход. Реализация на верхнем уровне в любом случае остается неизменной.   -  person NVM    schedule 19.01.2011


Ответы (2)


Поскольку одной из основных целей Prism является модульность, кажется очевидным вкладывать свои ресурсы только в соответствующую сборку. Совместное использование ресурсов через одну централизованную сборку является противоположностью модульности. Делая это централизованно, вы получите еще один тип ада DLL в то время, когда вы захотите добавить больше (необязательных) модулей. Придется обновлять общую сборку без знания модулей, использующих сборку. И определение того, какой модуль присутствует, просто снова нарушает саму модульность. Другой способ — всегда обновлять общую сборку до последней версии. Что бы вы ни делали, следование централизованному подходу заставляет вас создавать обратно совместимые все ваши модули.

Это моя точка зрения на данный момент. Но поскольку я работаю с Prism всего несколько недель, я не совсем уверен, правильно ли мое утверждение, как это должно быть сделано.

person PVitt    schedule 05.10.2010
comment
Спасибо ПВитт. Это ответ на мой вопрос!! Ваше здоровье - person NVM; 05.10.2010

У меня никогда не было ссылок между отдельными модулями при использовании Prism (если только один модуль не является расширением другого). Я стараюсь помещать общие ресурсы, интерфейсы и т. д. в «общую» сборку, на которую ссылаются все модули и сборка, содержащая оболочку. Вещи, которые реализуют интерфейс, затем извлекаются через IoC-контейнер, и реализация помещается в модуль, которому она «принадлежит».

Как вы пишете - наличие их в модуле инфраструктуры ломает одну из идей Prism.

person Goblin    schedule 05.10.2010
comment
Ну у вас они тоже есть в модуле инфраструктуры просто вы его не так называете. Что еще представляет собой ваша сборка, которая содержит ваши ресурсы, кроме сборки инфраструктуры. - person PVitt; 05.10.2010
comment
@Goblin, как говорит PVitt, у тебя такие же настройки, как у меня. Ваша общая сборка — это моя сборка инфраструктуры. - person NVM; 05.10.2010
comment
Нет, моя инфраструктура сама по себе является модулем. «Общая» сборка отделена от нее. - person Goblin; 05.10.2010
comment
Просто чтобы уточнить - для меня инфраструктура - это то, где/как я могу получать/отправлять данные в приложение и из него. Такие ресурсы, как локализуемые строки, значки, стили в словарях ресурсов, не являются частью инфраструктуры. - person Goblin; 05.10.2010
comment
Что ж, тогда каждый из ваших модулей зависит от двух других dll в вашем проекте (опустим технические термины) вместо той, что есть у меня. Я думаю, что по сути это нарушает модульность еще больше, чем в моем случае. - person NVM; 06.10.2010
comment
Да, вы правы - мои модули (что бы они ни содержали) зависят от сборки с бизнес-правилами и сборки с общей функциональностью (базовые классы, интерфейсы, ресурсы и т. д.). У вас может быть лучшая инкапсуляция - у меня может быть больше возможностей поддерживать Не повторяйтесь (СУХОЙ) — это вопрос компромиссов. - person Goblin; 07.10.2010
comment
Просто ради обсуждения, если я правильно понимаю, то, как вы настраиваете вещи, вы пытаетесь достичь модульности пользовательского интерфейса, а не общей модульности. Если у вас есть все ваши бизнес-правила в одном модуле, вы соединили все вместе, даже если у вас есть несколько проектов, создающих видимость модульности. - person NVM; 07.10.2010
comment
Правильный. Мне нужно решить: клиент А может видеть модуль 1 и 2, клиент Б может видеть модуль 2, но не 1 сценарии. Домен является связным и разделяется между модулями. - person Goblin; 07.10.2010