Prism架构中数据类应如何放置以维持模块间松耦合
Prism 跨模块共享数据模型的正确实现路径
Prism 模块架构的核心约束是模块间零直接程序集引用,所有交互仅通过公共契约层完成,针对当前需要在Customer模块使用Order数据结构的场景,标准实现流程如下:
- 新建独立的无业务依赖的公共契约项目(通常命名为
[应用名].Shared/[应用名].Abstractions),该项目不引用任何业务模块,仅承载跨模块通用的接口、数据结构定义,不包含任何具体业务实现逻辑。 - 将原本定义在OrdersModule内的
Order数据类,迁移至该公共契约项目中,作为跨模块共享的纯数据结构,调整后代码为:// 存放在公共契约项目中 public class Order { public string Id { get; set; } public string OrderItem { get; set; } public string Customer { get; set; } } - 调整各业务模块的项目引用关系:OrdersModule、CustomerModule仅需引用这个独立的公共契约项目,不建立任何对彼此的直接引用。
场景优化实现
如果希望进一步降低数据结构的耦合度,可在公共契约层定义专门的跨模块服务接口,而非直接暴露实体类:
- 在公共契约项目中新增订单查询服务接口:
// 存放在公共契约项目中 public interface ICustomerOrderQueryService { /// <summary> /// 根据客户ID获取关联的订单列表 /// </summary> List<Order> GetRelatedOrders(string customerId); } - 由OrdersModule负责实现这个服务接口,通过Prism的依赖注入容器将实现类注册为全局可解析的服务。
- 在Customer模块的ViewModel中,仅需在构造函数中注入
ICustomerOrderQueryService接口实例,即可获取对应客户的关联订单列表,全程完全感知不到OrdersModule的存在,严格符合松耦合架构要求。
常见实现误区
将跨模块使用的数据类放在某一个业务模块内部,再要求其他模块引用该模块的实现程序集,本身就违反了Prism的模块设计原则——这类数据结构本质是跨模块的公共契约,不属于任何单一业务模块的私有实现细节,必须独立到无依赖的公共契约层中,才能从根源上避免模块间的硬绑定。
内容的提问来源于stack exchange,提问作者Ahmed Fawzy
相关产品推荐
相关产品推荐

