Java继承设计思想 - 求指教

标签 java oop inheritance

我会尝试总结一下。

  • 使用 Hibernate 框架进行 ORM(并不真正相关)

这是我的想法:

  • 我希望我的所有模型类(纯粹包含字段的获取/设置,代表我的表)全部继承自空白父类

  • 用于记录检索/存储的单个数据库类,包含许多用于这些方法的方法。对于返回集合的方法,它们返回父对象的类型,并在检索时转换为正确的类类型

小例子

父类(父对象)

public class DataModel {

}

子类

public class A extends DataModel {

    private String name;
    private String message;


    public A (String name) {
        this.name = name;
    }

    public String getMessage() {
        return message;
    }

    public String getName() {
        return name;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setName(String name) {
        this.name = name;
    }

}

数据库类

public class Database {

    public DataModel returnSingleRecord() {



//eventually have an enum as a param to determine what type of child object of DataModel they would like returned


        //data retrieval here etc
        A a = new A("ashley");
        return a;

    }

}

使用示例

public class MainController {


    public static void main(String[] args) {

        Database r = new Database();


        A a = (A) r.returnSingleRecord();

        System.out.println(a.getName());

    }
}

我将总共有 12 个与 A 类似的类。最终我的计划是构建一个 Enum 类,每个返回集合的方法都将接受一个 Enum 值,方法中的 switch 语句将确定什么返回对象,例如 A、B 或 C。

这是个好主意吗?老实说,对于这个项目来说,这似乎是一个显着减少冗余代码并将所有数据库方法减少到 10 个以下的好方法。只需一个"is"似乎就足以作为答案,似乎好得令人难以置信:)。

编辑:只是要注意,如果我要将数据传递到存储方法中,我必须使用 DataModel 作为类型和 instanceof 来确定类类型,这可以在方法中完成,所以看起来仍然是一个好主意.

EDIT2:得出的结论是,这是一个好主意,但是对于返回特定信息,例如在日期之间,一些扩展数据库的类将是最合适的选择。

最佳答案

是的,我认为这是个好主意。我们现在正在为我的一个类使用数据库做一个大项目,我们的模型中有一个名为“BusinessObject”的顶级父类,它有一个 id(GUID),一个 boolean 值 h​​asInDatabase(以了解是否保存需要是插入或更新)和脏 boolean 值(每当您调用 set 方法时,它都会将该 boolean 值设置为 true 以了解该对象是否与数据库中的不同。事实证明,这非常有帮助。我们'我们还编写了一个非常有用且通用的数据访问对象,用于将数据输入和输出数据库。不过,我知道框架可以处理大部分此类内容。无论如何,您的计划对我来说听起来不错:)

关于Java继承设计思想 - 求指教,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9762847/

相关文章:

javascript - 如何使用 Crockfords 的 Object.create() (Javascript) 获取我祖先的重写方法

Java代码,在文件中搜索数字并读取行

java - 如何在使用 ini4j 阅读的 Java 中编辑和添加时正确使用 ini 文件?

c++ - 它是功能继承还是其他什么?

java - 在 Activity 之间传递扩展抽象类的对象

objective-c - 如何在 Objective-C 中引用调用类

C++私有(private)虚拟继承问题

java - 在传递给 Java 8 Streams 的映射函数中实现检查异常处理的更好方法是什么

java - 如何在jsf 2中使用参数 "javax.faces.FACELETS_SUFFIX"

c++如何实现这种类结构?