최근 XE2 에서 패치되었는지 모르겠지만, 투게더가 Delphi 에 포함되고 난 이후(2006부터~) 지금까지 이 소스 버그는 사라지지 않고 있다. 나야 UML 작성시 투게더를 사용하고 있지 않아 그냥 수정한 소스를 쓰고있지만, 만약 Pattern Organizer 에 등록된 Observer 패턴을 사용하여 소스를 생성하는 경우라면 네이티브 환경에서 사용시 AV 에러가 발생한다.
패치한 소스는 다음과 같다.
IObserver = interface
procedure UpdateObserver(ASubject: TSubject); // 폼에서도 사용할 수 있게 메소드명을 변경함
end;
TSubject = class
strict private
var
FObservers: TList;
strict protected
procedure NotifyObservers;
public
constructor Create;
procedure Attach(const AObserver: IObserver);
procedure Detach(const AObserver: IObserver);
end;
// 투게더에 의해 생성되는 코드에 오류가 있으므로,
// Attach, Detach, NotifyObservers 메소드를 수정하여야함.
procedure TSubject.Attach(const AObserver: IObserver);
begin
FObservers.Add( Pointer(AObserver) );
end;
procedure TSubject.Detach(const AObserver: IObserver);
var
idx: Integer;
begin
idx := FObservers.IndexOf( Pointer(AObserver) );
if idx <> -1 then
begin
FObservers.Delete( idx );
end;
end;
procedure TSubject.NotifyObservers;
var
Current: Pointer;
i: Integer;
begin
for i := 0 to FObservers.Count - 1 do
begin
Current := FObservers.Items[i];
IObserver( Current ).UpdateObserver( Self );
end;
end;
이 버그가 한두해도 아니고 계속 유지되는 것은 아무래도 해외나 국내나 투게더를 사용하지 않는다는 의미가 아닐까? 나아가서 디자인 패턴 자체를 안쓰고 있다는 얘기인 것 같기도 하고... 그럼 난 왜 quality central 에 버그 등록을 안했느냐?^^ 이 놈이 언제 리포팅되는지 정말 궁금해서였는데... 그것이 역으로 투게더와 디자인 패턴의 사용 빈도 증가에 대한 반증이라는 생각이 들었기 때문이다. 뭐, 영어 때문이 아니냐고 물으신다면.... 그것도 빙고~ ^^
반응형
'개발일지 > 아키텍트' 카테고리의 다른 글
POSA2, Double-Checked Locking Optimization 패턴 (3) | 2012.04.09 |
---|---|
POSA2, Scoped Locking, Strategized Locking 패턴 (0) | 2012.04.05 |
Proactor with EPOLL, SELECT (2) | 2012.03.15 |
Delphi 에서 Leader-Follower 패턴 구현 (0) | 2012.03.14 |
FPC 에서 Leader-Follower 패턴 구현 (0) | 2012.03.09 |
댓글