在进行设计/框架时,通常的做法是为值对象,服务,DAO等提供基类。例如,如果我们创建一个新的VO,它将从该BaseVO扩展。如果我们创建新的DAO,它应该从BaseDAO扩展。我们有这样一个基类的原因是什么?
答案 0 :(得分:5)
答案很明显;) 因为在应用程序范围内添加常用功能或逻辑很容易。
例如,如果您始终希望存储值对象的创建日期和修改日期。或者提供帮助方法来获取服务中的数据库连接。
答案 1 :(得分:1)
继承与封装和多态性一起,是面向对象编程的三个主要特征之一。继承(继承基类)使您可以创建重用,扩展和修改其他类中定义的行为的新类。
向基类添加常用方法和属性很容易。但这并非所有案例的正确方法。设计模式(如Strategy Pattern)使用上面提到的OOP概念进行实际设计。
答案 2 :(得分:1)
BaseDAO可以为其所有子类执行的操作的示例是设置或检索与数据库的连接。将相同的代码放在AppleDAO,PearDAO和BananaDAO中是非常令人不安的(如果您要在数据库中存储的是Apple,Pear和Banana)。
如果您将用于获取数据库连接的代码放入所有这些代码中,则必须更改所有代码,例如当您的数据库主机更改时。如果它在超类中,你只需要在一个地方改变它。
答案 3 :(得分:0)
拥有一个母类是一个好习惯,这样适用于所有子子的行为和数据成员可以向上移动到继承树。
例如:
Object toString();
答案 4 :(得分:0)
在扩展框架时,有时需要保留某些功能或字段。我们举一个简单的例子。如果我们有一个名字和能力说话的动物(是的学校例子,但裸露在我身上)那么任何动物应该有这些东西。所以说我们有一只猫,显然Cat并没有像Dog那样说同样的东西,所以虽然这两种都有Speak()的能力,但它们给出了2种不同的结果。
在您的情况下,它还可以实现可扩展和可互换的系统,这样您就可以换出图层而无需重写大部分代码(有时甚至根本不需要更改任何内容)。
答案 5 :(得分:0)
我曾经听过一句话,并在此引用:
small programs
have a funny way of getting bigger quickly
。
随着项目变得越来越大,你需要它变得更加灵活和有形。因此,使服务和业务逻辑松散耦合,我们避免将对象依赖于其他实现。
答案 6 :(得分:0)
BaseDAO将包含将在后继类中使用的常用方法,或者您还可以定义一个必须作为所有扩展类应具有的行为实现的抽象方法。