Моделирование событий и резервирования в классе JAVA — лучший подход к проектированию

#java #oop #design-patterns #web-applications #javabeans

#java #ооп #шаблоны проектирования #веб-приложения #javabeans

Вопрос:

Я довольно новичок в Java и создаю базовую систему бронирования туров. У меня есть класс tour, который выглядит следующим образом.

 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;
  

Теперь, чтобы получить все резервирования на основе идентификатора пользователя, у меня есть метод в моем классе DOA, который возвращает мне все резервирования на основе поля идентификатора пользователя. однако, как я могу также получить всю информацию о туре, для которого зарезервировано?

Должен ли я создать другое поле в модели резервирования, используя тип TourModel? Разве это не противоречило бы отношению «ИМЕЕТ» (у резервирования технически нет тура. все наоборот.

Возможно, я слишком много думаю об этом. но я хотел попросить разъяснений, поскольку я не знаком с шаблонами объектно-ориентированного проектирования.

 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;            
}
  

Комментарии:

1. вы можете рассматривать TourModel как интерфейс, а не класс, поэтому в вашем классе реализации вы можете реализовать свою логику для получения информации о туре.

2. Мне нужно одновременно получить резервации и тур, для которого они предназначены. Как это можно сделать

Ответ №1:

Сначала создайте интерфейс:

    public interface Tour {
    public ArrayList<ReservationModel> getReservations(String userId);
    public ArrayList<TourModel> getTourDetails(ArrayList<ReservationModel> 
      reservationList);
   }
  

Затем в классе реализации сначала получите сведения о резервировании на основе идентификатора пользователя, а затем вы можете передать этот список резервирования, чтобы получить сведения о туре.

   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;
    }
}