值对象是否应该在DDD方法中引用实体?
编辑
@Dmitry:
这可能是我的情况.在这里,我附加了类图,其中Accounthold引用了IInvoiceable项集合.我Tenant作为实体对待,但它只拥有一个帐户,我不认为Account需要身份.它的一部分Tenant.或者我应该将其视为实体?对我来说它没有意义.

我是Moq和TDD的新手,我想要做的是在存储库接口上设置方法.
这是全文.
我有一个名为Tenant的域实体类,其属性为BusinessIdentificationNumber
public class Tenant:EntityBase<Tenant>,IAggregateRoot
{
...
public string BusinessIdentificationNumber {get;set;}
...
}
Run Code Online (Sandbox Code Playgroud)
接下来我有这个实体的存储库,接口就像
public interface IRepository<T>
{
...
T FindBy(Func<T,bool> func);
...
}
Run Code Online (Sandbox Code Playgroud)
问题所在,我使用的域名服务包含创建租户的规则,就像
public class TenantCreationService:ITenantCreationService
{
public TenantCreationService(IRepository<Tenant> tenantRepository){...}
public void CreateTenant(Tenant tenant)
{
//from here there is call to IRepository<Tenant>.FindBy(funcMethod);
}
}
Run Code Online (Sandbox Code Playgroud)
在我测试TenantCreationService的单元测试中,我模拟了传递给构造函数的存储库,但我想测试该功能:
所以我试着这样做
repositoryMock.Setup(x=>x.FindBy(It.Is<Tenant>(t=>t.BusinessIdentificationNumber
== _tenantInTest.BusinessIdentificationNumber))).Returns(_tenantInTest)
Run Code Online (Sandbox Code Playgroud)
但它没有编译.你知道我想做什么吗?
编辑:当我尝试编译下面的代码片段
repositoryMock.Setup(e => e.FindBy(t => t.BusinessNumber == _validTenant.BusinessNumber)).Returns(
_validTenant);
Run Code Online (Sandbox Code Playgroud)
我得到例外
Unsupported expression: t => (t.BusinessNumber == value(DP.IPagac.UnitTests.DP.IPagac.Module.TenantManagement.TenantDomainServiceTests)._validTenant.BusinessNumber)
Run Code Online (Sandbox Code Playgroud) 将值对象传递给实体方法(就DDD而言)的良好做法?例如,我的实体客户中有一个方法:
SetAddress(Address invoiceAddress);
Run Code Online (Sandbox Code Playgroud)
它有效吗?或者我应该传递地址参数
SetAddress(string street, string town, string zip, string country);
Run Code Online (Sandbox Code Playgroud)
并让客户处理地址对象的创建,如果需要抛出异常.
地址是不可变对象.