2010-06-03 6 views
1

데이터베이스 업그레이드 응용 프로그램에서 작업하고 있습니다. 업그레이드 프로그램은 데이터베이스의 스키마를 업데이트합니다 (SQL 문을 실행하여 새 열 추가, 열 이름 바꾸기, 새 테이블 추가, 기존 데이터베이스에 새 뷰 추가). 사용자가 버전 1.0에서 2.0으로 업그레이드하려면 객체 팩터 리에서 "Upgrader"객체를 가져오고 각 "Upgrader"의 "Execute"메소드가 호출됩니다. 응용 프로그램의 GUI에는 진행 막대가 있으며 업 그레 이드 객체가 SQL 문을 수행 할 때마다 진행 막대가 증가합니다.C# ProgressBar 디자인 패턴

  while (!version.Equal(CurrentVersion)) 
      { 

       IUpgrader myUpgrader = UpgraderFactory.GetUpgrader(version); 

       myUpgrader.Execute(UpgradedFile,progressbar); 

       version.Increment(); 
      } 

내 질문은 매우 간단합니다. 업그레이드 프로그램 개체가 어떻게 진행률 표시 줄과 통신해야합니까? 위의 코드에서 업 그레 이드 개체는 progressbar에 직접 액세스 할 수 있지만이 더 나은 디자인 패턴을 수행하는 더 나은 방법이 있는지 궁금합니다.

감사합니다, 셉

답변

3

아마 함께 진행 표시 줄 작업에 대한 인터페이스 (C#을 샘플)을 둘 것은 :

interface IProgressBar 
{ 
    int MinValue { get; set; } 
    int MaxValue { get; set; } 
    int Value { get; set; } 
} 

은 그 때 나는 업그레이 더 객체가 인터페이스 유형의 매개 변수를 가지고있을 것입니다. 마지막으로 인터페이스를 구현하는 클래스를 만들고 진행률을 시각화하는 데 사용하는 진행률 막대 구성 요소에 대한 참조를 보유합니다.

그런 식으로 업그레이드 프로그램간에 긴밀한 결합이없고 진행 상황을 시각화 할 수 있습니다.

1

구현하려면 업그레이드 프로그램에서 제공되는 IUpgrader에 ProgessEvent를 추가합니다. gui는 해당 이벤트에 eventlisteners를 추가하고 그에 따라 progessbar를 업데이트 할 수 있습니다.

많은 응용 프로그램이 싸우고 있습니다. 바쁜 응용 프로그램이 여전히 살아 있다는 환상을 유지하는 타이머를 사용하여 진행률 표시 줄을 향상시킵니다.