C# 实体VS Id作为参数

C# 实体VS Id作为参数,c#,performance,domain-driven-design,C#,Performance,Domain Driven Design,我用的是DDD 我有以下接口: interface ICustomerRepository { void Disable(int customerId); } interface ICustomerService { void Disable(int customerId); } 该应用程序将在Web服务上运行 我想知道,我应该使用id作为参数还是使用整个客户实体 每种方法的优缺点是什么?使用CudtomerId是一个更好的主意。因为当您传递客户实体(通常我们使用传递值)

我用的是DDD

我有以下接口:

interface ICustomerRepository 
{
    void Disable(int customerId);
}

interface ICustomerService 
{
    void Disable(int customerId);
}
该应用程序将在Web服务上运行

我想知道,我应该使用id作为参数还是使用整个客户实体


每种方法的优缺点是什么?

使用CudtomerId是一个更好的主意。因为当您传递客户实体(通常我们使用传递值)时,它会复制该实体并使用它;默认情况下为空实体。

因此,我认为您的方式是最好的。

使用CudtomerId是一个更好的主意。因为当您传递客户实体(通常我们使用传递值)时,它会复制该实体并使用它;默认情况下为空实体。

因此,我认为您的方式是最好的。

事实上,这种行为不应该出现在存储库中。行为应该放在实体中

但是,您的应用程序服务合同可能不受域类的限制

e、 g


事实上,这种行为不应该出现在存储库中。行为应该放在实体中

但是,您的应用程序服务合同可能不受域类的限制

e、 g


虽然plalx提供的答案可能是实现这一点的纯粹方法,但我也发现,在某些情况下,完全保存可能是过分的

这两种方法的混合物怎么样:

interface ICustomerRepository 
{
    void SaveDisable(Customer customer);
}

interface ICustomerService 
{
    void Disable(int customerId);
}
那么代码可以是:

public void Disable(int customerId) {
    var customer = _customerRepository.Get(customerId);
    customer.Disable();
    _customerRepository.SaveDisable(customer);
}

这需要我们对附加的功能非常小心,因为我们明确了什么是持久化的。

尽管plalx提供的答案可能是实现这一点的纯粹方法,但我也发现,在某些情况下,完全保存可能是过火的

这两种方法的混合物怎么样:

interface ICustomerRepository 
{
    void SaveDisable(Customer customer);
}

interface ICustomerService 
{
    void Disable(int customerId);
}
那么代码可以是:

public void Disable(int customerId) {
    var customer = _customerRepository.Get(customerId);
    customer.Disable();
    _customerRepository.SaveDisable(customer);
}

这将要求我们对附加功能非常小心,因为我们明确了持久化的内容。

Customer是一个引用类型(类),默认情况下它是通过引用传递的。但我不认为这是一个问题。Customer是一个引用类型(类),默认情况下它是通过引用传递的。但我不认为这是一个问题。有什么好处吗?一个人应该有一个需要不必要的数据访问的聚合,那么,是的,有一个好处;否则我就不会这么做:)这不是过早的优化吗?在进行完全保存时是否存在性能问题?我想这很好地取决于变化检测所采用的策略……如果可以的话,我倾向于使用易于维护、代码更少的方法。因此,只要有可能,我就会保存全部聚合。我不认为这是不成熟的,因为我通常会在我做这种事情之前考虑不明确的影响。您自己也说过,“这需要对附加功能非常小心,因为我们对持久化的内容是明确的。”。使用基于ORM的存储库,您不必关心在单个存储操作中添加的功能。对实体进行变异并保存,就这样。对我来说,维护的代码更少。有什么好处吗?如果一个聚合需要不必要的数据访问,那么,是的,有一个好处;否则我就不会这么做:)这不是过早的优化吗?在进行完全保存时是否存在性能问题?我想这很好地取决于变化检测所采用的策略……如果可以的话,我倾向于使用易于维护、代码更少的方法。因此,只要有可能,我就会保存全部聚合。我不认为这是不成熟的,因为我通常会在我做这种事情之前考虑不明确的影响。您自己也说过,“这需要对附加功能非常小心,因为我们对持久化的内容是明确的。”。使用基于ORM的存储库,您不必关心在单个存储操作中添加的功能。对实体进行变异并保存,就这样。对我来说,要维护的代码更少了。