关于DDD模型中两个聚合根之间的引用之间的关系,我有几个问题.请参阅下面的典型客户/订单模型.

首先,聚合的实际对象实现之间的引用是否总是通过ID值而不是对象引用来完成?例如,如果我想要订单客户的详细信息,我需要获取CustomerId并将其传递给ICustomerRepository以获取客户,而不是设置Order对象以直接返回客户正确的客户?我很困惑,因为直接返回客户似乎会使编写代码对模型更容易,并且如果我使用像NHibernate这样的ORM,则设置起来并不困难.但我相当肯定这会违反聚合根/存储库之间的界限.
其次,对于两个聚合根,应该在何处以及如何对删除关系实施级联?例如,假设我希望在删除客户时删除所有关联的订单.ICustomerRepository.DeleteCustomer()方法应该不应该引用IOrderRepostiory吗?这似乎会破坏聚合/存储库之间的界限?我是否应该使用CustomerManagment服务来处理删除客户及其相关订单,这些订单将引用IOrderRepository和ICustomerRepository?在这种情况下,我如何确保人们知道使用服务而不是存储库来删除客户.这仅仅是为了教育他们如何正确使用模型?