Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是的,它将是一个只读存储库)_C#_Domain Driven Design_Repository - Fatal编程技术网

C# 是的,它将是一个只读存储库)

C# 是的,它将是一个只读存储库),c#,domain-driven-design,repository,C#,Domain Driven Design,Repository,换句话说,我建议您在执行某些实际更改数据的操作时使用聚合和域实体,但不用于仅向用户显示数据的查询,而是使用更简单的对象(此外,您可以聚合数据,而不会影响域结构,就像您的示例中那样).我提出的一个解决方案,我认为还不错,就是有一个事务存储库工厂,它为我提供了一个适用的事务存储库列表。然后我可以搜索每个回购协议,并将结果添加到列表中。想法?客户端需要返回多种交易类型的“神奇”方法。我更愿意提供多个方法调用,因为这样我就可以使所有方法都通用化并使用它。不幸的是,我一直被“魔法”困扰着。@Byron-你

换句话说,我建议您在执行某些实际更改数据的操作时使用聚合和域实体,但不用于仅向用户显示数据的查询,而是使用更简单的对象(此外,您可以聚合数据,而不会影响域结构,就像您的示例中那样).

我提出的一个解决方案,我认为还不错,就是有一个事务存储库工厂,它为我提供了一个适用的事务存储库列表。然后我可以搜索每个回购协议,并将结果添加到列表中。想法?客户端需要返回多种交易类型的“神奇”方法。我更愿意提供多个方法调用,因为这样我就可以使所有方法都通用化并使用它。不幸的是,我一直被“魔法”困扰着。@Byron-你能用客户的一些电话样本更新你的问题吗?啊,还有别的。。你注意到我提到DBA要求的难以理解的混乱吗?试试每种类型5张桌子。@Byron-我感觉到你的痛苦。你应该看看我们的EF模型。基本上不可能不跨越聚合边界。
public abstract class TransactionBase
{
    public int TransactionId { get; set; }
    public decimal Amount { get; set; }
}

public class CreditCardTransaction : TransactionBase
{
    public string CardNumber { get; set; }
    public int ExpirationMonth { get; set; }
    public int ExpirationYear { get; set; }
}

public class CheckTransaction : TransactionBase
{
    public string BankAccountNumber { get; set; }
    public string RoutingNumber { get; set; }
}
public class TransactionSearchCriteriaBase
{
    public int TransactionId { get; set; }
    public decimal Amount { get; set; }
}

public class CreditCardTransactionSearchCriteria : TransactionSearchCriteriaBase
{
    public string CardNumber { get; set; }
    public int ExpirationMonth { get; set; }
    public int ExpirationYear { get; set; }
}
var listOfTransactions = _transactionService.Search(new CreditCardTransactionSearchCriteria{ Amount = 10m, CardNumber = "1111" });
public class TransactionRepository : IRepository<Transaction>
{
   public TTransaction Find<TTransaction>(int transactionId) 
      where TTransaction  : TransactionBase, new()
   {
      return _ctx.Transactions.OfType<TTransaction>().SingleOrDefault(tran => tran.TransactionId == transactionId);
   }
}
var ccTran = _repository.Find<CreditCardTransaction>(x => x.TransactionId == 1);
var cTran = _repository.Find<CheckTransaction>(x => x.TransactionId == 2);