如何在值对象中创建单独的重复逻辑



我正在学习DDD(领域驱动设计(并阅读Clean Architecture。我发现了关于Value对象的信息,并阅读了更多关于它们的信息,并且在我的应用程序中实现了一些可以找到的内容https://gist.github.com/Tyler0722/73ec826be814b8e54b9f6ae6ae836409.

Value对象是通过调用工厂方法创建的,该方法执行验证并遵循关注点分离原则。问题是我有两个验证逻辑重复的Value对象。Username和QuizTitle,其中唯一的区别是MAX_LENGTH,这违反了DRY原则。我想知道是否有人知道我可以把它弄干。

我的建议是不要这样做。在这种情况下,这是没有必要的。

但是,如果你无论如何都想这样做,你可以用静态函数构建一个Validation类。在我的工作中,我们使用Webmozart/Assert,如果你看看它的实现,你就会明白我的意思。在我看来,它们很方便。也可以将MAX_LENGHT作为参数传递。

如果你想消除重复,你必须非常小心。

你应该问自己的第一个问题是

什么是相同的,什么是不同的?

也许你会发现与相同或相似的结构

  • 检查props
  • 创建错误结果或成功结果

如果你发现自己的想法是一样的,你必须问自己更多的问题:

看起来相同的东西有不同的责任吗?

它们的变化是出于相同的原因还是出于不同的原因">

这些都是关于单一责任原则的问题。有时事情看起来是一样的偶然。它们看起来一样但不同,因为它们的变化原因不同。如果消除";"复制";在这种情况下,你会遇到比你解决的问题更多的问题。

例如,如果您将QuizTitleUsername的验证逻辑合并为一个方法,然后您收到QuizTitle验证的更改请求,则可以轻松打破Username的验证行为。我想如果QuizTitle验证发生变化,它应该不会发生变化。

你可能还想阅读Martin Fowler关于避免重复的好文章

好吧,我同意Darius Mann的观点,这些价值对象具有相似的业务逻辑。如果它们在你的应用程序中是不同的概念,请将它们分开并独立,这是我的观点。

相关内容

  • 没有找到相关文章

最新更新