小编Iva*_*van的帖子

值对象应该保持对实体的引用吗?

值对象是否应该在DDD方法中引用实体?

编辑

@Dmitry:

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

在此输入图像描述

c# domain-driven-design

14
推荐指数
1
解决办法
3255
查看次数

Moq框架Func <T,T>

我是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的单元测试中,我模拟了传递给构造函数的存储库,但我想测试该功能:

  • 当具有BusinessIdentificationNumber的租户已经存在于存储或会话中时,应该返回它.

所以我试着这样做

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)

c# unit-testing moq

5
推荐指数
1
解决办法
2186
查看次数

将值对象传递给实体方法

将值对象传递给实体方法(就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)

并让客户处理地址对象的创建,如果需要抛出异常.

地址是不可变对象.

c# domain-driven-design

2
推荐指数
1
解决办法
215
查看次数

标签 统计

c# ×3

domain-driven-design ×2

moq ×1

unit-testing ×1