5

我正在寻找一个测试应用程序,它可以检查来自航空公司提供商的各种航班信息,我正在努力解决类和方法的概念以及要创建哪些类和方法。我目前的思路是这样的: 数据是从网站下载的,由于数据量大,我只想下载一次。我目前的想法是:

班级

BritishAirwaysFlightData()

构造函数

BritishAirwaysFlightData // Used to download the BA Flight database and store in the object (Assumging his is only small i.e. 500kb)

方法

getStartDate(String source_airport, String dest_airport) // Takes source and destination airport and return date when flights start
getEndDate(String source_airport, String dest_airport)   // Takes source and destination airport and return date when flights finish
getDestAirports(String source_airport)                   // Takes source airport name and returns a list of destinations
getSourceAirports(String dest_airport)                   // Takes source airport name and returns a list of sources
getNumofDestinations()                                   // Returns total number of destinations

希望您能大致了解我正在尝试实现的内容,但我只是不确定它是否正确。我基本上会从类创建一个对象,然后构造函数会自动下载数据并存储在某种合适的对象数组中。

将创建一个主程序以允许用户查询航班信息等。

它将有效地从主程序中查询此对象,以查找有关航班、日期等的特定信息。

考虑到我不想直接访问数据并且我的带宽有限,因此需要实现某种本地缓存版本,这是否是实现此类功能的最佳方式?

我更关心类/构造函数/方法的实际构成,而不是每个方法和调用参数的实际功能。

希望这是有道理的,任何指针都将不胜感激,任何参考网站也有很多像这样的现实世界的例子,这可以改善我对问题的初步分析,

谢谢,

4

3 回答 3

3

您概述的方法似乎更适合服务

这个想法是这样的:你想分离你的关注点

一个问题是对数据进行建模。这意味着为您的数据创建一个容器,使用对数据进行操作有意义的方法。如果有意义,您可以创建一个基类FlightData和一个子类(如果数据没有从航空公司更改为航空公司,那么您只需要一个通用对象)。查看您的方法,为andBritishAirwaysFlightData设置一个类可能是有意义的。AirportFlight

另一个问题是获取您的数据。所以你可能想要一个除了与数据源交互之外什么都不做的类。这些类通常称为数据访问对象 (DAO)。

该服务是另一个类,它将一起使用数据访问类和数据模型类来执行一个工作单元。

所以考虑一下方法getSourceAirports,我假设它的意思是“获取航班始发的所有机场”。如果您有一个名为 的数据模型Flight,您可以设想该类将具有departureAirportarrivalAirport字段(以及其他字段)。要获取源 Airports,您将在数据源中查询 Flight 表(对应于 Flight 类)中找到的所有唯一的 leaveAirports。

于 2013-04-24T13:01:37.473 回答
2

您建议的方式可行,但我不推荐它,它的扩展性很差。我同意一次下载数据的概念,但这并不意味着您不能实现丰富的域模型并拥有适当的分层架构。

首先,我建议您为 FlightData 提供一个通用类:

public class FlightData {
    private FlightOperator operator;
    ...
}

其中包含特定运营商的航班信息(在您的示例中为 BA)。然后,您可以创建一个服务和 DAO 层来分离应用程序的关注点:

public interface FlightDataService {
    public FlightData find(FlightOperator operartor);
    public List<FlightData> find(List<FlightOperator> operartors);
    ...
}

这是另一个详细阐述分层架构的问题:

DAO 和服务层设计

于 2013-04-24T13:03:58.807 回答
1

与类的概念作斗争是学习面向对象范式的一个自然部分。如果您真的处于入门级别,那么我现在还不会担心 ORM 或 Hibernate 或实体/服务类。

为了帮助制定您想要创建的类的路线图,请仔细考虑您的项目。列举你的设计中涉及的事物的种类,例如。航班、航班运营商、航班时间。制定事物列表确实是类设计中最好、最重要的第一步,因为获得准确而全面的列表将使您能够编写最有用和可扩展的类。

一旦你有了一份清单,请仔细考虑这些事情是如何组织的。哪些事情是独立的,哪些是依赖的,例如。飞行时间取决于航班。依赖的东西,例如。飞行时间,通常是类的属性或字段。独立的事物,例如。航班,经常是班。开发项目中事物之间的关系确实是类设计中至关重要的一步。做对了会让事情变得更容易。

如您所见,项目(事物)中的名词是类和类字段或属性。然后想象你想让你的项目做什么。动词,例如。createScheduleList 是您的方法,它们被写入它们所操作的类中(或者如果它们不依赖于特定事物(或对象)的字段或属性,则被编写为静态方法)。

可以肯定的是,这是非常愚蠢的建议,但我不能足够强烈地强调从良好的类设计基础开始是多么重要。良好、组织良好的课程使您的整个项目的实施变得更加直接。

于 2013-04-24T13:19:53.200 回答