Рекомендации по объединению нескольких классов

В приведенном ниже фрагменте у меня есть два класса с одинаковыми именами процедур. Код внутри этих процедур существенно отличается. Можно ли объединить эти классы, чтобы облегчить обслуживание и будущие улучшения, или я делаю это приемлемым образом?

type
  TMFRCore = class
    private
      FGridMain: TNextGrid;
      FGridSummary: TNextGrid;
    public
      constructor Create(Grid: TNextGrid; SummaryGrid: TNextGrid);
      destructor Destroy; override;
      procedure SetRowColour(Grid: TNextGrid; Row: Integer; Color: TColor; Start: Integer = 0);
      procedure OnSummaryDblClick(Sender: TObject);
      function GetSectionId(Section: String): Integer;

      property GridMain: TNextGrid read FGridMain write FGridMain;
      property GridSummary: TNextGrid read FGridSummary write FGridSummary;
  end;

type
  TMFRDates = class(TMFRCore)
    public
      procedure UpdateSummary;
      procedure UpdateMain(const sAircraft: string);
  end;

type
  TMFRHours = class(TMFRCore)
    public
      procedure UpdateSummary;
      procedure UpdateMain(const sAircraft: string);
  end;

Я инициализирую эти классы следующим образом;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  MFRHours := TMFRHours.Create(gridHours, gridHoursSummary);
  MFRDates := TMFRDates.Create(gridDates, gridDatesSummary);
end;

person Dan    schedule 09.06.2013    source источник


Ответы (1)


Вы можете объявить методы как виртуальные (и, возможно, абстрактные) в базовом классе, чтобы воспользоваться преимуществами динамической диспетчеризации и полиморфизма, но в остальном консолидировать больше нечего. Все общее для этих классов уже находится в одном базовом классе. Добавление этих объявлений на самом деле будет означать, что у вас есть больше кода, потому что вам все равно нужно будет сохранить существующие объявления и реализации методов.

person Rob Kennedy    schedule 09.06.2013
comment
Спасибо за ответ Роб. Думаю, я продолжу путь, которым я иду. Хорошо, наконец, добиться прогресса в Delphi, где мой путь приемлем для масс :) - person Dan; 10.06.2013