我正在学习DDD(领域驱动设计(并阅读Clean Architecture。我发现了关于Value对象的信息,并阅读了更多关于它们的信息,并且在我的应用程序中实现了一些可以找到的内容https://gist.github.com/Tyler0722/73ec826be814b8e54b9f6ae6ae836409.
Value对象是通过调用工厂方法创建的,该方法执行验证并遵循关注点分离原则。问题是我有两个验证逻辑重复的Value对象。Username和QuizTitle,其中唯一的区别是MAX_LENGTH
,这违反了DRY原则。我想知道是否有人知道我可以把它弄干。
我的建议是不要这样做。在这种情况下,这是没有必要的。
但是,如果你无论如何都想这样做,你可以用静态函数构建一个Validation类。在我的工作中,我们使用Webmozart/Assert,如果你看看它的实现,你就会明白我的意思。在我看来,它们很方便。也可以将MAX_LENGHT
作为参数传递。
如果你想消除重复,你必须非常小心。
你应该问自己的第一个问题是
什么是相同的,什么是不同的?
也许你会发现与相同或相似的结构
- 检查
props
- 创建错误结果或成功结果
如果你发现自己的想法是一样的,你必须问自己更多的问题:
看起来相同的东西有不同的责任吗?
它们的变化是出于相同的原因还是出于不同的原因">
这些都是关于单一责任原则的问题。有时事情看起来是一样的偶然。它们看起来一样但不同,因为它们的变化原因不同。如果消除";"复制";在这种情况下,你会遇到比你解决的问题更多的问题。
例如,如果您将QuizTitle
和Username
的验证逻辑合并为一个方法,然后您收到QuizTitle
验证的更改请求,则可以轻松打破Username
的验证行为。我想如果QuizTitle
验证发生变化,它应该不会发生变化。
你可能还想阅读Martin Fowler关于避免重复的好文章
好吧,我同意Darius Mann的观点,这些价值对象具有相似的业务逻辑。如果它们在你的应用程序中是不同的概念,请将它们分开并独立,这是我的观点。