gpt4 book ai didi

java - 面向对象的项目类结构

转载 作者:行者123 更新时间:2023-11-29 21:06:48 24 4
gpt4 key购买 nike

我是一名新手程序员,我想看看我的 OO 设计想法是否可行。

我有三个类来控制我正在使用的基本 Android 应用程序的数据。 FishingTrip - 其中的每个实例(令人惊讶地)代表一次钓鱼旅行。 Fish - 每个实例代表一条捕获的鱼和一个 DatabaseHelper - 它控制将数据插入到 SQLite 数据库中。

这是一个非常简单的程序,所以我可以在我的 android Activity 中使用 DatabaseHelper 实现所有数据输入和输出。但是我觉得这不是好的 OOP。

另一种方法是让 Fish 类有一个接受输入变量的构造函数,对象实例调用一个方法通过 DatabaseHelper 将其插入数据库,另一个可以通过从访问分配实例变量来实例化 Fish 对象数据库即:

public Fish(String species, int size){
this.species = species;
this.size = size;
}
public Fish(DatabaseHelper db, int tripID, int fishID){
//getFish() is a query inside the DatabaseHelper class
//that returns the row for one fish from one Fishing Trip
Cursor c = db.getFish(tripID,fishID);
this.species = c.getString(0);
this.size = Integer.parseInt(c.getString(1));

现在每条 Fish 都在一次 Fishing Trip 中被捕获,我是否应该设置 FishingTrip 类及其一系列方法,然后让 Fish 扩展 FishingTrip 以加强这种关系?

只需使用我的 DatabaseHelper 类在 android Activity 中实现数据库事务即可完成工作,但我认为如果尝试开发更大的程序,以其他方式这样做将是更好的方法。

(注意:我将实现坐标等其他数据收集,以便我可以在 Fish/FishingTrip 对象之间执行分析,例如渔获物之间的​​距离或渔获物之间的​​时间等)。

长话短说 - 这是构建此项目的正确思路吗?

谢谢。

最佳答案

在我看来,Fish 和 DatabaseHelper 类应该解耦。 Fish 类是模型的一部分,而 DatabaseHelper 类负责数据库访问。因此,对 DatabaseHelper 类的更改不应对 Fish 产生任何影响。相反,应该有一个层将数据从 DatabaseHelper 传输到 Fish。

所以,而不是:

DatabaseHelper db = ...;
int tripID = ...;
int fishID = ...;
Fish fish = new Fish(db, tripID, fishID);

你会:

DatabaseHelper db = ...;
int tripID = ...;
int fishID = ...;
Cursor c = db.getFish(tripID, fishID);
String species = c.getString(0);
int size = Integer.parseInt(c.getString(1));
Fish fish = new Fish(species, size);

通过这样做,两个类都不会相互知道,对任何一个类的更改只会影响中间的映射层。

关于java - 面向对象的项目类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com