我有一个管理门票和客户的应用程序。一个客户拥有许多票。如果客户被删除,其票证也会被删除。这是查看对象是否应该是聚合的测试之一。我选择它们都应该是不在聚合根下的实体。我通常会加载并显示跨越许多客户的票证列表。我正在使用 SQL Server 以关系格式保存数据。
我的架构如下:
- ASP.NET MVC 应用程序。
- WCF 服务(门面)。此服务具有公共方法,例如 GetTicket、GetTickets、GetCustomer 和 GetCustomers。它直接为此使用存储库。它还有一个名为 Run 的公共方法。Run 接受一个命令,可以是 AssignTicket、ChangeTicketName 等。为了处理这些命令,Facade 被注入了服务、ITicketService 和 ICustomerService。这些服务上的方法用于执行来自外观的命令。这些服务使用 ITicketRepository 和 ICustomerRepository 来加载数据。
- 关系 SQL Server 数据库
我正忙于维护从门票到客户的参考资料。从关系上讲,Ticket 有一个映射到 Customers 表的 FK。当 UI 查看单个工单时,它会调用 Facade.GetTicket(id) 和 Facade.GetCustomers()。我能够显示所有票的详细信息以及它所属的客户姓名。这一切都很好,花花公子。但是,由许多不同客户拥有的大量门票呢?请记住,Ticket 仅包含一个引用客户的 Guid。我不想为要在 UI 中列出的每张票调用外观来获取客户的姓名。我的票上有一个名为 CustomerInfo( CustomerId 和 CustomerName ) 的值对象是否有效?使用sql语句加入这些数据是否有效?如果我不是 t 使用关系数据库?当客户的姓名被更改时怎么办?在系统中,Ticket 实际上也持有对多个其他实体的引用。
似乎 DDD 业务逻辑与 UI 需要显示的内容存在脱节。