【问题标题】:Where do resource files go within Onion Architecture?Onion Architecture 中的资源文件在哪里?
【发布时间】:2012-08-18 07:26:40
【问题描述】:

2 部分问题...我的解决方案中有几个资源文件 (.resx),主要用于字符串翻译。例如,Errors.resx、Validation.resx 和 Enums.resx。

Part1 :如果我没有 Enums 资源文件,我会假设我应该将所有资源文件放在 UI 层中,可能在它自己的程序集中(如 'Company.App1 .MVCApp.Resources') 并从 Web 应用程序 (Company.App1.MVCApp) 中引用它...将资源文件放在 UI 层中是否正确?

第 2 部分:Enums.resx 文件包含与枚举成员相关的描述性字符串(使用 Description 属性),在我的 UI 和有时域服务中,我可能需要访问描述性字符串他们的翻译。我考虑过将它存储在核心/域层中的某个地方,比如 Company.App1.Core.Resources ...?或者我应该在核心层创建一个抽象,然后在基础设施层的某个地方实现 ResourcemManager 以坚持正确的洋葱架构..?

【问题讨论】:

    标签: domain-driven-design embedded-resource resx onion-architecture


    【解决方案1】:

    第 1 部分:在我目前正在处理的应用程序中,每个关注点(枚举、错误...)没有一个 resx 文件,而是每个项目一个 resx 文件。例如,如果您接收错误消息,则纯粹的 UI 错误消息进入 UI resx 文件,域错误消息进入 Domain resx,等等。 IMO 资源文件最好放在最靠近使用本地化字符串的代码的位置。在 UI 项目中拥有大多数本地化文件会将本地化与呈现应用程序的方式紧密结合,如果您想在主 UI 之外的其他上下文中重用本地化,这可能会出现问题。

    Part2 :如果您只需要访问域层中的本地化枚举成员,那么您可以在域层中有一个特定的助手,该助手派生自或使用System.Resources.ResourceManager 来查找本地化字符串.但是,我发现在一个独立的层中有某种通用的本地化助手很方便,它集中了比Properties.Resources.[...] 更复杂的所有本地化逻辑,并且能够在需要时搜索解决方案的所有 resx 文件是。

    【讨论】:

    • 感谢您的信息...实际上,创建您提到的“助手”很有意义。我想这将是一个工厂,我可以使用 DI 吗?已经有一个 ResourceProviderFactory 但它存在于 System.Web.Compilation 所以我想我会在我的应用程序的核心/域中编写自己的实现,然后在基础设施层中使用 System.Web.Compilation.ResourceProviderFactory ...是吗?
    • 如果它只返回本地化字符串,我不会称它为工厂。我的观点是拥有一个独特的服务或助手,其中包含所有与本地化相关的实用方法,例如 GetLocalizedEnumMember(...) 等。我不确定你为什么想要你的 ResourceProvider 的多个实现?
    • 很好地允许将来在数据库中存储本地化数据的灵活性......就像这里stackoverflow.com/a/4647571/1240322
    • 他在谈论每个消息数据存储(SQL 等)的一个具体实现,而您似乎只有 resx 文件。此外,当您想要在运行时构建未知数量的对象时,通常会使用工厂。如果我猜对了,你会想要一个创建 ResourceProviders 的工厂。但是,您需要的 ResourceProviders 的数量不是事先众所周知的吗? ResourceProviders 类型的编译时定义是否足够好(YAGNI 原则)?
    • 如果你愿意,当然可以。你可以有一个抽象的 ResourceManager 并使用 DI 注入它的具体实现。它也可以帮助你进行单元测试,通过一个虚假的实现。但是,由于多个层都​​可以使用 ResourceManager,我不会将抽象放在 Core/Domain 中,而是放在每个人都可以访问的地方(实用程序/帮助层),否则这意味着每个人都必须引用 Core。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多