考虑这个用例。用户帐户仅在某段时间处于活动状态。如果用户不活动,则用户无法登录。
我想象一下。我们有一个值对象,帐户聚合中的帐户结束时间。域模型无法加载"当前时间(我们进行单元测试,不要使用DateTime.Now
)。该模型给出了当前时间。然后我们需要在域服务中实现验证,该域服务将从OS(或单元测试)获得当前时间并将其提供给用户帐户聚合,以便它可以判断帐户是否处于活动状态。
因此,只要我们需要实现与时间相关的逻辑,我们就需要按照描述进行域服务。你看到它是好方法吗?或者有一些更简单,更好的解决方案?
答案 0 :(得分:3)
正如评论中的其他人所建议的,使用能够返回当前时间的服务。现在可以在单元测试中替换此服务。
如果您进行大量日期/时间处理并且还必须考虑不同的时区,我强烈建议您使用Noda Time。
Noda Time是.NET的替代日期和时间API。它可以帮助您更清晰地考虑数据,并更准确地表达对数据的操作。
Noda Time已经包含一个服务接口,它返回上面提到的当前时间,请参阅IClock
。是否要在域逻辑中直接使用该接口取决于您。但在我看来,日期/时间处理是基本的库功能,所以我通常会从每个项目中依赖Noda Time。