设置属性的唯一属性是不好的实践吗?
封装的目的是限制能够改变对象状态的内容,从而使得状态更容易维护。没有什么固有的坏处,但是对我来说,这种做法没有太多意义。我想不出任何将属性设为只写的好理由。如果确实存在这样的理由,将其设计为方法可能更合理。用户习惯于能够读取属性,如果你的属性太奇怪,他们可能会浪费时间想弄明白为什么。
有时候,我们可能会遇到一些特殊情况,需要将属性设置为只写。这种情况可能比较少见,但并不代表它们是不合理的。例如,某些敏感信息的属性可能需要被保护,只能在内部进行写入,而不能被外部读取。在这种情况下,将属性设置为只写可以更好地保护数据的安全性。
要解决这个问题,我们可以采取一些方法。首先,我们可以通过添加注释来解释属性的只写性质,以便用户了解为什么不能读取该属性。其次,我们可以考虑将只写属性转换为方法,使其更符合用户的使用习惯。最后,我们还可以提供一些替代方案,例如添加一个额外的只读属性,用于展示只写属性的值。
将属性设为只写并没有固有的坏处,但在设计时需要考虑用户的使用习惯和理解。通过适当的注释和替代方案,我们可以更好地解释只写属性的存在,并提供更好的用户体验。
在使用依赖注入(Dependency Injection,DI)时,设置只读属性可能是有用的,其中不使用构造函数进行注入,而是使用属性。
我不明白你的意思,能否请你澄清一下?另外,这并不是用于DI。
添加对DI的引用。
我知道什么是DI,但我想不出如何在DI中使用只有setter的属性而不是笨拙的方法。
我能想到的唯一理由是,在实例化时没有引用,并且不能在构造函数中使用注入,可能是为了在测试目的下在下游注入它...属性本身仍然保持只有setter,因为getter没有即时值,你只是想为对象设置初始值...
挺好的,我猜那可能会起作用。
这正是我开始谷歌搜索只有setter属性的原因 🙂 在我在构造函数时没有该属性的DI中(并非所有代码都转移到完全DI中)。
是否设置仅属性是一种不好的做法?
在上述讨论中,有人认为设置仅属性是一种不直观的做法,应该尽量避免使用。相比之下,将其作为方法来实现会更加自然和直观。然而,也有人提出了一种合理的情况,即当有几个属性可以一起设置为相同值时,将其作为设置属性会更加合理,而将其作为获取属性则没有意义。
如果设置仅属性在大多数情况下不直观且不常用,是否可以将其视为一种反模式呢?虽然有人同意这一观点,但也提出了一种例外情况:当有多个属性可以一起设置为相同值时,将其作为设置属性可以传达出它是一种非常廉价的操作。相比之下,将其作为方法可能会被认为是更昂贵的操作。
有人认为将其作为属性而不是方法更有意义,因为可以在对象初始化列表中使用它。此外,还有人指出了一种特殊情况,即当使用对象初始化列表时,设置属性和初始化属性的行为可能会引发一些预期之外的结果。
是否将设置仅属性视为一种不好的做法,这个问题没有明确的答案。它可能取决于具体的使用场景和个人的偏好。不过,大多数人似乎更倾向于将其作为方法来实现,因为这样更加直观和可理解。