Middlewares

Utilizando Middlewares para modularizar sua aplicação com ModularBr.

Middlewares são um recurso amplamente utilizado em diferentes plataformas e frameworks para gerenciar a lógica de aplicação que é executada antes ou depois do processamento de uma solicitação. Eles podem ser usados para implementar autenticação, autorização, manipulação de erros, compressão de dados, cache, entre outras funcionalidades.

Ao usar middlewares em uma aplicação, é possível separar a lógica de negócios em camadas distintas, tornando a aplicação mais modular e mais fácil de manter. Além disso, os middlewares permitem que as solicitações sejam processadas de forma mais eficiente, pois podem ser aplicados em vários pontos da cadeia de processamento, permitindo que a lógica específica seja executada apenas quando necessário.

Outra vantagem do uso de middlewares é a capacidade de personalização, pois eles podem ser criados para atender às necessidades específicas da aplicação, permitindo que as funcionalidades sejam ajustadas de acordo com as necessidades.

Em resumo, os middlewares são uma ferramenta poderosa que pode melhorar a modularidade, a eficiência e a personalização de uma aplicação, e por isso são amplamente utilizados em diferentes plataformas e frameworks.

Adicionando Middlewares:

unit app.module;

interface

uses
  dmfbr.module,
  nfe.module;

type
  TNFeBeforeMiddleware = class(TRouteMiddleware)
  public
    class function Before(ARoute: TRouteAbstract): TRouteAbstract; override;
  end;

  TNFeAfterMiddleware = class(TRouteMiddleware)
  public
    class procedure After(ARoute: TRouteAbstract); override;
  end;
  
  TAppModule = class(TModule)
  private
    function BeforeMiddleware(ARoute: TRouteAbstract): TRouteAbstract;
    procedure AfterMiddleware(ARoute: TRouteAbstract);
  public
    function Routes: TRoutes; override;
  end;

implementation

{TNFeBeforeMiddleware}

class function TNFeBeforeMiddleware.BeforeMiddleware(
  ARoute: TRouteAbstract): TRouteAbstract;
begin
  //... Pegue ou altera aqui algo da rota, em seguida devolva ela.
  Result := ARoute;
end;

class procedure TNFeAfterMiddleware.After(ARoute: TRouteAbstract);
begin
  //...
end;

{ TAppModule }

function TAppModule.Routes: TRoutes;
begin
  // Rotas
  Result := [RouteModule('/nfe/:id',
                         TNFeModule,
                         [TNFeBeforeMiddleware, TNFeAfterMiddleware])];
end;

end.

Last updated