2009-04-30 4 views
1
당신이 클래스 B와 C의 집합체 인 클래스 A가있는 경우

, 더 나은 그것을 인집계 객체

  • 로드를 위해 전체 개체를 저장하는 B와 C
  • 에 대한 ID 년대를 저장하는 ID 용 B 및 C.
  • 저장소 아이디의 저장에 대향
메소드 B 및 C를 당기는 방법을 제공하기 때문에 B/C를 반대하는 B 및 C (편집 참조에 의해 저장소, 즉 인스턴스화는 B 및 C 개체

퍼포먼스에 따라 다르다고 가정합니다. ormance 요구 사항 및 기타 requierements,하지만 난 단지 일반적인 지침이나 생각을 찾고 있어요.

+0

당신은 COM 집계를 말하고 있습니까? – dirkgently

+0

"상점"이란 무엇을 의미합니까? 개체가 있으면 인스턴스가 있기 때문에 ID가 필요하지 않습니다. 이 데이터베이스는 관련이 있습니까 –

+0

COM을 사용하지 않고 있지만 특정 언어/객체 모델에 묶인 것보다 추상적 인 답변을 찾고 있습니다 – ckarbass

답변

3

메모리에서 실행되는 일반적인 프로그램에서 객체는 거의 항상 참조로 포인터로 저장되므로 B 및 C에 대한 ID를 저장하고 있으므로 사용자가 직접 세부 사항을 다루지 않고 언어가 숨길 수 있습니다 너에게서.

"전체 개체"로드 및 저장은 의심스러운 개념입니다. 나는 당신이 언어에 독립적이되도록 노력하고 있다는 것을 알고 있지만, 실제로 "OO"를 얻는 데 도움이되는 가장 중요한 것 중 하나는 거의 모든 객체가 자신의 라이프 사이클을 가져야한다는 것입니다.

개체 B가 "포함"되어 있고 개체 B에 대한 참조를 개체 C에 전달한 경우 개체 A는 개체 C에 대해 알고 있어야합니다. 객체 A가 객체 C를 알지 못하도록 객체 B의 라이프 사이클을 해제합니다. OO를 만드는 핵심 개념 중 하나입니다.

그렇다면 전체 개체를 저장하는 것이 의미하는 것입니다. 그렇다면 절대로 그렇게하지 마십시오.

데이터베이스 및 기타 저장소에 대해서도 마찬가지입니다. 한 객체가 다른 객체를 파괴 할 책임이 있더라도 다른 객체의 데이터는 거의 포함되지 않아야합니다.

그리고 ("당신이"객체 B와 C를 끌어 와서 "방법"이 아니라고 말한 것 같지만) 다른 객체에서 객체를 전달할 수 있다는 개념 또한 매우 유용하며 일반적으로 아무 문제가 없습니다 하나의 경고와 함께 :

개체는 외부에서 일어나는 일을 제어 할 수 없다는 것을 기억하십시오. 전달할 수도 있고, 세미 무작위 순서로 호출되는 메서드 등일 수도 있습니다. 따라서 가능한 한 객체를 안전하게 유지하는 것이 좋습니다. 무언가가 잘못된 순서로 호출되거나 유효하지 않은 변수가 전달되거나 잘못된 상태로 들어간 경우, 일찍 실패하고 LOUD가 실패하여 프로그래머가 실수로 호출하게됩니다.

불법 상태에 들어가기가 가능한 한 어렵게 만들고 싶습니다. 즉, 개체를 작고 간단하게 유지하고 가능한 한 변수를 최종적으로 만들고 매개 변수 호출 순서가 중요한 곳을 너무 많이 차지하지 않도록하십시오.

+1

작성 시간을내어 주셔서 감사합니다. – ckarbass

+0

미안하지만 조금 질문을 놓쳤습니다. 내가 사용하지 않는 특정 언어/툴킷에 적용되는 약간 다른 내용을 언급하는 느낌이 들었습니다. –

+0

아니, 나는 당신이 상당히 잘 대답했다고 생각한다. 이것들과 같은 질문을하고 맑은 마음을 갖는 것은 어렵다. – ckarbass

1

상황에 따라 다릅니다. 개체가 메모리에 남아 있으면 AO에 B와 C가 포함되도록하는 것이 훨씬 쉽습니다. 개체를 보존해야하는 경우 A가 ID를 저장하는 것이 쉽고 효율적입니다. B와 C

1

상황에 따라 다르다 (당신이 데이터를 직접뿐만 B와 C하지 필요한 경우 그 방법은, 데이터베이스, 파일 등의에서 B와 C를 당길 필요가 없습니다)

B와 C가 무거워서로드 및 구성에 비용이들 경우, 필요할 때까지로드 지연을 지연하는 것이 좋습니다 (Lazy Initialize).

간단하고 가벼운 어쩌면 단지 언제든지 구성하고 싶다면 ID를 얻으십시오.

2

전체 개체 (및 해당 하위 개체)를 기본 방식으로로드하고 저장하는 경향이 있습니다.

때때로로드 시간이 오래 걸리거나 메모리 공간이 커질 수 있습니다. 그런 다음로드 된 모든 객체가 실제로 사용되었는지 또는 많은 객체가 생성되고 액세스되지 않았는지 여부를 결정해야합니다.

모든 개체를 사용하는 경우 하위 집합을로드하고 처리 한 다음 다음 하위 집합을로드하여 모든 것을 메모리에 저장하거나 더 많은 메모리를 구입하여 사용 가능하게 만드는 데보다 창의적인 방법이 필요합니다. 귀하의 앱에.

많은 개체가 사용되지 않는 경우 가장 좋은 방법은 필요한 경우 하위 개체를 지연로드하는 것입니다.