gpt4 book ai didi

oop - 我的对象应该负责随机化自己的内容吗?

转载 作者:行者123 更新时间:2023-12-04 22:29:38 26 4
gpt4 key购买 nike

我正在构建一个应用程序,它可以生成随机的音符序列并将它们作为乐谱显示给用户。这些序列可以根据几个参数生成,包括密度和相同音高的最大连续音符。

音乐序列由 sequence 对象捕获,该对象的 notes 属性是一个简单的音符字符串,例如 "abcdaba"

我早期尝试生成随机序列涉及一个 SequenceGenerator 类,该类使用多个私有(private)方法编译随机序列。这看起来像是对我的服务。但我试图遵循领域驱动设计 (Evans 2003) 中表达的原则,即仅在必要时使用服务,并且更喜欢将行为与领域对象相关联。

所以我的问题是:

生成随机序列的工作应该由 sequence 本身的公共(public)方法(例如 generateRandom())处理还是应该保留分开?

我考虑过这样一种可能性,即我的原始设计更像是构建器或工厂模式而不是服务,但是创建随机序列的代码与使用提供的注释字符串创建随机序列的代码非常不同。

我对方法路由的一个担忧是,generateRandom() 作为 sequence 上的一种方法会更改序列的 content 但不是t 实际上生成一个新的序列对象。这只是感觉不对,但我无法表达原因。

我仍在思考一些核心 OO 设计原则,因此非常感谢任何帮助。

最佳答案

Should the job of producing random sequences be taken care of by a public method on sequence itself (such as generateRandom()) or should it be kept separate?

如果我像对待“时间”或“I/O”一样对待“随机”——作为模型的输入,而不是模型的一个方面,我通常会发现我会得到更清晰的设计本身。

If you don't consider time an input value, think about it until you do -- it is an important concept (John Carmack, 1998).

在 DDD 的约束下,这可能意味着将“领域服务”作为参数传递给您的方法,允许您的聚合根据需要调用服务,或者它可能意味着在聚合上有一个方法,以便应用程序可以在需要时传入随机数。

So any creation of a sequence would involve passing in some pattern or seed, but whether that is random or not is decided outside of the sequence itself?

是的,完全正确。

关于oop - 我的对象应该负责随机化自己的内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com