Ir para conteúdo
  • Cadastre-se

dev botao

Dúvida Orientação a Objetos?


  • Este tópico foi criado há 2099 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Estou desenvolvendo um projeto e esbarrei em um problema em que preciso ficar copiando e colando o mesmo código em todos os métodos de algumas classes, mas não consegui resolver esse problema com o que conheço em POO. O que ocorre é o seguinte: 

Eu tenho neste projeto as minhas regras de negócio; para cada model, eu tenho uma regra de negócio (PessoaModel -> PessoaRN, EndereçoModel -> EndereçoRN, etc); dentro dessas classes "RN" eu recebo um Model da View, valido ele, e então executo a função em questão (PessoaRN.Inserir, PessoaRN.Editar, etc); cada vez que uma View executa um dos métodos das Regras de Negócio eu inicio uma transação no banco de dados, faço todo a validação e processamento do método, e no final se tudo deu certo, dou um commit, senão um rollback no banco de dados; fica no final com essa estrutura:

function TRegraDeNegocio.Inserir(pModel: TModel):Boolean;
begin
	DoIniciaTransacaoComBancoDeDados;
	
	try
		//
		// Aqui processa o código da função de fato
		//

		DoCommitTransacao;
	except
		on E: Exception do
		begin
			DoRollbackTransacao;
			raise Exception.Create(E.Message);
		end;
	end;
end;

Então resumindo: em todos os métodos de todas as regras de negócio eu teria que ficar copiando e colando todo o código acima com a exceção da parte comentada, porque é ali que entra o código de fato do método em si.

Não consegui resolver com herança, pois tem código comum no início e no final. 

Existe algum outro detalhe na POO que resolveria essa questão?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Tente criar um método que receba uma Procedure of Object... exemplo (não testei)

type
  TMyDoMethod = procedure (pModel: TModel) of object;

function TfrApp.TryViewOrRollbak(pModel: TModel; pMethod: TMyDoMethod ):Boolean;
begin
	DoIniciaTransacaoComBancoDeDados;

	try
		pMethod( pModel )

		DoCommitTransacao;
	except
		on E: Exception do
		begin
			DoRollbackTransacao;
			raise Exception.Create(E.Message);
		end;
	end;
end;   

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2099 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...