Java 面向对象的项目类结构
我是一个新手程序员,我想看看我对OO设计的想法是对的还是对的 我有三个类来控制我正在玩的一个基本android应用程序的数据。FishingTrip-每个实例(令人惊讶地)代表一次钓鱼旅行。Fish—每个实例代表一条捕获的鱼和一个DatabaseHelper—控制数据插入SQLite数据库 这是一个非常简单的程序,因此我可以在android活动中使用DatabaseHelper实现所有数据输入和输出。但是我觉得这不是个好主意 另一种方法是让Fish类具有一个构造函数,该构造函数接受输入变量,对象实例通过DatabaseHelper调用一个方法将其插入数据库,另一个可以通过分配访问数据库的实例变量来实例化Fish对象,即:Java 面向对象的项目类结构,java,android,sqlite,oop,Java,Android,Sqlite,Oop,我是一个新手程序员,我想看看我对OO设计的想法是对的还是对的 我有三个类来控制我正在玩的一个基本android应用程序的数据。FishingTrip-每个实例(令人惊讶地)代表一次钓鱼旅行。Fish—每个实例代表一条捕获的鱼和一个DatabaseHelper—控制数据插入SQLite数据库 这是一个非常简单的程序,因此我可以在android活动中使用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是工具,而不是目标。无论如何,我建议你阅读。