2011-10-17 3 views
4

나는 당신과 공유하고 싶은 디자인 딜레마가있다. 나는 사람을 나타내는 다양한 멤버 변수가있는 클래스가있다. 구성원 중 하나는 좌표에있는 사람의 집 위치입니다. 이 클래스는 MySQL 데이터베이스에서 유지됩니다.자바 디자인/객체 지향 디자인 문제

내가 가지고있는 문제는 지정된 사람과 기록 된 거리에서 특정 반경 내에있는 사람들의 목록을 갖고 싶다는 것입니다.

필자는 결과를 사람의 세부 정보 및 핀 지점으로부터의 거리와 함께 반환하는 SQL 쿼리를 성공적으로 만들었습니다. 그러나 지금 문제가 있습니다 :이 데이터를 Java로 저장하는 가장 좋은 방법은 무엇입니까? 거리가 person 객체와 관련이 없기 때문에 person 클래스의 멤버 안에 거리를 저장하는 것은 좋지 않습니다. 첫 번째 열에 사람을 보유하고 다른 한 열에 데이터를 보유하는 2 차원 배열을 만드는 것에 대해 생각했습니다. 또 다른 옵션은 사람과 거리의 두 값으로 컨테이너 객체를 만드는 것입니다.

그렇게하는 것이 가장 효율적이고 "객체 지향적 인 방법"이라고 생각하십니까?

답변

6

Map<Person, Double>에 대한 직업처럼 보입니다.

+0

동의합니다! 그것은 절대적으로지도에 적합합니다. 이 클래스를 특정 클래스에 캡슐화 할 수 있습니다. 데이터 액세스 개체 (DAO)가 IMO와 관련하여 적합합니다. – PhD

+0

새 데이터 구조가 유지되어야하는지 여부는 원래 게시물에서 분명하지 않습니다. – toto2

+0

그것 persissted해야하지 않습니다. – stdcall

-1

사람, 주소 및 거리가 고정되어있는 객체를 만들면 (고정되어 있다고 가정하면) 해당 객체의 거리에 대해 Comparable을 구현할 수 있습니다. 그러면 정확한 위치에서 특정 거리에있는 물체 목록을 쉽게 얻을 수 있습니다.

+0

정확한 점은 고정되어 있지 않으며 개체는 데이터베이스에 있습니다. db와 관련된 객체 만 수신하므로 비교할 필요가 없습니다. – stdcall

1

나는 Person이 거리이고 거리가 값인 Map<Person, Integer>을 제안합니다.

다른 옵션은 구아바의 표 클래스 인 Table<Person, Point, Integer> 일 수 있습니다. 거리를 여러 지점으로 유지하려는 경우이 옵션이 적용됩니다.

0

검색 결과를 Person과 정확하게 모두 포함 된 개체로 저장할 수 있으며 결과 집합을 얻은 후 거리를 결정할 수 있습니다.

2

나는 거리와 사람 정보를 담는 연결 클래스를 제공 할 것이다.

class PinPoint 
{ 
    private double x; // Assuming 
    private double y; 

    public List<Connection> getConnections(double radius) 
    { 
     // Return a list of connections with the person and distance information 
    } 
} 

class Connection 
{ 
    private double distance; 
    private Person person; 
} 

그런 식으로 나중에 연결 클래스에 더 많은 것을 추가 할 수 있습니다. 당신이 그것을 필요로하지 않는다면 간단한지도로도 충분할 것입니다.

0

Person에 대한 참조를 유지하는 PersonGeoInfo 클래스와 적합하다고 생각되는 다른 지리 정보를 가질 수 있습니다.

0

모든 관련 변수와 검색어로 채워진 인근 사람들의 간단한 배열과 같은 데이터 구조가있는 PinPoint 클래스를 만드십시오.

그러면 PinPoint 객체의 인스턴스를 현재 작업에 가장 유용한 데이터 구조로 배치 할 수 있습니다.

0

Pin 또는 Marker라는 별도의 개체를 만들어야합니다. 그런 다음 Person과 Marker 사이의 중간에 many-to-many 테이블/객체가 필요합니다. 그것은 PersonToPin이라고 불릴 수 있고 person, pin, distance 속성을가집니다.

그러면 Person에 Pin이라고하는 Set과 Pin에 persons라고하는 세트를 가질 수 있습니다.

이 모든 것들을 직접하는 것은 정말 고통 스러울 수 있습니다.하이버 네이트 (Hibernate) 나 자바 객체에 집중할 수있는 다른 퍼시스턴스 라이브러리 (persistence library)를 사용할 것을 권한다. 라이브러리는 테이블을 생성하고 데이터베이스를 업데이트 할 것이다.