2013-08-14 2 views
0

저는 의사가 환자를 들여다보고 환자 Xrays 및 그 Xray에 속한 이미지를 볼 수있는 의사를위한 저널 시스템을 만들고 있습니다.상속에 관한 일반적인 질문입니다.

  • 환자가 한 명 이상일 수 있습니다.
  • 각 환자마다 하나 이상의 Xray가있을 수 있습니다.
  • 각 Xray에 대해 하나 이상의 XrayImage가있을 수 있습니다. 나는 데

    enter image description here

    http://i44.tinypic.com/w9w37d.png

    문제는 내가 항상 정보가 아닌 환자를위한 환자를 물어 결국 것으로 보인다이다 : 여기

클래스 레이아웃입니다. Xray 또는 Patient.Xray.XrayImage. 이 올바른지? 예를 들어

:

환자는 데이터베이스에서 데이터를 검색하고 환자의 모든 필드, 지금까지 너무 좋아를 설정하는 getPatient 방법이있다.

예를 들어이 환자에게 속한 데이터베이스에 세 개의 Xrays가 있고 환자의 getXrayIDs라는 메서드가 있으므로 Patient.Xray의 인스턴스를 3 개 만들고 싶습니다. 그러면 해당 환자에게 속한 모든 XrayID가 검색되고 Patient의 목록에 ID가 저장되며 이러한 ID는 UI에 드롭 다운 상자에 표시됩니다. 드롭 다운 상자에서 ID를 변경하면 Patient.getXray (int XrayID)라는 또 다른 메서드가 호출되고 Xray의 새 인스턴스가 만들어지고 UI에 정보가 표시됩니다.

XrayImages는 getXrayImageIDs라는 메서드가 있다는 점을 제외하면 거의 동일하게 작동합니다.

문제는 클래스 개체 (Patient, Xray, XrayImage)에 대해 작업하고 싶지만 동시에 데이터베이스에서 필요한 것보다 많은 데이터를 검색하고 싶지 않기 때문에 좋은 접근 방법입니까?

적절한 OOP로 프로그래밍하지 않고 데이터베이스에서 검색 한 데이터의 양, 적절한 OOP의 프로그램 및 나중에 데이터베이스 성능을 수정해야한다는 것을 무시해야합니다.

그래서 그 대신 나는이 같은 프로그램을 작성하여야합니다 :

Patient patient = new Patient() 
patient.getXrays() // This one should create a new Xray instance 
       // and Patient should have references to these instances. 
patient.xray[i].getXrayImages // This one should create a new XrayImage 
     //instance and Xray should have references to these instances. 

또 다른 생각 : 드롭 다운 상자 값 (이 경우로) 변경되는이 X 선 및 XrayImage 클래스에서 데이터를 검색하지에서한다 데이터베이스 Xray 및 XrayImage 클래스에 데이터베이스의 데이터를 한 번로드하면 사용자가 정보를 갖게되고 XrayID가 변경 될 때마다 정보를 검색하는 대신 해당 객체를 작동하게됩니까?

+1

"드롭 다운 상자 값을 변경할 때 ... 데이터베이스에서 가져온 것이 아니라 클래스에서 데이터를 가져와야합니다."- 응용 프로그램을 설계하려고 할 때 아키텍처 수준의 위험한 접근 방식이됩니다 (즉, 이 잠재적으로 주제를 벗어난 질문이 어떤 것인가). –

+0

나는 당신의 마지막 생각과 함께 갈 것입니다. 데이터베이스를 4 번 여행하는 대신, 한 번만 여행하고 그 환자와 관련된 모든 것을 가져옵니다. –

+0

또 하나의 참고 사항 : 귀하의 제목은 질문의 본문에 절대적으로 상속이 없으므로 게시물 본문과 연결되지 않습니다. –

답변

2

당신이 말하는 문제는 로딩 전략에 관한 것입니다. 기본적으로 우리는 여기서 lazy loading과 열심히로드를 구별해야합니다 (이 전략의 이름은 소스마다 다를 수 있음). 이름에서 알 수 있듯이 Lazy 로딩은 실제로 사용되는 경우에만 데이터베이스에서 값을로드합니다. 반대로 열정적 인 로딩은 데이터베이스에서 루트 객체가 요청되자 마자 가능한 한 많은 데이터를로드합니다.

이것은 객체 지향 디자인이나 상속과는 아무런 관련이 없습니다.개체를 일방적으로 디자인하고 변경할 필요없이 하나 또는 다른로드 전략을 사용할 수 있습니다.

귀하가 선택한로드 전략은 귀하의 응용 프로그램과 일반적으로 직면 된 유스 케이스에 따라 다릅니다. 일반적으로 그 중 하나 이상은 없습니다.

예를 들어 열렬한로드로 인해 대개 새로운 페이지로드가 시작될 때 사용자가 더 오래 기다리게되지만이 페이지에서 무언가를 클릭하면 즉시 응답이 나타납니다. 게으른 로딩과는 반대입니다. 처음에는 페이지로드가 빠르지 만 페이지를 사용하는 동안 모든 작은 재로드에 대해 새 데이터베이스 액세스가 수행되어야하므로 사용자에게는 항상 작은 대기 시간이 있습니다 각 페이지에 대한 자신의 행동. 당신은 개발자로서 어떤 접근법이 사용자에게보다 편리하다고 느끼는지를 결정해야합니다. 또한 두 가지 방법을 시도해보고 사용자가 응용 프로그램을 테스트하도록하고 응용 프로그램 중 어느 것이 더 편안하게 느껴지는지 사용자에게 피드백을 줄 수 있습니다.

제약 조건으로 인해 하나 또는 다른 전략으로 전환 될 수 있습니다. 예를 들어, 데이터베이스의 큰 계층 구조의 오브젝트를 처리 할 때 열심히로드 전략을 사용하면 로딩 시간이 매우 길어질 수 있습니다. 실제 응용 프로그램에서 1 분 이상로드하는 시간을 보았습니다. 그리고 가져온 모든 정보가 필요 없을 것입니다. 이 경우에는 지연로드를 사용해야합니다.

+0

완벽한 답변. 나는 그것이 OOP와 관련이 있다고 생각했지만 실제로 열망하는 것은 "열망하는로드"또는 "느린로드"를 원한다면 실제로 찾고있는 것이 었습니다. 지금 당장은 데이터베이스에 그다지 많은 데이터가 없으므로 "열망하는 로딩 시간"은 여전히 ​​빠를 것입니다. 완벽한 답변을 주셔서 다시 한 번 감사드립니다! – Jefecito

관련 문제