编程语言
首页 > 编程语言> > c#-当在“假设分析”工具中使用实例时,不可变类合适吗?

c#-当在“假设分析”工具中使用实例时,不可变类合适吗?

作者:互联网

我有一个基本上代表模型参数的类,并封装了使用这些参数计算模型值的逻辑.我正在尝试确定此类是否应该不变.在实践中,将通过拟合某些数据集来生成模型实例,因此从某种意义上说(至少对我而言)该实例是不可变的,因为它与外部数据相关.

另一方面,将有一个GUI允许用户执行“假设分析”,其中用户可以更改参数以查看其如何更改模型值.因此,我可以使模型变得易变以简化此过程,或者在每次更改参数时创建新副本.后者似乎很尴尬,特别是如果有5个可以单独打勾的参数…似乎我必须为每个返回副本的参数实现SetX()方法,对吗?

我是否在考虑这个问题,还是在这里使用适当的模式? (这是C#代码,尽管我猜不是真的特定于语言的)

解决方法:

仔细考虑该对象将如何实际用于您的推测性分析.对于直接的,一次性的,让我们改变现场尝试的东西并改变它的场景,当然,只需使其可变即可.但是,假设您想掏出大笔钱;那么拥有不可变模型会变得更好.

Data d = whatever;
// What if we mutate X and Y? Which one maximizes the value of Foo(d) ?
var query = from x in Range(0, 100)
            from y in Range(0, 100)
            let mutated = data.MutateX(x).MutateY(y)
            orderby Foo(mutated)
            select mutated;

var max = query.First();

等等.使用不变模式,编写推测性查询变得更加容易,跨多个内核并行化这些查询变得更加容易,依此类推.

标签:immutability,c,design-patterns
来源: https://codeday.me/bug/20191102/1994278.html