Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 面向对象的项目类结构_Java_Android_Sqlite_Oop - Fatal编程技术网

Java 面向对象的项目类结构

Java 面向对象的项目类结构,java,android,sqlite,oop,Java,Android,Sqlite,Oop,我是一个新手程序员,我想看看我对OO设计的想法是对的还是对的 我有三个类来控制我正在玩的一个基本android应用程序的数据。FishingTrip-每个实例(令人惊讶地)代表一次钓鱼旅行。Fish—每个实例代表一条捕获的鱼和一个DatabaseHelper—控制数据插入SQLite数据库 这是一个非常简单的程序,因此我可以在android活动中使用DatabaseHelper实现所有数据输入和输出。但是我觉得这不是个好主意 另一种方法是让Fish类具有一个构造函数,该构造函数接受输入变量,对象

我是一个新手程序员,我想看看我对OO设计的想法是对的还是对的

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

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

另一种方法是让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));
现在,由于每条鱼都是在钓鱼过程中捕获的,我是否应该设置FishingTrip类及其一系列方法,然后让Fish扩展FishingTrip以强制实现这种关系

仅使用我的DatabaseHelper类在android活动中实现数据库事务就可以完成任务,但我觉得如果尝试开发更大的程序,以其他方式实现数据库事务将是一种更好的方法

(注意:我将实现其他数据收集,如坐标,以便我可以在鱼/鱼之间执行分析,如捕获之间的距离或捕获之间的时间等)

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


谢谢

我认为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);

这样,两个类都不知道彼此,并且对任一类的更改只会影响中间的映射层。

OOP是工具,而不是目标。无论如何,我建议你阅读。