Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Trabalhando com MVC no Delphi


SCIENTIST

Question

Boa Noite, estou trabalhando com Padrão MVC no delphi e estou tendo problemas na minha Camada Controller, mais especificamente em um tipo Enumerated.

Tenho o seguinte tipo na minha Classe ControllerCliente:

TEstadoClienteController = (active, insert, edit);
Tenho também uma variável chamada Estado do tipo TEstadoClienteController. Por último tenho um método público que retorna a variável estado:
function TClienteController.getEstadoAtual: TEstadoClienteController;
begin
 result := estado;
end;
Porém quando pego este retorno no formulário (camada VIEW) e faço o código abaixo:
if (controller.getEstadoAtual = active) then
showmessage('ATIVO')
else if (controller.getEstadoAtual = insert) then
showmessage('INSERIR')
else if (controller.getEstadoAtual = edit) then
showmessage('EDITAR');

Ele da o seguinte erro:

[DCC Error] uFrmCliente.pas(55): E2008 Incompatible types

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0
  • 0

pois então, veja bem: eu consigo recuperar a variável "ESTADO" no tipo enumerated em outra classe, até debuguei e o valor de ESTADO está como ACTIVE (corretíssimo). Porém faço o seguinte:

est = controller.getEstadoAtual();

if est = active then

showmessage('ativo");

da erro na linha "if est = active then "

Link to comment
Share on other sites

  • 0

enumeração de tipos

exemplo:

type
   TEstado =  (active, insert, edit); // Define a enumeração

 var
   Estado: TEstado; // variável Uma enumeração

 begin
   Estado := active;//  Atribuir a uma variável enumerada

   if Estado = active then  
      showmessage('ativo");

 end;

veja o que consegue

abraço

Link to comment
Share on other sites

  • 0

Pois então Jhonas, eu consigo fazer o código acima funcionar na mesma UNIT que o ENUMERATED TEstado foi declarado, porém se faço isso em outra UNIT não funciona (mesmo dando USES na UNIT)

Aqui vai a UNIT onde funciona, ClienteController:

unit ClienteController;

interface

uses
  PojoCliente, DaoCliente;

type
  TEstadoClienteController = (active, insert, edit);

  TClienteController = Class

   private
   pojo: TPojoCliente;
   dao: TDaoCliente;
   estado: TEstadoClienteController;
   class var Instance: TClienteController;
   constructor PrivateCreate;

   public
   class function getInstance: TClienteController;
   constructor create;
   destructor destroy;override;
   procedure Salvar;
   function Inserir:TPojoCliente;
   function getInstanceCliente:TPojoCliente;
   function getEstadoAtual:TEstadoClienteController;


End;

implementation

uses
  SysUtils, Dialogs;

{ TClienteController }

constructor TClienteController.create;
begin
 raise Exception.Create('Você não pode chamar o construtor da classe diretamente, chame o método getInstance()');
end;

destructor TClienteController.destroy;
begin
  inherited;
end;

function TClienteController.getEstadoAtual: TEstadoClienteController;
begin
 result := estado;
end;

class function TClienteController.getInstance: TClienteController;
begin
 if not Assigned(Instance) then
  Instance := TClienteController.PrivateCreate;
 result := Instance;
end;

function TClienteController.getInstanceCliente: TPojoCliente;
begin
 result := pojo;
end;

function TClienteController.Inserir:TPojoCliente;
begin
    estado := insert;
    pojo := TPojoCliente.Create;
    dao := TDaoCliente.getInstance;
    Result := pojo;
end;

constructor TClienteController.PrivateCreate;
begin
 inherited create;
 estado := active;
end;

procedure TClienteController.Salvar;
begin
  if (dao.Inserir(pojo)) then
      estado := active;
end;

end.
Agora o Formulario que estou tentando usar isso:
unit uFrmCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ClienteController, ActnList, DB, ADODB, Grids,
  DBGrids;

type
  TfrmCliente = class(TForm)
    _leID: TLabeledEdit;
    _leNOME: TLabeledEdit;
    _leIDADE: TLabeledEdit;
    _btSalvar: TButton;
    _btInserir: TButton;
    ActionList1: TActionList;
    _acInserir: TAction;
    _actSalvar: TAction;
    Button1: TButton;
    DBGrid1: TDBGrid;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure _acInserirUpdate(Sender: TObject);
    procedure _acInserirExecute(Sender: TObject);
    procedure _actSalvarUpdate(Sender: TObject);
    procedure _actSalvarExecute(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    controller: TClienteController;

  public
    { Public declarations }
    constructor create(AOwner:TComponent;Controller:TClienteController);reintroduce;
  end;

var
  frmCliente: TfrmCliente;

implementation

uses
  PojoCliente, TypInfo;

{$R *.dfm}

{ TfrmCliente }



{ TfrmCliente }

procedure TfrmCliente.Button1Click(Sender: TObject);
var
 est: TEstadoClienteController;
begin
est := controller.getEstadoAtual;
     if est = active then
     showmessage('ativo');
end;

constructor TfrmCliente.create(AOwner: TComponent;
  Controller: TClienteController);
begin
 inherited create(AOwner);
 self.controller := Controller;
end;

procedure TfrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  controller.Destroy;
end;

procedure TfrmCliente._acInserirExecute(Sender: TObject);
begin
 controller.Inserir;
end;

procedure TfrmCliente._acInserirUpdate(Sender: TObject);
begin
 {   if controller.getEstadoAtual = active then
 TAction(Sender).Enabled := true
 else
 TAction(Sender).Enabled := false;  }
end;

procedure TfrmCliente._actSalvarExecute(Sender: TObject);
begin
   (controller.getInstanceCliente).setId(strtoint(_leID.Text));
 (controller.getInstanceCliente).setNome(_leNOME.Text);
 (controller.getInstanceCliente).setIdade(strtoint(_leIDADE.Text));

 controller.Salvar;
end;

procedure TfrmCliente._actSalvarUpdate(Sender: TObject);
begin
{ if (controller.getEstadoAtual = insert) or (controller.getEstadoAtual = edit) then
 TAction(Sender).Enabled := true
 else
 TAction(Sender).Enabled := false;  }
end;

end.

Edited by SCIENTIST
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...