如果数据库触发器是邪恶的,那么在java或C#中设置属性时产生副作用也是邪恶的吗?

如果数据库触发器是邪恶的,那么在java或C#中设置属性时产生副作用也是邪恶的吗?,c#,java,getter-setter,C#,Java,Getter Setter,让我们假设[数据库触发器是邪恶的] 这是否意味着在java或C#对象上设置属性时的副作用也是有害的 在我看来,所有的问题都存在。不一定,不。如果你有一个价格或金额属性,并且你改变了它,那么成本似乎应该相应地改变 或者你对这篇文章有什么不同的想法吗?不一定,没有。如果你有一个价格或金额属性,并且你改变了它,那么成本似乎应该相应地改变 或者你对这篇文章有什么不同的想法吗?没有。很多属性都会引发副作用 例如:想象两个视觉元素,其中一个子元素包含在父元素中。设置parent.Visible=false可

让我们假设[数据库触发器是邪恶的]

这是否意味着在java或C#对象上设置属性时的副作用也是有害的


在我看来,所有的问题都存在。

不一定,不。如果你有一个
价格
金额
属性,并且你改变了它,那么
成本
似乎应该相应地改变


或者你对这篇文章有什么不同的想法吗?

不一定,没有。如果你有一个
价格
金额
属性,并且你改变了它,那么
成本
似乎应该相应地改变


或者你对这篇文章有什么不同的想法吗?

没有。很多属性都会引发副作用

例如:想象两个视觉元素,其中一个子元素包含在父元素中。设置parent.Visible=false可能还应该设置child.Visible=false


通常,这些副作用是通过事件(System.Windows.Forms中充满PropertyChanged事件)或接口(如INotifyPropertyChanged)显式产生的。

否。许多属性可以也应该触发副作用

例如:想象两个视觉元素,其中一个子元素包含在父元素中。设置parent.Visible=false可能还应该设置child.Visible=false


通常,这些副作用是通过事件(System.Windows.Forms中充满了PropertyChanged事件)或接口(如INotifyPropertyChanged)显式产生的。

尽管属性有时很有用,但它们确实会在团队环境中的日常编码中引入一些不确定性,并非每个人都以同样的方式解释财产的用途和适当使用

这是出现的一系列问题之一:

  • 属性设置程序是否应该具有不明显的副作用
  • 他们是否应该进行潜在的密集处理
  • 公共字段是否仍有位置,或者所有字段是否都应为私有/受保护并通过属性访问?在使用反射时,这可能会产生影响:知道不必搜索类型的Fields集合非常方便
最后,我认为只要记录了任何副作用或潜在的昂贵操作,以上两点就无关紧要,因为同样的情况也应该适用于方法

您可以安全地做出的假设越多,代码复杂度就越低,但额外的通信开销在某种程度上抵消了这种增益。只要团队中的每个人都在同一页上,并且保持在同一页上,它就会起作用


有时,我认为属性引起的问题比它们解决的问题要多。

与属性有时一样有用,它们确实会在团队环境中的日常编码中引入一些不确定性,在团队环境中,并非每个人都以相同的方式解释属性的用途和适当使用

这是出现的一系列问题之一:

  • 属性设置程序是否应该具有不明显的副作用
  • 他们是否应该进行潜在的密集处理
  • 公共字段是否仍有位置,或者所有字段是否都应为私有/受保护并通过属性访问?在使用反射时,这可能会产生影响:知道不必搜索类型的Fields集合非常方便
最后,我认为只要记录了任何副作用或潜在的昂贵操作,以上两点就无关紧要,因为同样的情况也应该适用于方法

您可以安全地做出的假设越多,代码复杂度就越低,但额外的通信开销在某种程度上抵消了这种增益。只要团队中的每个人都在同一页上,并且保持在同一页上,它就会起作用


有时我认为属性导致的问题比它们解决的问题要多。

这取决于它们。当然也有副作用,这会让用户大吃一惊,最好避免这些副作用


我更喜欢属性的行为非常类似于字段,因为从读者的角度来看,它们看起来是一样的(无论如何,在C#中)。如果一个属性有任何不明显的副作用,我宁愿选择方法而不是属性

那要看情况而定。当然也有副作用,这会让用户大吃一惊,最好避免这些副作用


我更喜欢属性的行为非常类似于字段,因为从读者的角度来看,它们看起来是一样的(无论如何,在C#中)。如果一个属性有任何不明显的副作用,我宁愿选择方法而不是属性

与这里的纹理相反

属性不应引发副作用。这就是方法的用途

通过让属性产生副作用,您最终会遇到代码本质上是隐藏的情况。人们很少期望房地产启动某个过程或导致其他东西翻转。如果必须对此进行记录,则其不明显且容易被忽略

然而,当我们调用一个方法时,我们确实期望发生一些事情

以@astander为例,他说改变“价格”的行为会导致不同的房地产“成本”发生变化。但是,如果我们以后添加一个名为“折扣”的新属性会怎么样?围绕价格和金额属性的代码必须更改。这不是很容易发现


然而,如果成本自行计算。。那么一切都会好起来。

这里的情况不太好

属性不应引发副作用。这就是方法的用途

通过让属性产生副作用,您最终会遇到代码本质上是隐藏的情况。人们很少期望房地产启动某个过程或导致其他东西翻转。如果必须对此进行记录,则其不明显且容易被忽略

然而,我们确实期待着发生一些事情