class Customer
{
public int Id { get; set; }
}
class Sale
{
public int Id { get; set; }
public int CustomerId { get; set; }
}
class SaleService
{
public void NewSale(Sale sale)
{
//Should i validate if Customer exists by sale.CustomerId before call save?
saleRepository.InsertOrUpdate(sale);
}
}
我正在使用域驱动设计和实体框架。 我是否应该通过sale.CustomerId验证客户是否存在于保存之前?
答案 0 :(得分:2)
我通常不这样做。通常情况下,这些信息来自之前(已存在)已加载的客户端。但是,有些情况下更新数据库时会遗漏CustomerId
。
由于许多用户同时访问系统时的并发性。但是这种情况应该使用乐观并发控制(版本)来解决选择性。我们通常不会尝试在所有情况下处理并发性,因为它几乎不可能这样做,并且这样做也会产生副作用,如性能问题,复杂性......我们只关注系统中会导致问题的一些关键代码如果存在并发问题。
客户端尝试通过发送不合适的CustomerId
来破解系统。但这是另一个应根据授权或类似情况进行检查的问题。
在大多数情况下,我认为db中的外键约束就足够了。