- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们谈论域对象,为什么 setter 在接口(interface)中不好?
澄清:
我有一个存储在数据库中的域对象。它有几个字段,设置成本很高。 IE。
class JurasicPark {
private long area;
...other fields ...
getters and setters
....
private Collection<Dinosaur> dinosaurs;
private Collection<ExoticTree> flora;
public Collection<Dinosaur> getDinosaurus(){
...
}
public Collection<ExoticTree> getFlora(){
...
}
}
dinosaurs
和
flora
初始化和设置成本非常高。但在很多情况下,我不需要每次都设置这个字段。
dinosaurs
或
flora
不要初始化它会导致 NPE 或我自己的一些期望。我不想让 api 用户考虑这一点并记住哪些字段可能未设置。
IJurasicPark
和
IFullJurasicPark
第一个将声明对简单字段的所有访问方法,前者将声明对
flora
的访问方法和
dinosaurs
字段。
interface IFullJurasicPark extends IJurasicPark
class IJurasicPark implements IFullJurasicPark
最佳答案
谁告诉你的?一般来说,这肯定不是真的。
在某些情况下可能是正确的,即相关属性(property)不应被外部各方修改。例如。不可变类的接口(interface)肯定不能包含 setter。
确实,在设计接口(interface)时应该仔细考虑,而不是盲目地为类的所有属性自动生成 getter+setter。但这并不意味着二传手总是坏的。
澄清问题后更新
您的澄清完全改变了问题......您可以立即从这个问题开始,从而节省您和其他人的时间。虽然我没有提示 - 我得到了很多(不应该的)赞成票 :-)
所以你的问题是在域对象中初始化/设置昂贵的集合属性。我的第一种方法确实是延迟加载/保存,可以根据上下文以多种不同的方式实现。
您的帖子建议(但没有明确说明)有问题的集合是从数据库中获取/持久化到数据库中的。但是,您没有提到您使用的持久性解决方案。你也没有解释为什么你不想要“休眠风格的惰性初始化”——恕我直言,它在大多数情况下非常有效且易于使用。如果您向我们提供有关这些的更多详细信息,我们也许能够提供更好的答案。
如果没有恐龙和植物群的侏罗纪公园对象合乎逻辑并且可以按原样使用,那么您建议的界面拆分可能是有意义的。同样,如果没有更多的上下文,很难判断这一点。您似乎正在根据实现细节做出设计决策,这通常不是一个好主意。
如果你真的想这样做,你实际上不应该需要单独的接口(interface) - 只需定义一个 JurassicPark
(抽象)包含简单成员及其访问器方法的基类,然后用另一个添加重量级字段的类对其进行子类化。
关于oop - 为什么二传手在接口(interface)中不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3813361/
我是 Scala 的新手,具有基本的 Java 背景。我研究了如何实现类构造函数以及如何在 setter 中为该类的字段提供一些逻辑。 class SetterTest(private var _x:
我想知道的是,当我们可以简单地将值直接分配给私有(private)对象时,为什么我们需要私有(private) setter?考虑以下代码: private int counter = 0; publ
我试图为 recordingStatus 赋值 -即recordingStatus = 1但它没有进入我想要一些自定义代码的 setter ..我的代码有什么问题? 谢谢。 码头。 在文件.h中 @p
仍在习惯 Entity Framework ,但我已经看到如下代码,它们在实体中为 id 设置了私有(private) setter 。 public int Id { get; private se
省略 setter 的属性和带有私有(private) setter 的属性有什么区别? public string Foo { get; private set; } 对比 public strin
我不明白拥有以 C# 2 开头的私有(private) setter 的必要性。 对我来说有一个 setter 方法就是让用户在那个类中设置一些变量。这样做时,我们不会将变量直接暴露给用户。相反,我们
我有一个 QObject,其属性可从 QML 访问。 就像是: Class C : public QObject { Q_OBJECT public: explicit C(QObject * par
有没有办法在 TypeScript 中为属性设置私有(private) setter? class Test { private _prop: string; public get p
我一直在寻找,但找不到任何相关的引用资料。我想在 Dart 中创建一个私有(private) setter,以便在更改私有(private)变量后调用附加函数。 ViewState _state; V
这是由apple提供的pint结构setter getter介绍的point example如何让只有二传手私有(private) struct Point { var x = 0.0, y
我编写了一个自定义序列化程序,它通过反射设置对象属性来工作。可序列化类使用可序列化属性进行标记,所有可序列化属性也进行标记。例如,下面的类是可序列化的: [Serializable] public c
我知道有一个属性可以处理私有(private) setter ,但我有点希望将此行为作为默认行为,有没有办法实现这一点?除了调整来源。如果有这样的设置就好了。 最佳答案 我来这里是为了寻找使 Json
我是一名优秀的程序员,十分优秀!