문제

나는 지난 3 년간 취미/직업 수준에서 델파이를 배우고 있습니다. 나는 이제 공포와 창피로 초기 코드를 되돌아 볼 수있는 시점으로 발전했다는 것을 기쁘게 생각합니다. 그래서 나는 이제 초기 앱 중 일부를 살펴보고 다시 작성/ 리팩토링하고 있습니다.

내가 벗어나려고하는 나쁜 습관 중 하나는 다른 유닛의 한 형태의 구성 요소에 액세스하는 것입니다. 이것을 시행하기 위해, 나는 정보 숨기기 방법으로 프레임을 사용하는 것을 실험 해 왔습니다. 따라서 구성 요소가있는 양식을 갖는 대신 모든 양식 구성 요소를 유지하는 프레임을 만들고 프레임을 양식에 배치하고 프레임 선언을 개인 선언으로 이동하고 있습니다.

type
  TMyForm = class(TForm)
   private
    MyFrame: TMyFrame;
    procedure SetTimeDate(const Value: TMyItem);
    function ReadTimeDate:TMyItem ;

그런 다음 양식 초기화 섹션에 프레임을 등록합니다

initialization 
begin
RegisterClasses([TMyFrame])

그런 다음 프레임과 구성 요소에 액세스 할 수있는 양식 장치의 공개 섹션에서 필요한 속성을 선언합니다.

  public
    property TimeDate: TOverlayItem  read ReadTimeDate  write SetTimeDate;

또한 프레임을 사용하여 종종 반복되는 구성 요소 그룹을 통합하고 있습니다.

이것은 내가 원하는 목적 (MyFrame 및 그 구성 요소 숨기기)에서 작동하는 것 같습니다. 그러나 다른 사람 이이 방법에 대한 경험이 있습니까?

프레임을 사용하는 단점이 있습니까? 실제로이 작업을 수행함으로써 어떤 혜택을 얻고 있습니까? 프레임 내에서 중첩 프레임을 사용하는 데 문제가 있습니까? 델파이에서 프레임 사용에 대한 모범 사례 가이드가 있습니까? 델파이에 숨어있는 GUI 정보와 관련하여 동일한 효과를 달성하는 더 나은/ 쉬운 방법이 있습니까?

HMCG

도움이 되었습니까?

해결책

UI 계층에 여전히 많은 논리가있는 것 같습니다. 양식/패널에는 많은 가치 속성이 없어야합니다 (대화 상자 제외).

MVC 패턴을 읽는 것보다 더 많은 구조를 원한다면.

모든 것을 말하면, 프레임은 GUI를 구성하는 좋은 방법이 될 수 있습니다. 모든 것과 마찬가지로 과도하게 사용하지 마십시오.

다른 팁

나는 일반적으로 복잡한 재사용 가능한 비트를 만드는 프레임을 좋아합니다. 대부분의 경우 화면을 구성하는 정말 깨끗한 방법이 될 수 있다고 생각합니다. 그러나 언급 한 바와 같이 헨크 홀터 맨 화면과 프레임에는 UI의 기능과 관련된 논리 만 포함되어야하며 비즈니스 논리에 대해 가능한 한 무지해야합니다.

UI에 몇 가지 포인트가 프레임과 정보를 숨기고 있습니다.

  1. 논의 stackoverflow에 대한 또 다른 질문에서 프레임에서 이벤트 핸들러를 사용할 때주의해야합니다.
  2. 프레임에는 여전히 게시 된 속성이 많으며 서로의 비트와 부적절하게 바이올린을 쓸 수있는 양식 문제를 실제로 해결하지 못합니다. 당신이 그것을하지 않더라도, 코드가 허용되면 누군가는 결국 그대로하지 말아야 할 코드를 작성합니다. 나는 항상 글로벌 양식 변수 델파이를 코드로 제거하고 종종 래퍼 객체를 작성하거나 UI에 대한 제어 된 액세스를 제공하는 인터페이스를 구현합니다.

따라서 다음과 같은 코드를 갖는 대신 :

ClientForm := TClientViewForm.Create(Self);
try
  ClientForm.Client := MyClient;
  ClientForm.ShowModal;
finally
  ClientForm.Free;
end;

나는 일반적으로 사람들이 어떤 종류의 글을 쓰도록 강요합니다.

ClientViewer := TClientViewer.Create(MyClient);
try
  ClientViewer.Show;
finally
  ClientViewer.Free;
end;

또는

TClientViewer.ShowClient(MyClient);

클래스 방법 ShowClient가 첫 번째 목록에 표시된 비트를 처리하도록합니다. 이렇게하면 호출 코드는 양식 포인터를 수신하지 않으며 래퍼 클래스에서 구체적으로 제공되지 않는 비트를 터치 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top