6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr...

Abrindo e fechando uma página web com o Delphi

É possível executar um browser com WinExec ou ShellExecute para abrir uma página web, mas o que eu vou mostrar aqui é como usar um objeto OLE para criar uma instância de um IE, abrindo ele na página desejada e depois fechando.

Isso pode ser aplicado, por exemplo, em totens ou lan houses onde o acesso ao browser e suas funções, ou até mesmo o acesso a páginas é restrito.

Para isso vamos usar um vetor de 10 posições de variant, mas você pode usar uma lista ou pilha, fique a vontade para usar a imaginação. Esse vetor será responsável por controlar as instâncias do IE abertas e executar operações sobre elas. Você pode fechar na ordem que foi aberto, fechar pelo índice ou fechar todas varrendo o vetor, quando esgotar o tempo do usuário, por exemplo.

Coloque em um formulário um edit (para digitação da url) e dois botões. O código ficará assim:

unit abreFecha;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Comobj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    IEapp : array[0..9] of variant;
    fIndice : integer;
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if fIndice > 9 then
    exit;
  IEApp[findice] := CreateOLEObject('InternetExplorer.Application');
  IEApp[findice].visible := true;
  IEApp[findice].Top := 0;
  IEApp[findice].Left := 0;
  IEApp[findice].width := screen.width;
  IEApp[findice].height := screen.height;
  IEApp[findice].Navigate(edit1.Text);
  inc(fIndice);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if fIndice = 0 then exit;
  IEApp[findice-1].Quit;
  dec(fIndice);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  fIndice := 0;
end;

end.


Até a próxima dica básica de Delphi ;)

Comentários

Postagens mais visitadas deste blog

Botão Add This para adicionar seu post em qualquer rede

Busca de CEP com o Lazarus - Parte 1 - UrlEncode

Uso de memória no SQL Server