在哪里放置需要数据库查找的值对象的验证?

时间:2016-03-17 05:41:28

标签: validation domain-driven-design

我有一个带有一些属性的实体优惠券,其中一个是平台。 Platform是一个具有单个属性的值对象:name。例如,有适用于网络平台的优惠券,还有另一个适用于Android应用平台。

在管理信息中心,管理员可以为她正在创建的新优惠券指定平台。由于我们的业务在增长,我决定将有效/支持的平台列表放在数据库的表中。因此,当我们推出新的iPhone应用程序时,我可以简单地在平台表中添加新条目(我没有时间为它创建仪表板,但将来可能会这样,但是现在直接添加到数据库很简单)。

我目前的实施如下:

<style>
    textarea{resize:both;}
</style>

但是,我感到很奇怪,我必须为ValueObject创建存储库。这样做真的没问题吗?或者我错误地认为Platform是一个ValueObject,它实际上是一个需要ID的实体?

谢谢

1 个答案:

答案 0 :(得分:4)

拥有值对象的存储库确实是一种代码味道,尽管不是非常严重的存储库,只要您只执行上述查找操作。

不过,我认为重新考虑你的域名是有意义的。 也许有一个实体SupportedPlatforms甚至是一个包含平台列表的更大概念?如果是这种情况,这将是最佳解决方案。

如果没有,请考虑定义应用程序配置对象。通常,如果需要这种灵活性,系统在数据库中具有这些类型的配置对象。请注意,这通常是的商业概念。您仍然可以实现存储库来加载该配置。在您的情况下,它可以包含所有支持的平台的列表。

如果您决定沿着这条路走下去,如果应用配置对象很少更改,则可能有机会提高性能。您可以将其缓存在应用程序中。 (但无论如何,一定不要以过早的优化结束)。