在OOP中使用setter的最佳方法
假设我有一个类,每当我设置某些属性在OOP中使用setter的最佳方法,oop,coding-style,setter,Oop,Coding Style,Setter,假设我有一个类,每当我设置某些属性bla,foo(可以在外部和内部设置)时,我想调用该类的另一个方法,让我们调用它onChangeFunction() 当直接设置内部值时,简单地调用onChangeFunction()是否是一种好方法,例如 function someFunction() // Some Calculations here ... this.bla = some_value; this.onChangeFunction() end 或者最好也只使用内部setter方
bla
,foo
(可以在外部和内部设置)时,我想调用该类的另一个方法,让我们调用它onChangeFunction()
当直接设置内部值时,简单地调用onChangeFunction()
是否是一种好方法,例如
function someFunction()
// Some Calculations here ...
this.bla = some_value;
this.onChangeFunction()
end
或者最好也只使用内部setter方法设置这些变量bla
和foo
,因为它会触发某个动作,因此它将是一个更清晰的代码
我甚至更进一步:假设我不需要一个可以从外部调用的外部setter(访问类型=public
),发明一个private
setter来执行相同的方法,并且只因为触发了set操作而使用setter,这是否仍然是件好事?
编辑:我的意思是:即使我没有一个公共setter(因为不应该有一个公共访问权限来设置变量,因为它只是一个内部变量),拥有一个私有的setter(仅仅因为触发的动作)是否仍然是好的
提前谢谢 我认为从长远来看,总是使用setter,并从setter内部调用
onChangeFunction()
是不容易出错的
您不需要指定您想要的编程语言,但有些语言允许您定义一个“属性”,该属性看起来像数据成员,但在尝试更改时总是调用函数。例如,请参见Python中的
至于你的第二个问题,我认为拥有一个
私人设置者没有什么错。谢谢你的快速回复。是的,我也认为它不太容易出错,我只是想知道,如果使用内部例程中的setter而不是直接访问值,是否会有点过于复杂。我现在想到的语言是MATLAB,但这是一个相当普遍的问题。但是谢谢你的提示,我不知道这样的事情存在。关于我的第二个问题:好吧,我只是想知道这是否是一种常见的做法,因为到目前为止,我认为getters setters
是一个让一些私人VAR“外部”可以访问的概念。@colheath:我们正在讨论使用两行setter,并用一行替换每个呼叫站点的两行代码。老实说,我不会称之为“过度复杂”。@colheath:我已经更新了答案以解决编辑问题。但是,知道这一点可能需要几分钟才能看到我所做的更改。简而言之:在我看来,拥有一个private
setter没有什么错。哈哈,是的,谢谢,你比我快。我也编辑了我的文章来解决你的编辑问题,但你可能还是读了那篇老文章,因为我速度不够快:)编辑:哦,很酷,MATLAB还提供了属性访问方法的功能
,如果有人对它感兴趣,请看这里: