如何测试参数C#的顺序

时间:2014-06-23 17:52:31

标签: c# cqrs

我目前正在研究CQRS系统。

它使用命令和事件,这是标准做法。命令和事件只是.NET类,但这些类通常包含许多Id作为属性,这些ID都是Guids。

这在构造类时会导致问题。团队中的某个人会以错误的顺序调用带有参数的构造函数,这有很大的风险。您可以想象这个简单的问题将如何破坏,即OrderId分配给CustomerId,反之亦然。

所以我正在寻找如何解决这个问题的想法。

我自己也有一些想法。

  1. 为每个Id创建一个单独的类型。即用很多类型替换guid。这是明显的OO解决方案。但出于多种原因,我不喜欢它。
  2. 一致的命名和单元测试:如果我们总是将我们的ID命名为Id。我们可以测试调用者和被调用者中的参数列表是否相同(或类似)。当我们只使用Guid.NewGuid()时忽略这些情况。但测试并不简单。对于调用的方法的参数,使用Reflection或Mono.Reflection很容易获得参数列表。对于呼叫者来说,这是另一回事。例如,可以优化方法中的变量。因此,为了测试调用者,我们需要做除反射之外的其他事情,例如,沿着stylecop的行。
  3. 总而言之,我不会出售任何一个想法,并且想要更简单的东西或者现成的解决方案?

2 个答案:

答案 0 :(得分:1)

每个id的单独类型是很好的解决方案,但我也不喜欢它。

单元测试方法调用是非常难的问题。一致的命名总是好的。

在我看来,命令/事件中的参数太多,首先表明出现问题。也许命令负责太多事情或某些参数可以通过基础设施(如当前用户身份)传递。

编辑: 如果你可以确保没有订单和客户(例如)具有相同的Id(我认为使用GUID这是安全的假设)你可以验证两者都存在,如果有人在某处混合这两个值,那么总会有运行时出错,因此很容易发现错误。

答案 1 :(得分:0)

一种想法是使用类型标识符为GUID(因为它们是字符串)添加前缀。所以,伪GUID 对于客户ID xxyy变为cust_xxyy但是,作为C#强类型,我建议使用类和属性作为正确的方法。