Я работаю над проектом, в котором я построил структуру, состоящую из базового класса «TFuncao», двух классов потомков «TSolicitacao», «TResposta» и столько, сколько необходимо для классов потомков, все они являются классами-моделями только со свойствами.String to Class: класс преобразования или базовый метод преобразования?
Первый из них в центре внимания этого вопроса, он имеет метод «ParaTexto», который возвращает строку всех своих свойств определенным образом (в основном преобразуя их в строку). Этот класс «TSolicitacao» имеет много потомков, и каждый из них имеет метод «ParaTexto», вызывающий функцию своего предка и добавляющий его собственные свойства.
Итак, мой вопрос:
Должен ли я сохранить этот метод "ParaTexto"? Или удалить его и создать класс с методом, который получает «TSolicitacao» и, соответственно, его тип (класс потомков), возвращает строку?
Я думал об этом, потому что класс модели технически должен иметь только геттеры и сеттеры.
код - методы получения и установки, где удалены для экономии места:
"TFuncao" файл класса:
unit Funcao;
interface
uses
Funcao.Tipo;
type
TFuncao = class abstract
private
FFUNCAO: TFuncaoTipo;
FSEQUENC: string;
procedure SetFUNCAO(const Value: TFuncaoTipo);
procedure SetSEQUENC(const Value: string);
published
property SEQUENC: string read FSEQUENC write SetSEQUENC;
property FUNCAO: TFuncaoTipo read FFUNCAO write SetFUNCAO;
constructor Create; virtual;
end;
"TSolicitacao" файл класса:
unit Funcao.Solicitacao;
interface
uses
Funcao;
type
TSolicitacao = class abstract (TFuncao)
published
function ParaTexto: string; virtual;
end;
implementation
uses
Funcoes,
SysUtils;
{ TSolicitacao }
function TSolicitacao.ParaTexto: string;
begin
Result :=
Copy(CompletarComEspacoAEsquerda(SEQUENC, 4), 1, 4) +
Completar0AEsquerda(IntToStr(Integer(FUNCAO)), 2);
end;
end.
"TVendaSolicitacao" класса файл - пример класса потомков «TSolicitacao»:
unit Venda.Solicitacao;
interface
uses
Funcao.Solicitacao,
Funcao.Tipo,
Venda.Solicitacao.Produto;
type
TVendaSolicitacao = class (TSolicitacao)
private
FNUMFISCAL: Integer;
FNUMPDV: Integer;
FAUTORIZ: string;
FCONV_TIPO: Integer;
FProdutos: TVendaSolicitacaoProdutoList;
procedure SetAUTORIZ(const Value: string);
procedure SetCONV_TIPO(const Value: Integer);
procedure SetNUMFISCAL(const Value: Integer);
procedure SetNUMPDV(const Value: Integer);
procedure SetProdutos(const Value: TVendaSolicitacaoProdutoList);
published
property NUMPDV: Integer read FNUMPDV write SetNUMPDV;
property NUMFISCAL: Integer read FNUMFISCAL write SetNUMFISCAL;
property AUTORIZ: string read FAUTORIZ write SetAUTORIZ;
property CONV_TIPO: Integer read FCONV_TIPO write SetCONV_TIPO;
property Produtos: TVendaSolicitacaoProdutoList read FProdutos write SetProdutos;
function ParaTexto: string; override;
constructor Create; override;
end;
implementation
uses
SysUtils,
Funcoes;
{ TVendaSolicitacao }
constructor TVendaSolicitacao.Create;
begin
inherited;
FUNCAO := ftVenda;
FProdutos := TVendaSolicitacaoProdutoList.Create;
end;
function TVendaSolicitacao.ParaTexto: string;
begin
Result :=
inherited +
Completar0AEsquerda(NUMPDV, 4) +
Completar0AEsquerda(NUMFISCAL, 6) +
Completar0AEsquerda(AUTORIZ, 12) +
IntToStr(CONV_TIPO);
if Produtos.Count > 0 then
Result := Result + #13#10 + Produtos.ParaTexto;
end;
end.
файл класса «TConversao» - как я это вижу:
unit Conversao;
interface
uses
Funcao;
type
TConversao = class
published
function ParaTexto(Funcao: TFuncao): string;
end;
implementation
uses
Solicitacao,
Solicitacao.Venda,
Funcoes;
function ParaTexto(Funcao: TFuncao): string;
begin
Result := '';
if (Funcao is TSolicitacao) then
Result :=
Copy(CompletarComEspacoAEsquerda((Funcao as TSolicitacao).SEQUENC, 4), 1, 4) +
Completar0AEsquerda(IntToStr(Integer((Funcao as TSolicitacao).FUNCAO)), 2);
if (Funcao is TVendaSolicitacao) then
begin
Result :=
inherited +
Completar0AEsquerda((Funcao as TVendaSolicitacao).NUMPDV, 4) +
Completar0AEsquerda((Funcao as TVendaSolicitacao).NUMFISCAL, 6) +
Completar0AEsquerda((Funcao as TVendaSolicitacao).AUTORIZ, 12) +
IntToStr((Funcao as TVendaSolicitacao).CONV_TIPO);
if Produtos.Count > 0 then
Result := Result + #13#10 + Produtos.ParaTexto;
end;
Если я правильно понимаю, то, что вы называете «детьми», обычно называют потомками, а то, что вы называете родителем, является «предком». Пожалуйста, исправьте это, это две разные концепции, очень запутывающие. –
@whosrdaddy Я поставил код, например, и конкретное приложение того, что я прошу. –
@whosrdaddy Теперь я вижу, спасибо за отзыв –