最佳实践:WPF Prism 资源

6
我有一个带有几个模块的WPF prism桌面应用程序。过去,我将所有本地化资源放在基础设施程序集的公共资源文件中,并在所有模块中引用它。
但是最近,我开始怀疑从维护角度来看这是否确实是正确的方法。实质上,这也有点破坏了模块化。从长远来看,将模块特定的资源文件放在模块本身中是否更好?
欢迎提出所有想法。

1
@NVM:语言文本最好通过中央服务进行管理和提供,通常由后端数据库/数据文件驱动,而不是资源字符串。大多数用于Silverlight的已发布文本绑定解决方案都过于臃肿,超出了其目的。我们现在使用附加属性中的键进行绑定。然而,其他资产确实需要传统的MS“命名资源文件”方法,并且每个模块绝对是首选。 - iCollect.it Ltd
1
@NVM:字符串集可以跨多个文件进行编写,但本地化是针对每种语言作为一个完整集合进行的。如果您将每种语言(整个应用程序中的所有字符串)视为单个插件数据单元,则交付回应用程序会更容易。这纯粹基于本地化数十个商业应用程序(和电脑游戏)的实际经验。 - iCollect.it Ltd
非常感谢。你说的很有道理,真希望我能给你加分! - NVM
我认为在像这样的QA网站上,积分非常重要。虽然总有例外,但当某人拥有10万积分时,假设他真的知道自己在说什么是安全的。显然,积分通常不是人们在这里帮助他人的真正动机。 - NVM
好的。现在我有了单独程序集中的资源。一切都保持不变,但是现在每个程序集都使用自己的资源。起初这并不是问题。我只是想知道正确的方法是什么。从实现角度来看,在顶层方面仍然保持不变。 - NVM
显示剩余6条评论
2个回答

5
就Prism的主要目标之一——模块化而言,将资源仅放在适当的程序集中似乎是显而易见的。通过一个集中的程序集共享资源恰恰与模块化相反。 采用集中式方式会在您想要添加更多(可选)模块的时候导致另一种DLL地狱。您将不得不在没有使用该程序集的模块的情况下更新公共程序集。而确定哪个模块存在只是再次违反了模块化本身。另一种方法是始终将公共程序集更新为最新版本。 无论您做什么,遵循集中式方法都会强制您构建所有模块的向后兼容性。 这是我目前的观点。但由于我只使用Prism工作了几周,所以我不太确定我的说法是否正确。

谢谢PVitt。这确实回答了我的问题!干杯 - NVM

1
当使用Prism时,我从不在个别模块之间建立引用(除非一个模块确实是另一个模块的增强)。我倾向于将共享资源、接口等放在一个“common”程序集中,该程序集被所有模块和包含Shell的程序集引用。然后通过IoC容器检索实现接口的内容,并将其放置在其所属的模块中。
正如您所写的那样-将它们放在基础设施模块中会破坏Prism背后的一个想法。

1
好的,你也可以在基础设施模块中找到它们,只是你没有这样命名。除了基础设施程序集之外,还有什么可以保存你的资源呢? - PVitt
@Goblin,就像PVitt所说,你的设置和我的一样。你的“common”程序集就是我的“Infrastructure”程序集。 - NVM
不,我的基础架构本身就是一个模块。 "common"程序集与此分开。 - Goblin
是的 - 你是对的 - 我的模块(无论它们包含什么)依赖于一个包含业务规则的程序集和一个包含常见功能(基类、接口、资源等)的程序集。你可能有更好的封装性 - 我可能有更多机会遵守不重复自己(DRY)的原则 - 这是一个权衡的问题。 - Goblin
仅供讨论,如果我理解正确的话,你设置的方式只是为了实现UI模块化而不是通用模块化。如果你把所有业务规则都放在一个模块中,即使你有多个项目看起来是模块化的,但实际上你已经把所有东西耦合在一起了。 - NVM
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接