java - 在 JAVA 类中建模事件和预订 - 最佳设计方法
问题描述
我对java很陌生,正在构建一个基本的旅游预订系统。我有一个看起来像这样的旅游班。
public class TourModel {
private int tourID;
private String tourname;
private String tourlocation;
private String country;
private String groupsize;
private String tourprice;
private String tourduration;
private String tourdescription;
private int availableSeats;
private Date tourDate;
private String tourBanner;
private ArrayList<ReservationModel> reservations;
预订舱看起来像
import java.util.ArrayList;
import java.util.Date;
public class ReservationModel {
private int reservationID;
private int tourID;
private int userID;
private String reservationstatus;
private int reservationpaymentstatus;
private int numberofattendees;
private Date reservationcreationdate;
private ReservationAttendees attendees;
现在,为了根据用户 ID 获取所有预订,我在 DOA 类中有一个方法,可以根据用户 ID 字段获取所有预订。但是,我怎样才能获得预订的所有旅游信息?
我应该使用 TourModel 类型在预订模型中创建另一个字段吗?这不会违反“HAS A”关系吗(从技术上讲,预订没有旅行。相反。
也许我想太多了。但我想要求澄清,因为我不熟悉面向对象的设计模式。
public ArrayList<ReservationModel> getReservationByTourID(int tourID) {
ArrayList<ReservationModel> reservations = new ArrayList<ReservationModel>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ArtofTravel", "root",
"2001Space");
String query = "select * from reservations where tour_ID = ?;";
PreparedStatement stmt = con.prepareStatement(query);
stmt.setInt(1, tourID);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
reservations.add(new ReservationModel(rs.getInt("ID"), rs.getInt("tour_ID"),rs.getInt("user_ID"),rs.getString("reservation_Status"),rs.getInt("reservation_payment_status"),rs.getInt("number_of_attendees"), rs.getDate("reservation_create_date")));
}
stmt.close();
rs.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return reservations;
}
解决方案
首先创建一个接口:
public interface Tour {
public ArrayList<ReservationModel> getReservations(String userId);
public ArrayList<TourModel> getTourDetails(ArrayList<ReservationModel>
reservationList);
}
然后在实现类中首先根据用户 id 获取预订详细信息,然后您可以通过此预订列表来获取旅游详细信息。
public class TourImpl implements Tour{
private ArrayList<ReservationModel> reservationModelList = new
ArrayList<ReservationModel>();
private ArrayList<TourModel> tourModelList = new ArrayList<TourModel>();
@Override
public ArrayList<ReservationModel> getReservations(String userId) {
ReservationModel reservationModel = // Your logic to query in Database and
create the Model accordingly;
reservationModelList.add(reservationModel);
return reservationModelList;
}
@Override
public ArrayList<TourModel> getTourDetails(ArrayList<ReservationModel> reservationList ) {
TourModel tourModel = // Your logic to query in Database and create the Model based on reservation id;
tourModelList.add(tourModel);
return tourModelList;
}
}
和模型类来保存数据
public class ReservationModel {
private int reservationID;
private int tourID;
private int userID;
private String reservationstatus;
public ReservationModel(int reservationID, int tourID, int userID, String
reservationstatus) {
this.reservationID = reservationID;
this.tourID = tourID;
this.userID = userID;
this.reservationstatus = reservationstatus;
}
}
public class TourModel {
private int tourId;
private String tourname;
private String tourlocation;
private String country;
public TourModel(int tourId, String tourname, String tourlocation, String
country) {
this.tourId = tourId;
this.tourname = tourname;
this.tourlocation = tourlocation;
this.country = country;
}
}
推荐阅读
- android - 如何设置 textview 的全宽?
- php - 如何在php中提交自定义输入文件类型数据?
- optimization - 在关节坐标中找到 6 DoF 机器人的最远 y 笛卡尔坐标
- java - 创建 bean Mvc Mysql Hibernate Spring 时出错
- python - 使用 Selenium+python 从链接列表中提取 HTML 代码
- android - 通过 observeAsState 在 @Composable 中看不到 LiveData 的变化
- javascript - Reactjs-如何在导航栏上显示用户名
- node.js - 关于MongoDB文件数据建模的讨论
- c - Rijndael S-box in C
- python - 如何针对数据框优化此方法?