2013-01-09 3 views
0

TruckStop에는 TruckClass 목록과 Weigh()라는 메서드가 있습니다. TruckClass는 Weigh()를 호출해야합니다. 다음 두 디자인의 장점/단점은 무엇입니까? TruckClass에 TruckStopClass에 대한 참조가 있고 MyTruckStopClassReference.Weigh() Vs. TruckClass는 TruckClass를 발생시킵니다. TruckStopClass가 처리하는 대규모 이벤트입니다..Net 디자인 장점/단점 : 서로를 참조하는 개체 대. 이벤트?

서로 참조하는 개체가 GC에 영향을주지는 않지만 각 TruckClass에 추가 참조가 필요하다는 것을 읽었습니다. 동전의 반대편에서, 나는 이벤트 핸들러가 참조가된다는 사실을 읽었으며, 만약 당신이 그들을 unwire하지 않는다면 문제를 일으킬 수있다. 이 문제에 대한 찬성/반대/모범 사례/의견에 대한 약간의 명확성이나 논평은 인정 될 것입니다.

+0

하나 이상의 저울과 많은 트럭이있는 트럭 정류장이 하나만 있다고 가정합니다. 가능한 한 현실에 충실하십시오. 트럭 정류장이 저울을 관리하므로 TruckStop 클래스는 트럭에서 GetWeigh()를 호출해야합니다. 트럭이 스케일을 사용할 수 있는지 또는 자신의 직업이 알지 못하는지 알 수 없으므로 다른 방향으로 갈 수는 없습니다 –

+0

Truck/TruckStop은 구성 예입니다. 트럭 운전자가 무게를 달기로 결정하기 전에 먼저 연료를 얻도록 결정할 수 있습니다. 나는 "자식 클래스"가 "부모 클래스"의 메서드 호출을 트리거해야하는 상황에서 이벤트를 발생시키는 개체 대 서로 참조하는 개체의 장점/단점에 더 관심이 있습니다. – N0Alias

+0

아이는 부모가 될 필요가 없을 때 부모와 연결되어 있다는 것입니다. 그들은 별도의 책임을지며 그렇게 대우 받아야합니다. 가비지 컬렉터에 대한 논의는이 시점에서 과잉입니다. –

답변

-1

내 솔루션은 TruckClass 및 Weigh() 메서드를 모두 TruckStop 클래스에 포함시키는 것입니다. 뭔가 같은이 같은

Class TruckStop 
    Class Truck 
     (private attributes) 
     (public properties) 
    End Class 

    Public Shared Function Weigh(truck) as Weight 
     (code) 
    End Function 
End Class 

참조 :

weight = thisTruckStop.weigh(thisTruckStop.Truck(truckNum)) 
0

을 지금까지 두 가지 방법은 내가 두 클래스 개별 인이 아닌 이벤트에 의해 서로 연결 향하다하는 경향이있을 거라고 우려로/핸들러. 이 이론적 인 경우 나는 계량 함수를 모듈 또는 트럭 정지 클래스의 공유 함수 안에 넣고 트럭을 매개 변수로 사용하게 할 것입니다.

이벤트 경로로 이동하려는 경우 한 클래스가 별도의 클래스에서 발생한 이벤트를 처리하는 것이 매우 바람직한 방법은 아닙니다. 그리고 저의 개인적인 견해로는 만약 제가 그렇게했다면 두 클래스가 너무 밀접하게 결합되어서 OOP 디자인을 도살 한 것처럼 느끼지 않을 것이므로 매우 더럽다고 느낄 것입니다.

여러 위치에서 동일한 양식을 호출 할 수있는 프로그램을 처리 할 때 양식 초기화를 통합하기 위해 과거에 한 일은 양식을 시작할 수있는 모든 가능한 장소가 공통 컨테이너로 이벤트를 발생시키는 것입니다. 기본 폼이나 컨테이너 클래스 또는 그 라인을 따르는 무언가를 찾은 다음 해당 부모 폼/클래스/컨테이너에서 모든 자식에서 오는 각 이벤트를 처리합니다. 이것에 대한 좋은 점은 폼 이니셜 라이저를 호출하는 하나의 하위 프로 시저 (또는 함수를 정의하고자 함)에 의해 처리되는 모든 이벤트를 가질 수 있다는 것입니다. 그리고 폼이 어떻게 생성되고 변경되는지를 변경해야 할 필요가있는 경우 한 곳.

이 예제는 귀하의 예제와 관련이 없지만 예를 약간 변경하고 두 클래스 모두 차량의 무게를 측정 할 수 있다고 가정하면 액세스 포인트를 트럭 정지 계량 기능으로 중앙 집중화하면 프로젝트를 관리하게됩니다 그만큼 쉽게.

+0

답변 해 주셔서 감사합니다. 후속 조치로서 양식/버튼 관계도 OOP 디자인을 도살 한 것입니까? Button은 Form의 Controls 속성의 일부이며 Click과 같은 이벤트를 발생 시키지만 별도의 클래스입니다. – N0Alias

+0

@NoAlias ​​: 나는 항상 어떤 contol과 부모 형태를 특별한 경우로 생각해 왔지만, 뒤로 물러나서 그것들을 독립적 인 클래스로 보았을 때 그것은 패턴에 적합합니다. 나는 클래스가 이벤트를 처리하는 클래스에서 이벤트를 발생시킬 때 그 라인이 그려진다 고 말할 것이다. 따라서 버튼과 폼의 경우 OOP 테스트를 통과하게됩니다. 왜냐하면 버튼은 아무 것도 클릭을 듣지 않으면 아무 것도 클릭하지 않을 때마다 실행됩니다. 그래서 "트럭"에서 이벤트를 듣는 것이 뭔가 듣는 것에 의존하지 않는다면 나쁜 일은 아닙니다. –

관련 문제