Oop 如何在面向对象的范例中建模相似但不精确的数据?
我有一个接口和两个数据源,用于填充实现该接口的对象的具体实例。该接口公开了两个实例中只有一个能够以有意义的方式满足的方法Oop 如何在面向对象的范例中建模相似但不精确的数据?,oop,design-patterns,Oop,Design Patterns,我有一个接口和两个数据源,用于填充实现该接口的对象的具体实例。该接口公开了两个实例中只有一个能够以有意义的方式满足的方法 public interface IFoo { public int getValueA(); public int getValueB(); } public FooFromFile implements IFoo { int a; int b; ... public int getValueA() { re
public interface IFoo {
public int getValueA();
public int getValueB();
}
public FooFromFile implements IFoo {
int a;
int b;
...
public int getValueA() {
return a;
}
public int getValueB() {
return b;
}
}
public FooFromNetwork implements IFoo {
int a;
...
public int getValueA() {
return a;
}
public int getValueB() {
return 0; // return 0 because FooFromNetwork never gets value b.
}
}
我研究过的每一个代码库都有这样的代码,我发现它通常源于对应用“is-a”关系的渴望,在这种关系中,其他的东西可能更合适。我有一些时间重构我目前工作的代码基础。对于这种情况,有什么好的建模解决方案?实际的代码要比这复杂得多,但是在这里解决玩具问题,使用一个健壮的可伸缩模式,将有很大的帮助。这里描述的问题“是一个”(双关语)违反了规则。有很多解决LSP违规的方法,但没有一种方法是一刀切的。例如,根据上下文,您可能会选择支持或应用。玩具问题的问题在于,类之间的行为没有差异。因此,应该将它们合并到一个类中,并使用它来完成。在OO解决方案变得合理之前,问题需要更加复杂。。。OO解决方案几乎总是围绕类的setter而不是getter展开。如果你想找到一个好的面向对象解决方案,你必须关注
a
和b
是如何设置的,以及这两个类之间的设置是如何不同的…@DanielT。您是否可以链接到支持OOP围绕setter的文章或文档?我以前从来没有听说过。看看任何一本书,它讨论OO理论,比如Booch的“面向对象的分析和设计”,甚至GoF的“设计模式”。他们实际上并没有做出断言(断言是我的),但如果你研究理论和示例,你会发现人们非常关注不返回数据的方法。相反,这些方法通常是通过改变对象状态来实现的。我很想就此进行讨论,但堆栈交换不是进行此类讨论的好论坛。。。如果你知道我们可以讨论的地方,我很乐意详细讨论。我的电子邮件地址是gmail的danielt1263。