2013-04-24 2 views
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 

바라건대, 당신은 내가 구현하기 위해 노력하고있어의 일반적인 생각을, 하지만 나는 그것이 올바른지 확실하지 않습니다. 기본적으로 클래스에서 객체를 생성하고, 생성자는 자동으로 데이터를 다운로드하고 적절한 객체 배열에 저장합니다.

메인 프로그램은 사용자가 항공편, 날짜 등

겠습니까이 문제와 관련된 정보를 찾기 위해 효과적으로 메인 프로그램에서이 개체를 조회 할

비행 정보 등을 조회 할 수 있도록하기 위해 만든 것 데이터를 직접 액세스하지 않으려 고 제한된 대역폭을 가지므로 어떤 종류의 로컬 캐시 된 버전을 구현해야 할 필요가 있다는 것을 염두에 두어 이러한 유형의 기능을 구현하는 가장 좋은 방법이 될까요?

각 메소드의 실제 기능과 매개 변수를 호출하는 대신 클래스/생성자/메소드의 실제 구성에 더 관심이 있습니다.

희망이, 어떤 포인터가 많이 감사 문제의 나의 초기 분석을 향상시킬 수있는이 같은 현실 세계의 예를 많이도 모든 참조 사이트 될 것이다

감사합니다,

+0

각 비행을 나타내는 "Entity"클래스를 만들고 데이터를 다운로드하고 비행 엔티티의 목록을 반환하는 "Service"클래스를 만듭니다. 그런 다음 로컬로 저장할 수 있습니다. 아마도 Hibernate와 같은 일부 ORM을 사용하여 DB에 저장하거나 단순히 JSON 또는 XML로 변환하여 파일을 로컬에 저장할 수 있습니다. – CodeChimp

+1

데이터 집합의 이름을 가진 클래스의 이름이 잘못되었습니다. 'FlightData'는 현명한 선택입니다. 'FlightData.Airline'은 합리적인 중첩 열거 형입니다. (당연히 'BritishAirways'는 열거 집합의 멤버입니다.) 'FlightData.Source '또는'FlightDataSource '(enum을 입력으로 사용)는 합리적인 데이터 액세스 클래스입니다. – alphazero

+0

작업을 나눌 수 있습니다. 웹 사이트에서 데이터를 주기적으로 다운로드하고이를 자신의 로컬 데이터 저장소로 변환하는 프로세스를 한 번 가지면 클라이언트 프로세스가 해당 로컬 데이터 저장소에 연결하고 해당 로컬 데이터 저장소에서 읽을 수 있습니다. 그러면 고객은 외국 시스템에서 다운로드하는 것에 관심을 가질 필요가 없습니다. 그리고 JVM 프로세스가 다시 시작될 때 데이터 캐시를 유지 관리합니다. – Charlie

답변

3

방법을 의미한다 윤곽은 서비스에 더 적합하게 보입니다.

아이디어는 다음과 같습니다. 은 우려 사항을 분리하고 싶습니다..

하나의 관심사는 데이터를 모델링하는 것입니다. 즉, 데이터를 조작하는 데 의미가있는 메소드를 사용하여 데이터 용 컨테이너를 만드는 것을 의미합니다. 기본 클래스 FlightData과 서브 클래스 BritishAirwaysFlightData을 만들 수 있습니다 (데이터가 항공사에서 항공사로 변경되지 않으면 일반 개체 만 필요함). 귀하의 방법을 살펴보면 AirportFlight에 대한 수업도 가질 수 있습니다.

또 다른 걱정거리는 데이터를 가져 오는 것입니다. 그래서 당신은 아마 아무것도하지 않고 데이터 소스와 상호 작용하는 클래스를 원할 것입니다. 이러한 클래스는 일반적으로 데이터 액세스 개체 (DAO)라고합니다.

서비스는 데이터 액세스 클래스와 데이터 모델 클래스를 함께 사용하여 작업 단위를 수행하는 또 다른 클래스입니다.

그래서 getSourceAirports 방법에 대해 생각해 봅니다. 비행을 시작한 모든 공항을 얻는 것을 의미합니다. Flight이라는 데이터 모델이있는 경우이 클래스는 departureAirportarrivalAirport 필드 (기타도 포함)를 가질 것이라고 생각할 수 있습니다. 소스 공항을 얻으려면 Flight 테이블 (Flight 클래스에 해당)에서 발견 된 모든 고유 출발 공항에 대한 데이터 소스를 쿼리하십시오.

2

당신이 제안하는 방식대로 작동하지만 권장하지는 않습니다. 저울링이 잘되지 않습니다. 데이터를 한 번 다운로드한다는 개념에 동의하지만 그렇다고해서 리치 도메인 모델을 구현할 수없고 적절한 계층화 된 아키텍처를 가질 수는 없습니다. 난 당신이 FlightData에 대한 일반적인 클래스가 제안했다 시작으로

:

(귀하의 예제에서 BA)를 특정 사업자에 대한 비행에 대한 정보를 포함하고
public class FlightData { 
    private FlightOperator operator; 
    ... 
} 

. 여기

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

계층화 된 아키텍처에 정성 들여 또 다른 질문입니다 :

DAO and Service layer design

+0

도메인 모델에 대한 의견에 동의하기 때문에 +1했습니다. 그러나 업계의 많은 사람들은 DAO가 현재 안티 패턴이라고 말하고 있습니다. – CodeChimp

+0

나는 대부분의 DB 기반 응용 프로그램에 동의하는 경향이 있지만, 점점 더 불필요 해지고 있습니다. 이런 상황에서 비즈니스 논리에서 검색 메커니즘을 제거하는 것은 여전히 ​​매우 유용하다고 생각합니다. – StuPointerException

1

클래스의 개념과 고투 그런 다음 응용 프로그램의 문제를 분리하는 서비스와 DAO 레이어를 만들 수 있습니다 객체 지향 패러다임을 배우는 자연스러운 부분. 진정한 입문 수준이라면 ORM이나 Hibernate 또는 Entity/Service 클래스에 대해서는 아직 걱정하지 않을 것입니다.

만들려는 종류의 로드맵을 개발하려면 프로젝트에 대해 신중하게 생각하십시오. 디자인과 관련된 것들을 열거하십시오. 항공편, 운항 기사, 비행 시간. 정확하고 포괄적 인 목록을 얻는 것이 가장 유용하고 확장 성있는 클래스를 작성할 수 있기 때문에 사물 목록을 개발하는 것이 클래스 디자인에서 가장 중요한 첫 번째 단계입니다.

일단 사물 목록이 있으면 사물이 어떻게 구성되어 있는지 신중하게 생각하십시오. 어떤 것들이 혼자 있고 의존적입니까? 비행 시간은 항공편에 따라 다릅니다. 의존하는 것, 예를 들면. 비행 시간은 일반적으로 클래스의 속성 또는 필드입니다. 독립적 인 일들, 예. 비행, 종종 클래스입니다. 프로젝트에서 사물 간의 관계를 발전시키는 것은 실제로 수업 설계에서 매우 중요한 단계입니다. 올바른 방법으로하면 일이 훨씬 쉬워집니다.

앞에서 보았 듯이 프로젝트의 명사는 클래스와 클래스 필드 또는 속성입니다. 그런 다음 프로젝트에서 수행 할 작업을 상상해보십시오. 동사 (예 : createScheduleList는 자신의 메서드이며 작동하는 클래스에 작성됩니다 (또는 특정 사물 (또는 객체)의 필드 나 속성에 의존하지 않으면 정적 메서드로 작성됩니다).

이것은 매우 노보시 한 충고이지만, 나는 훌륭한 수업 설계 기초부터 시작하는 것이 얼마나 중요한지 충분히 강조 할 수는 없습니다. 훌륭하고 체계적인 수업을 통해 전반적인 프로젝트를 훨씬 더 간단하게 구현할 수 있습니다.

관련 문제