Reading this in English? The full English index — same coverage, same organization — is in Features_Implemented_Index.md. If English is more comfortable, click through and read that document instead.
Índice mestre de todas as funcionalidades implementadas no Dext 1.0. Cada item aponta para a unit em Sources/.
Organizado por módulo — Core, Web, ORM, Networking, Testing e o restante do ecossistema — para que cada capacidade viva num único capítulo canônico.
Important
Auditoria nos fontes. Os bullets únicos foram mantidos; duplicatas copiadas foram removidas. Textos sobrepostos foram fundidos.
Próximas leituras: Livro do Dext · Matriz de compatibilidade · Paridade .NET
- Core Foundation — DI, JSON, configuração, tipos, threading, jobs
- Collections — listas, dicionários, LINQ, SIMD, canais
- Web Framework — Minimal APIs, Controllers, middleware, DataAPI, HTTP/2, SSR
- ORM & Entity — DbContext, queries, dialetos, EntityDataSet
- Networking — REST client, Redis, TLS, sockets, MQTT, gRPC
- Event Bus
- Testing & Quality
- Template Engine
- Validation
- Mapper
- Multi-Tenancy
- Desktop UI & Design-Time
- CLI & Scaffolding
- Observability
- AI Skills
- MCP Server
O Dext foi desenhado para alavancar o Object Pascal moderno, com um piso de compatibilidade documentado. A implementação vive em Sources\Core e Sources\Core\Base.
- Mínimo arquitetural: Delphi 2010 (Extended RTTI, Generics, Attributes).
- Piso de compilação: Delphi XE2 ou superior, com fallback HTTP Indy abaixo do XE8 (
TDextIndyHttpEngine). - Tier 1 (completo): 10.4 Sydney, 11 Alexandria, 12 Athens — desenvolvimento e CI principais.
- Tier 2 (suportado): 10.1 Berlin – 10.3 Rio — sem variáveis inline; primitivas de sync retroportadas.
- Web Stencils: Delphi 12.2+ (Windows). Controlado por
DEXT_ENABLE_WEB_STENCILSemDext.inc.
Veja a Matriz de Compatibilidade Delphi para requisitos por feature e compilador.
- TReflection — Fachada estática de alto desempenho para o sistema RTTI do Delphi. Mantém um
TRttiContextcompartilhado globalmente. - Metadata Cache (
TTypeMetadata) — Cache global de metadados de tipo (propriedades, campos, atributos) com inicialização thread-safe viaTMREWSync(Multiple-Read Exclusive-Write). Caminhos hot-path são lock-free (leitura sem lock). - Smart Properties (
Prop<T>,Nullable<T>,Lazy<T>) — Detecção automática de wrappers genéricos via análise dePTypeInfo.Name. O metadata cache armazenaIsSmartProp,IsNullable,IsLazy,InnerTypee ponteiro direto paraFValuefield. - Property Path Resolution — Resolução recursiva de caminhos aninhados (ex:
User.Address.Street) viaTReflection.GetPropertyValuecom cache deTRttiPropertypor segmento. - Custom Attribute Scanning —
GetAttributes<T>eHasAttribute<T>com varredura em campos, propriedades e métodos. Usado por DI, Validation, JSON e ORM. - Property Handlers —
TPropertyHandlerpara acesso otimizado a propriedades com cache de getter/setter.
- TDextServices — Fachada fluente para registro de serviços. Métodos:
AddSingleton<T>,AddTransient<T>,AddScoped<T>,AddSingletonInstance<T>,AddSingletonFactory<T>. - Mapeamento Interface/Implementação — Desacoplamento total entre definições e lógica concreta.
- TServiceCollection — Repositório interno de
TServiceDescriptorcom busca reversa (LIFO) para permitir override de registros. - TDextServiceProvider — Container IoC com armazenamento híbrido:
FSingletonInstances(ARC/Interfaces) +FSingletonObjects(Non-ARC/Classes manuais) +FScopedInstances/FScopedObjectspara escopo. - Ciclos de Vida —
Singleton(instância única global),Transient(nova instância por resolução),Scoped(instância única por escopo DI viaCreateScope). - Scope Isolation —
IServiceScopecomTDextServiceScopeque cria um provider filho isolado. Destruição do scope libera todos os objetos scoped. - Auto-Collections — Resolução automática de
IList<T>,IEnumerable<T>,IDictionary<K,V>viaTActivator.IsListType/IsDictionaryType. - Atributos DI —
[Inject]para injeção em propriedades/campos,[ServiceConstructor]para seleção explícita de construtor, overriding a estratégia Greedy.
- TActivator — Motor central de instanciação dinâmica via RTTI com 4 overloads de
CreateInstance:- Manual — Argumentos posicionais explícitos.
- Pure DI (Greedy Strategy) — Seleciona o construtor com MAIS parâmetros resolvíveis pelo container. Prioriza construtores da classe mais derivada em caso de empate.
- Hybrid — Argumentos posicionais iniciais + resolução DI para os restantes.
- PTypeInfo-based — Instanciação por
PTypeInfo(suporta classes e interfaces, incluindo auto-instanciação de coleções).
- [ServiceConstructor] Attribute — First-pass: se encontrado, o construtor anotado tem prioridade absoluta sobre a estratégia Greedy.
- Constructor Cache — Cache thread-safe (
TMREWSync) deTConstructorEntry(método + array dePTypeInfodos parâmetros) para evitar re-scanning RTTI. - Field/Property Injection —
InjectFieldsprocessa[Inject]em campos e propriedades após a construção, suportandoTargetTypeInfocustomizado. - Default Implementation Registry —
RegisterDefault(TBase, TImpl)eRegisterDefault<TService, TImpl>para mapeamento base→implementação (ex:TStrings→TStringList).
- TDextJson — Fachada estática de serialização/deserialização com
Serialize<T>eDeserialize<T>. - Driver Architecture —
IDextJsonProviderplugável (DextJsonDataObjectspadrão,System.JSONalternativo). Drivers implementamCreateObject,CreateArray,Parse. - TJsonSettings (Fluent Record API) — Configuração imutável via chaining:
.CamelCase,.SnakeCase,.PascalCase,.EnumAsString,.EnumAsNumber,.IgnoreNullValues,.CaseInsensitive,.ISODateFormat,.UnixTimestamp,.CustomDateFormat(fmt),.ServiceProvider(p). - Automatic Casing (
TCaseStyle) — 5 modos:CaseInherit,Unchanged,CamelCase,PascalCase,SnakeCase. Aplicado automaticamente durante serialização. - Enum Serialization (
TEnumStyle) —AsNumber(ordinal) ouAsString(nome RTTI do enum). - Date Formats (
TDateFormat) —ISO8601,UnixTimestamp,CustomFormat. Default:yyyy-mm-dd"T"hh:nn:ss.zzz. - DOM Abstraction —
IDextJsonNode,IDextJsonObject,IDextJsonArraycom tipagem forte (6 node types: Null, String, Number, Boolean, Object, Array). - TJsonBuilder — Builder fluente para construção programática de JSON sem strings.
- Atributos —
[JsonName](renomear campo),[JsonIgnore](excluir campo),[JsonCaseStyle](override por classe). - Perfis Arquiteturais:
- Dext DOM (IDextJsonNode) — Otimizado para 99% dos casos (APIs REST, Configurações). Alta velocidade de acesso aleatório e manipulação de objetos via árvore em memória (engine DataObjects).
- Dext UTF-8 (Low-Level Streaming) — Ferramenta cirúrgica para Big Data. Processamento sequencial zero-allocation de volumes massivos (GBs) com footprint de memória constante.
- TUtf8JsonSerializer (
Dext.Json.Utf8.Serializer) — Serializador zero-allocation para records. Opera diretamente sobreTByteSpan(UTF-8 raw) sem conversão intermediária parastring. Cache deTJsonRecordInfoporPTypeInfopara eliminar overhead RTTI em hot-paths.ToUtf8JSONno driverDextJsonDataObjectspara output UTF-8 nativo. - S54 Codecs Diretos —
Dext.Core.TypeModel,Dext.Core.DirectAccess,Dext.Codecs.Registry,Dext.Serialization.Protobuf,TDextJson, hidratação ORM e a CLI de codecs compartilham planos de campos, habilitando leitura/escrita direta por offset, registro de codecs protobuf gerados, despacho gRPC por invoker estático, objetos/listas aninhados com ownership explícito, edge cases de SmartProp/Nullable,TGUID/TUUIDe exportação.protoa partir de DTOs code-first. Os diagnósticos do IDE Expert ficam documentados como DX adiado.
-
TDextConfiguration (Fluent Builder) —
.AddJsonFile(path),.AddYamlFile(path),.AddEnvironmentVariables(prefix),.AddCommandLine(args, mappings),.AddUserSecrets(secretsId),.AddInMemoryCollection. -
TConfigurationRoot — Agregador multi-provider com precedência LIFO (último provider registrado vence). Implementa
IConfiguration. -
Pipeline Padrão de 5 Camadas de Precedência — (1) Arquivos Base JSON/YAML
$\rightarrow$ (2) Arquivos de Ambiente JSON/YAML$\rightarrow$ (3) User Secrets (Apenas em Development)$\rightarrow$ (4) Variáveis de Ambiente do S.O.$\rightarrow$ (5) Argumentos de Linha de Comando (CLI). -
CommandLine Configuration Provider (
Dext.Configuration.CommandLine) — Parsing de argumentos de alta performance suportando--Key=Value,/Key=Value, valores separados por espaço--Key Value, conversão de duplo sublinhado (--Key__SubKey=Value$\rightarrow$ Key:SubKey), flags booleanas e mapeamento customizado de switches/aliases (-p$\rightarrow$ Server:Port). -
User Secrets Configuration Provider (
Dext.Configuration.UserSecrets) — Armazenamento e isolamento de credenciais de desenvolvimento fora do repositório git (%APPDATA%\Dext\UserSecrets\<Id>\secrets.jsonno Windows,~/.dext/usersecrets/<Id>/secrets.jsonno Linux/macOS). -
Hierarchical Keys — Acesso via
:separator (ex:Database:ConnectionString).GetSection(key)retorna sub-árvore. -
Options Pattern —
IOptions<T>para binding tipado de seções de configuração em classes; callback de validação opcional emConfigure<T>; ValidateOnStart (S68) resolve e valida eagerly emTWebApplication.BuildServicesantes de abrir a porta (EConfigurationException). -
Section Validators —
AddSectionValidator(section, validator)para validação de configuração no startup. -
Change Tracking —
IChangeTokencomOnReloadcallback para hot-reload de configuração.
- TUUID (
Dext.Types.UUID) — Tipo RFC 9562 com armazenamento Big-Endian (Network Byte Order).NewV4(random),NewV7(time-ordered, 48-bit Unix timestamp ms + random). Conversão implícita bidirecional comTGUID(endianness swap automático) estring. Operadores=e<>viaCompareMem. Compatível com PostgreSQLuuide Web APIs. - Nullable<T> (
Dext.Types.Nullable) — Wrapper genérico para value types anuláveis.HasValue,Value,GetValueOrDefault,Clear. Operadores implícitos:T→Nullable<T>,Nullable<T>→T,Variant→Nullable<T>,Nullable<T>→Variant. Comparação viaTEqualityComparer<T>.Default.TNullableHelperpara acesso low-level via rawPTypeInfosem genéricos. - Lazy<T> (
Dext.Types.Lazy) — Inicialização lazy thread-safe viaTCriticalSection(double-checked locking).ILazyeILazy<T>interfaces.TLazy<T>(factory-based) eTValueLazy<T>(pre-computed). Operadores implícitos:T→Lazy<T>,Lazy<T>→T,TFunc<T>→Lazy<T>. Ownership management:AOwnsValueparameter controla se o valor é destruído com o lazy.
- TEntityType<T> (
Dext.Entity.TypeSystem) — Classes de definição separadas para queries. Permite separar dados de metadados trabalhando com POCOs puros, gerando as mesmas árvores de expressão sem precisar embutirProp<T>na própria entidade. Ideal para sistemas legados ou quando a separação estrita é preferida. - Prop<T> (
Dext.Core.SmartTypes) — Record genérico que opera em modo dual: (1) Runtime Mode — armazena valorTnormalmente, (2) Query Mode — gera árvores de expressão (IExpression/ AST) automaticamente via operator overloading. É o pilar central da DSL fluente LINQ-like do Dext. - BooleanExpression — Record híbrido que pode conter um
Booleanliteral OU um nóIExpression(AST). Operadoresand,or,not,xorgeram nósTLogicalExpressionautomaticamente em query mode. - Type Aliases —
StringType,IntType,Int64Type,BoolType,FloatType,CurrencyType,DateTimeType,DateType,TimeType— aliases semânticos paraProp<T>que tornam as entidades autodocumentadas. - Operator Overloading Completo —
=,<>,>,>=,<,<=,+,-,*,/, negação unária — todos geramTBinaryExpressioncomboEqual,boGreaterThan, etc., em query mode. - String Methods —
Like,StartsWith,EndsWith,ContainsgeramTFunctionExpressioncom a operação correspondente. - Collection Methods —
In(values),NotIn(values),Between(lower, upper),IsNull,IsNotNull. - OrderBy —
Prop.Asc/Prop.DescretornamIOrderBypara composição de ordenação. - IPropInfo — Metadata portado que carrega o nome da coluna física no banco, injetado por
TPrototype. - TQueryPredicate<T> — Delegate
function(Arg: T): BooleanExpressionusado pelo ORM como predicado de query. - Expression Tree Nodes (
Dext.Specifications.Types) —TPropertyExpression,TLiteralExpression,TConstantExpression,TBinaryExpression,TLogicalExpression,TUnaryExpression,TFunctionExpression,TFluentExpression. - Nullable<T> Interop — Conversão implícita bidirecional entre
Prop<T>eNullable<T>. - Variant Interop — Conversão implícita bidirecional entre
Prop<T>eVariant.
- TValueConverterRegistry — Registro global de conversores com lookup em 3 níveis: (1) Exact Match por
PTypeInfopair, (2) Kind Match porTTypeKindpair, (3) Fallback paratkVariantsource. - TValueConverter — Motor de execução que orquestra conversões, com tratamento automático de Smart Types (
Prop<T>) eNullable<T>(detecta viaTReflection.GetMetadata). - 20+ Conversores Built-in —
Variant→Integer/String/Boolean/Float/DateTime/Date/Time/Enum/GUID/Class/TBytes/TUUID,Integer→Enum/String,String→GUID/TBytes/TUUID/Integer/Float/DateTime/Boolean,Float→String,Boolean→String,Class→Class. - Suporte Nativo a TBcd & ftFMTBcd — Conversores bidirecionais de alta performance e zero-alloc:
TBcd<->Currency,TBcd<->Double,TBcd<->string(invariante),TBcd<->Integer/Int64,Variant<->TBcd,String<->TBcd,Float<->TBcd,Currency<->TBcd. Garante preservação total de precisão ponta-a-ponta para colunas numéricas de alta precisão (NUMERIC/DECIMAL). - ConvertAndSet / ConvertAndSetField — Conversão + atribuição via RTTI em uma única chamada (usado pelo ORM e Model Binding).
- TSpan<T> — Referência zero-allocation a região contígua de memória.
Slice,ToArray,Clear,GetEnumerator(for-in). Bounds checking em todos os acessos. - TVector<T> — Vetores dinâmicos e eficientes alocados na stack/heap para alta performance.
- TReadOnlySpan<T> — Versão imutável de
TSpan<T>. Operador implícitoTSpan<T>→TReadOnlySpan<T>eTArray<T>→TReadOnlySpan<T>. - TByteSpan — Span especializado para bytes.
EqualsviaTDextSimd.EqualsBytes(SIMD-accelerated).EqualsStringcompara com UTF-8 sem alocação.IndexOf,ToString(UTF-8→string),ToBytes. Otimizado para parsers JSON/REST e protocolos de rede. - ILifetime<T> (
Dext.Core.Memory) — Wrapper ARC para gerenciamento de lifecycle de objetos Non-ARC.TLifetime<T>encapsula objeto e o libera automaticamente quando a interface sai de escopo. - IDeferred / TDeferredAction (
Dext.Core.Memory) — Padrão Defer (inspirado em Go). Ação executada automaticamente no destructor quando a interface sai de escopo. Útil para cleanup de recursos temporários.
- TAsyncTask — Implementação fluente de Async/Await para operações assíncronas.
- Escalonador Work-Stealing — Distribuição eficiente de tarefas entre os núcleos da CPU para máxima performance paralela.
- ICancellationToken — Cancelamento cooperativo com
WaitForCancellation(timeout)eIsCancellationRequested. Integrado com Event Bus Lifecycle e Background Services. - Windows Processor Groups — Suporte nativo para máquinas Windows com >64 cores lógicos. Detecta automaticamente múltiplos grupos de processadores e vincula threads de worker usando
SetThreadGroupAffinitypara otimização e balanceamento. - GetSystemLogicalProcessorCount — Helper que consulta a topologia do processador em nível de sistema de todos os grupos no Windows (com fallback para o padrão
CPUCountnas outras plataformas) para evitar sub-provisionamento de threads de servidor. - Round-Robin Group Affinity — Alocador automático que distribui uniformemente threads de trabalho (workers) entre os nós NUMA e grupos de processadores disponíveis.
- TDextPool<T> — Pool genérico de objetos thread-safe com
TSpinLock,ManualResetevent broadcast, rastreamento atômico de waiters e deadline monotônica de timeout (AcquireTimeoutMs). - Reciclagem Automática (
IPoolable) — Execução automática do métodoResetStatedurante oReleasedo objeto antes de seu retorno ao estoque. - Protocolo Drain-Before-Free — Shutdown atômico com broadcast (
FAvailableEvent.SetEvent) e espera por drain de waiters (FActiveWaiters = 0) prevenindo use-after-free. - MapFast HTTP Fallback 503 — Retorno automático de
HTTP 503 Service Unavailableem endpointsApp.MapFast<TDbContext>sob exaustão do pool de contextos.
- ILoggerFactory — Factory de loggers com registro de múltiplos providers.
CreateLogger(categoryName)retornaILoggercomposto. - ILogger — Interface com métodos por nível:
Trace,Debug,Information,Warning,Error,Critical. Suporte a structured templates com placeholders. - Aggregate Logger — Cada
ILoggercriado pela factory agrega todos os providers registrados, despachando cada log entry para todos simultaneamente. - TBatchingTelemetrySink — Sink base abstrato e assíncrono para envio em lotes (batching) com buffering em fila, sincronização thread-safe e execução em background.
- TSeqLogSink — Sink de logs estruturados utilizando o formato Compact Log Event Format (CLEF) para envio de lotes a servidores Seq via HTTP.
- TOTLPTelemetrySink — Sink de telemetria no padrão OpenTelemetry (OTLP/HTTP JSON) para exportar Logs a coletores OTel (SigNoz, Datadog).
- TTelemetrySinkRegistry — Registro plugável de criadores de sinks que desacopla dependências circulares entre as camadas de pacotes.
- Fluent Logging Builders — Extensões de inicialização que suportam
AddSeq()eAddOpenTelemetry()com configurações customizadas de batching e serviços.
- IDextWriter — Abstração thread-safe para output do framework. Implementações:
TConsoleWriter(stdout),TWindowsDebugWriter(OutputDebugString com buffering),TStringsWriter(TStringList/TMemo),TNullWriter(silent). - SafeWrite / SafeWriteLn (
Dext.Utils) — Funções globais que roteiam output viaIDextWriterativo. Detecção automática de console disponível. Escrita Unicode nativa viaWriteConsoleW(Windows) com fallback UTF-8 para pipes. - SafeAttachConsole — Attach ao console do processo pai (CMD/PowerShell) ou
AllocConsolepara aplicações GUI executadas via F5.
- TDextEscaping — Utilitários centralizados para escaping de texto:
Html,Xml,Json(manual character-by-character com suporte a\uXXXX),Url. Usado por Reporters, Serializers e RestClient.
- TryParseISODateTime — Parser robusto de ISO 8601 (
YYYY-MM-DDTHH:NN:SS.ZZZ) com suporte a variações (separadorTou espaço, milissegundos opcionais). - TryParseCommonDate — Parser multi-formato: ISO 8601 →
dd/mm/yyyy→mm/dd/yyyy→yyyy/mm/ddcom detecção automática de formato.
- IResiliencePipeline / TResiliencePipeline — Wrapper em record fluente e interface expondo políticas estilo Polly. Suporte a execuções assíncronas e síncronas genéricas/não-genéricas (
Execute<T>eExecute). - Retry Policy (
TRetryPolicy) — Tratamento de falhas transitórias com número de tentativas customizável e estratégias de backoff (linear, exponencial com jitter). - Circuit Breaker Policy (
TCircuitBreakerPolicy) — Implementa estadosClosed,OpeneHalf-Open, falhando rápido e lançandoECircuitBrokenExceptionquando limites de falhas são excedidos. - Fallback Policy (
TFallbackPolicy) — Intercepta exceções retornando valores alternativos ou executando ações de fallback customizadas. - Timeout Policy (
TTimeoutPolicy) — LançaETimeoutExceptioncaso operações excedam a duração máxima permitida através de cancelamento cooperativo e futures assíncronas. - RestClient Integration — O
TRestClientintegra-se nativamente com o motor de resiliência, permitindo o uso retrocompatível dos métodos.Retry()e.Timeout(), além de configuração de pipelines customizados.
IJobStorage— Abstração de armazenamento desacoplada com suporte a múltiplos provedores.IJobClient/TDextJobs— Cliente thread-safe para enfileiramento e fachada utilitária estática (TDextJobs.Enqueue<T>,TDextJobs.Schedule<T>).TInMemoryJobStorage— Provedor de persistência em memória projetado para testes locais rápidos.TSqliteJobStorage— Provedor de persistência baseado no SQLite via FireDAC, com criação automática de tabelas e transações ACID seguras.TJobServer/TBackgroundJobsService— Motor de processamento multi-threaded em background executado como umIHostedService(TBackgroundService), realizando polling, travamento, execução e monitoramento de jobs.TJobSerializer— Serializador e deserializador de argumentos de métodos (TValuearrays) via RTTI utilizando o DOM JSON do Dext.
Coleções de alta performance em Sources\Core. Binary Code Folding (TRawList) consolida especializações genéricas num único motor de memória bruta (até 60% menos tempo de compilação). Dicionários CPU-friendly (TRawDictionary, open addressing) até 6,6× mais rápidos que a RTL; varreduras SIMD (Dext.Collections.Simd, AVX2/SSE2) até 6,8× em listas nativas.
-
TRawList<T> — Backbone de todas as coleções. Lista genérica baseada em array dinâmico com
Move-based insertion/deletion para minimizar overhead. Suporte afor-invia enumerator customizado. -
TList<T> / IList<T> — Lista genérica de alto desempenho. Operações:
Add,Insert,Remove,IndexOf,Sort,BinarySearch,Contains,ToArray. -
TDictionary<K,V> / IDictionary<K,V> — Hash map genérico com suporte a
TryGetValue,AddOrSetValue,ContainsKey,Keys,Values. -
TOrderedDictionary<K,V> / IOrderedDictionary<K,V> — Hash map genérico ordenado por inserção que combina buscas
$O(1)$ de chaves com iteração densa na ordem de inserção, indexação posicional (KeyAt,ValueAt,PairAt,IndexOf) e gerenciamento de ciclo de vida de objetos viaOwnsValues. Suportado porTRawOrderedDictpara evitar inchaço de código (code bloat). -
THashSet<T> / IHashSet<T> — Conjunto de valores únicos com operações de teoria dos conjuntos:
UnionWith,IntersectWith,ExceptWith. -
TCollections (Factory) — Factory estática:
CreateList<T>,CreateDictionary<K,V>,CreateOrderedDictionary<K,V>,CreateHashSet<T>,CreateSortedList<T>, etc. - TSmartEnumerator<T> — Enumerador base extensível para iteração customizada em coleções derivadas.
- Operações Fluentes —
Where,Select,OrderBy,OrderByDescending,First,FirstOrDefault,Last,Any,All,Count,Sum,Min,Max,Average,Distinct,Take,Skip,GroupBy,SelectMany,Aggregate,Contains,ToList,ToDictionary,ForEach.
- TConcurrentDictionary<K,V> — Dicionário thread-safe com Lock Striping via array de
TSpinLock(múltiplos buckets de lock independentes para reduzir contenção). - TConcurrentQueue<T> / TConcurrentStack<T> — Filas e pilhas thread-safe para cenários producer/consumer.
- TFrozenDictionary<K,V> / TFrozenSet<T> — Estruturas imutáveis otimizadas para cenários de leitura intensa (estilo .NET 8
FrozenDictionary). Após construção, nenhuma modificação é permitida, permitindo otimizações de layout em memória.
- TChannel<T> — Primitiva de comunicação assíncrona estilo Go channels para pipelines Producer/Consumer.
- Bounded Channel — Capacidade fixa com back-pressure (writer bloqueia quando cheio).
- Unbounded Channel — Capacidade ilimitada (writer nunca bloqueia).
- ChannelReader / ChannelWriter — Interfaces segregadas para leitura e escrita.
- TDextSimd — Operações vetorizadas com detecção automática de instruction set:
EqualsBytes— Comparação de arrays de bytes via AVX2 (32 bytes/ciclo), SSE2 (16 bytes/ciclo) ou fallback Pascal.IndexOfByte— Busca linear acelerada via instruções vetoriais.FillByte/MoveMem— Preenchimento e cópia de memória otimizados.
- Runtime Detection — Detecção via CPUID no startup. Seleção automática do melhor path disponível.
- TEqualityComparer<T> / TComparer<T> — Comparadores genéricos padrão com suporte a tipos primitivos, records e classes.
- Algoritmos —
Sort(IntroSort),BinarySearch,Reverse,Shuffle.
- TWebApplication — Fachada fluente para inicialização: carrega automaticamente
appsettings.json,appsettings.yaml, Environment Variables, registra serviços e constrói o pipeline em uma única cadeia. - Minimal API — Registro direto de handlers via delegates sem controllers (
app.MapGet,app.MapPost,app.MapQuery). - FastPath (
app.MapFast) — Registro de rotas de altíssimo throughput com desvio (bypass) de DI Scope e ativação de RTTI, reduzindo o tempo por requisição ao mínimo possível. - Data API Streaming Direct UTF-8 (
Db.UseSql) — Execução de SQL nativo com serialização e gravação direta dos dados em UTF-8 no stream do socket (Res.GetOutputStream) sem alocação de objetosTJsonObjectna Heap. - Mapeamento HTTP QUERY — Endpoints de consulta de dados seguros e idempotentes utilizando corpos de requisição estruturados.
Endpoints em classes no estilo MVC, descobertos via RTTI — o par das Minimal APIs quando o domínio passa de uns poucos lambdas MapGet.
[ApiController]/[ApiController('/prefixo')]— Marca a classe como controller. Prefixo opcional no atributo, ou estilo.NETseparado com[Route('/api/users')].- Atributos de verbo —
[HttpGet],[HttpPost],[HttpPut],[HttpPatch],[HttpDelete],[HttpHead],[HttpOptions],[HttpQuery]. Rotas com parâmetro devem começar com/(ex.:[HttpGet('/{id}')]). AddControllers+MapControllers—TControllerScannerencontra tipos[ApiController], registra no DI e mapeia as actions antes do Swagger.- Injeção por construtor — Serviços resolvidos pelo container (
IUserService,ILogger,TDbContext, …). - Actions
IResult—Results.Ok,Created,Accepted,NoContent,BadRequest,NotFound,ValidationProblem,StatusCode,Json<T>. - Não nomeie uma action de
Create— Conflita com construtores Delphi (E2254). UseCreateUser,CreateOrder, etc.
- Chain of Responsibility — Middlewares funcionais (delegates anônimos) e baseados em classe com injeção de dependência via construtor.
- Built-in Middlewares:
- HTTP Logging (
THttpLoggingMiddleware) — Registro de requisições e respostas com mascaramento configurável case-insensitive (RedactHeaders) de cabeçalhos sensíveis (Authorization,Cookie,Set-Cookie,X-API-Key). - Exception Handling (
TExceptionHandlerMiddleware) — Tratamento global de exceções formatado conforme RFC 9457 (Problem Details, substituindo RFC 7807), geração deTraceIdvia UUIDv7 para rastreabilidade e omissão automática deE.Messageem produção em erros status500. Violações de regra de domínio viaEDomainException/EDomainValidationExceptionmapeiam para HTTP 422 comtypehttps://dext.dev/errors/domain-validation(S68). - DeveloperExceptionPage (
TDeveloperExceptionPageMiddleware) — Exibição detalhada de erros e stack trace exclusiva para ambiente de desenvolvimento. - CORS (
TCorsMiddleware) — Suporte estrito a preflight CORS (OPTIONScomOrigineAccess-Control-Request-Method), validação rigorosa de Origens, Métodos e Cabeçalhos solicitados com rejeição status403 Forbidden, fail-fast no startup contraAllowAnyOrigin + AllowCredentialse mesclagem limpa deVary: Origin. - Rate Limiting (
TRateLimitMiddleware) — Controle de tráfego com cabeçalhos padronizados da RFC 9333 (RateLimit-Limit,RateLimit-Remaining,RateLimit-Reset,Retry-After) emitidos em requisições permitidas e rejeitadas (status429). - Response Caching (
TResponseCacheMiddleware) — Cache de respostas HTTP server-side com proteção estrita contra armazenamento de conteúdos autenticados (Authorization, cookies de sessão/auth), rejeição de respostas comSet-Cookieou diretivasprivate/no-store/no-cachee reconstrução automática deCache-Control: public, max-age=Nem cache HITs. - Compression (
TCompressionMiddleware) — Compactação de respostas via GZip. - Security Headers (
TSecurityHeadersMiddleware) — Injeção de HSTS,X-Content-Type-Options,X-Frame-OptionseX-XSS-Protection. - Feature Flags (
Dext.FeatureFlags) — Gerenciamento dinâmico de chaves operacionais e rollouts graduais (IFeatureManager) com suporte a filtros estáticos booleans, percentuais de rollout (TPercentageFilter), janelas de tempo (TTimeWindowFilter), atributos declarativos ([FeatureGate]) e integração nativa com a infraestrutura de configuração do Dext (IConfiguration). - Reload de Feature Flags (S68) —
IFeatureManagerlêFeatureManagement:*ao vivo; o host habilita JSON/YAML com ReloadOnChange;TFeatureConfiguration.ReloadforçaIConfigurationRoot.Reload. - Forwarded Headers (
Dext.Web.ForwardedHeaders) — Validação segura de proxies reversos (X-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Host) lidos da direita para a esquerda com controle deKnownProxies, subredes CIDR e limite de encaminhamento contra IP Spoofing. - Antiforgery CSRF Protection (
Dext.Web.Antiforgery) — Proteção contra ataques Cross-Site Request Forgery via padrão Double Submit Cookie, validação de tokens em tempo constante contra timing attacks e suporte nativo a formulários SSR (WebStencils) e cabeçalhos HTMX (X-XSRF-TOKEN). - Base Path Hosting (
UsePathBase) — Suporte a hospedagem sob prefixo de caminho (app.UsePathBase('/myapp')), remoção automática do prefixo no pipeline (TDextPathBaseMiddleware), preenchimento deRequest.PathBasee gerador de URLRequest.ToAppUrl('/route'). Registro nativo de prefixos no kernel do HTTP.sys (http://+:8080/myapp/).
- HTTP Logging (
-
Parâmetros Dinâmicos — Rotas com
{id},{slug}, restrições de tipo. -
API Versioning —
THeaderApiVersionReader,TQueryStringApiVersionReader,TPathApiVersionReader,TCompositeApiVersionReader(composição de múltiplas estratégias). -
Descoberta HTTP QUERY — Roteamento automático de requisições OPTIONS gerando os cabeçalhos padrão
AlloweAccept-Querycontendo os tipos de mídia configurados para a consulta (ex:application/jsonpath). -
Roteamento por Árvore Radix (Trie) — Busca linear de rotas substituída por uma estrutura em árvore otimizada com
TRouteNode, alcançando complexidade de correspondência de caminhos de$O(L)$ (onde$L$ é a profundidade de segmentos) e resolução determinística. -
Backtracking de Segmentos — Suporte completo a segmentos fixos (literais), parâmetros de rota (
{param}) e parâmetros curinga com backtracking segmento a segmento para resolução de sobreposições. -
Mapeamento de Metadados de Requisição Zero-Allocation — Evita o encapsulamento dinâmico pesado com RTTI (eliminando alocações de dicionários e
TValueno heap) ao expor e atribuirEndpointMetadatadiretamente nas propriedades deIHttpContextdas rotas correspondidas.
- Hybrid Binding — Atributos
[FromBody],[FromQuery],[FromRoute],[FromHeader],[FromServices]. - Zero-Allocation — Deserialização UTF-8 direta para records e classes via
TByteSpan. - Multipart/Form-Data — Processamento de uploads via abstração
IFormFile. - Object Lifecycle Management — Tracking de objetos criados por Model Binding com integração ao ChangeTracker do ORM para transferência automática de ownership.
- Binding Problem Details (S68) — Falhas de conversão retornam HTTP 400 com
application/problem+json(Results.BindingProblem/ RFC 9457:type,title,status,detail,instance). - Auto-Validation Problem Details (S68) — Validação automática (atributos/fluente) no
THandlerInvokeremiteResults.ValidationProblem(application/problem+jsoncom mapaerrors). - Results.Accepted (S68) — Factory semântica HTTP 202 com cabeçalho
Locationopcional (mesmo padrão deCreated). - Results.UnsupportedMediaType (S68 P2-05 parcial) — Factory semântica HTTP 415 para rejeição de mídia no código da aplicação (ex.: extensão de upload).
- Content Negotiation —
IOutputFormatter/IOutputFormatterSelector/AddContentNegotiation. RespeitaAccept(formatter JSON embutido; formatters plugáveis para outros media types).
- IWebHost / IWebHostBuilder — Abstrações de hospedagem. Suporte a Portas Dinâmicas (Porta 0) com atribuição automática pelo SO.
- Server Adapters — Indy (padrão, OpenSSL/Taurus SSL), WebBroker Adapter (ISAPI/CGI para IIS/Apache), DCS Adapter (Delphi-Cross-Socket, non-blocking) e Native Server Engine (kernel-mode
http.sysno Windows e socketsepollnão-bloqueantes no Linux). - Parser HTTP Zero-Allocation (
TDextIocpHttpParser) — Parsing incremental dos cabeçalhos da requisição HTTP/1.1 diretamente dos buffers de rede sem alocações intermediárias na heap. - IHostedService — Tarefas de background com
StartAsync/StopAsync.TBackgroundServicecomExecute(ICancellationToken). - IHostApplicationLifetime — Tokens para
ApplicationStarted,ApplicationStopping,ApplicationStopped. ServerEngineOptions(Dext.Server.Engine.Types.pas) — Função de entrada global e helpers fluentes (WithHttps,WithSslCertHash,WithIoThreads,WithReceiveBufferSize) para configuração elegante de servidores HTTPS sem burocracia.TRestClient.IgnoreCertificateErrors / AllowSelfSigned(Dext.Net.RestClient.pas) — Interface fluente para controle explícito de validação de certificados SSL/TLS em clientes REST, permitindo conexões HTTPS com certificados auto-assinados de ambiente de desenvolvimento.
- Afinidade de Núcleo (CPU Pinning): Vinculação automática de threads de rede (
TDextEpollWorker) a núcleos de CPU dedicados viapthread_setaffinity_nppara reduzir trocas de contexto e degradação de cache. - Otimizações de Pré-Aceitação: Uso de
TCP_DEFER_ACCEPTno socket servidor para evitar desperdício de wake-ups eTCP_FASTOPEN(TFO) para suportar envio de dados no handshake SYN. - Transmissão Zero-Copy via sendfile: Transmissão direta de arquivos em sockets não-bloqueantes usando a chamada de sistema do kernel
sendfile, eliminando buffers e cópias em espaço do usuário. - Pool de Contexto Zero-Allocation: Reutilização de descritores de conexões (
TDextEpollContext) por meio de pools locais de cada thread de trabalho, evitando fragmentação do heap sob alta concorrência. - Varredura Ativa de Keep-Alive: Monitoramento ativo de inatividade de descritores fechando conexões ociosas (>15s) e configuração refinada de keep-alive a nível de kernel com opção de fechamento limpo via
SO_LINGER.
- IClaimsPrincipal — Autenticação JWT, Basic Auth (RFC 7617) e Cookies.
- Rate Limiting — Fixed Window, Sliding Window, Token Bucket, Concurrency Limiter. O Dext possui um motor nativo de segurança e identidade baseado nos padrões de mercado (JWT, OAuth2 e OpenID Connect), garantindo conformidade empresarial com alta performance.
- TJwtTokenHandler — Gerenciador completo de JSON Web Tokens (JWT) com suporte nativo à assinatura HS256 e validação assimétrica RS256.
- Integração com Windows CNG — Validação e assinatura de alto desempenho utilizando as APIs de criptografia nativas do Windows (
bcrypt.dll) de forma dinâmica, com fallback transparente paraSystem.Hash(Delphi XE8+) ou Indy/OpenSSL para máxima compatibilidade. - Parsing Otimizado — Análise estruturada de tokens JWT usando indexadores de string (
IndexOf) e spans de memória, eliminando alocações desnecessárias no heap. - Tratamento de Claims — Estrutura de Claims flexível (
TClaim) e builder fluente de identidades (TClaimsBuilder).
- TJwtAuthenticationMiddleware — Middleware de pipeline HTTP que extrai o token do cabeçalho
Authorization: Bearer, valida sua assinatura, tempo de expiração (exp), emissor (iss) e audiência (aud), e injeta o principal (IClaimsPrincipal) no contexto da requisição (IHttpContext.User).
- Atributos de Autorização —
[Authorize],[AuthorizePolicy]e[AllowAnonymous]para proteção declarativa de controllers e actions ([Authorize('Admin')]para roles/schemes;[AuthorizePolicy('Nome')]para políticas nomeadas — Delphi não tem named arguments em atributos). - Validação de Roles — Controle de acesso baseado em roles diretamente no fluxo de execução do dispatcher de rotas.
- Motor de Políticas — Registro e avaliação de políticas customizadas em runtime através do
TAuthorizationPolicyRegistry(ex: política de idade mínima ou escopos de acesso).
- Métodos Plug-and-Play — Extensões para configuração expressa de provedores externos via OIDC:
UseGoogleAuthentication,UseEntraIdAuthentication(Azure AD) eUseKeycloakAuthentication.
- SSE (Server-Sent Events) — Streaming unidirecional de eventos como fallback.
- WebSockets e Hubs SignalR — Motor nativo autônomo de WebSockets (RFC 6455) e Dext Hubs:
- Protocol Engine (
Dext.WebSocket.Protocol.pas): Processamento de framing RFC 6455 (wsText,wsBinary,wsPing,wsPong,wsClose), mascaramento/desmascaramento vetorizado, payload 64-bit e integridade. - Handshake Engine (
Dext.WebSocket.Handshake.pas): Validação de upgrade HTTP101 Switching Protocols, cálculo SHA-1/Base64 deSec-WebSocket-Accept. - Permessage-Deflate (
Dext.WebSocket.Compression.pas): Negociação e compressão RFC 7692 via ZLib nativo (até 80% de redução no payload). - Hubs Transport (
Dext.Web.Hubs.Transport.WebSocket.pas): Integração completa comDext.Web.Hubspara mensageria bidirecional em tempo real, dispatching de grupos (IHubClients), reconexão automática e heartbeats ping/pong. - Cross-Platform I/O: Executa sobre raw sockets com
epollno Linux eWSAPoll/IOCPno Windows.
- Protocol Engine (
- Cliente Hub Delphi (SignalR-compatible) — Biblioteca cliente nativa em Delphi (
Dext.Web.Hubs.Client) de alta performance, com suporte a transportes WebSocket e SSE, protocolos de negociação/handshake automáticos, heartbeat via ping e dispatches thread-safe com marshaling opcional para a thread principal (UI). - Caching — Motor de cache em memória e provedor de cache Redis nativo (
TRedisCacheStore). Gera chaves de cache exclusivas para requisições HTTP QUERY calculando um hashTHashSHA1do stream de corpo da requisição. Suporte para registro de cache de resposta no pipeline via.UseRedisCachenoTAppBuilder. Health Checks com probes/health,/health/live(liveness) e/health/ready(readiness) viaTHealthCheckMiddleware/THealthCheckOptions(S68).
- OpenAPI / Swagger — Geração automática de especificação.
- Auto-Migrations (S11) — Sincronização automática de schema durante startup com detecção de renomeação de tabelas/colunas via atributos.
- View Engine & WebStencils (S09) — Motor de templates baseado em AST (estilo Razor), zero-dependência.
Uma das features mais poderosas do Dext: geração automática de APIs REST completas a partir de entidades ORM — com uma única linha de código. Não é um scaffold que gera código — é um runtime handler que mapeia entities para endpoints dinamicamente.
- Automático por Atributo —
[DataApi]na entidade +App.MapDataApisno startup.TDataApi.MapAllescaneia RTTI e registra todas as entidades decoradas automaticamente. - Manual tipado —
TDataApiHandler<TProduct>.Map(App, '/api/products'). - Manual Fluente —
App.Builder.MapDataApi<T>(path, DataApiOptions.AllowRead.RequireAuth).
| Método | Rota | Handler |
|---|---|---|
GET |
/api/{entity} |
HandleGetList — Lista com paginação, ordenação e filtros |
GET |
/api/{entity}/{id} |
HandleGet — Busca por PK (simples ou composta) |
POST |
/api/{entity} |
HandlePost — Cria novo registro, retorna 201 |
PUT |
/api/{entity}/{id} |
HandlePut — Atualiza registro existente |
DELETE |
/api/{entity}/{id} |
HandleDelete — Remove registro |
- 11 operadores parseados automaticamente da URL:
_eq,_neq,_gt,_gte,_lt,_lte,_cont(LIKE %x%),_sw(LIKE x%),_ew(LIKE %x),_in(IN),_null(IS NULL). - Paginação —
?_limit=20&_offset=40com teto MaxPageSize (default 100; fluente.MaxPageSize(N),0desativa) — S68. - Ordenação —
?_orderby=price desc,name asc. - Resolução de nomes —
ResolvePropertyNameviaTReflection.GetMetadata().GetHandlerBySnakeCasepara converter snake_case da URL para PascalCase da propriedade Delphi. - Cada filtro gera um
IExpressionviaTStringExpressionParser.Parsee é injetado noISpecification— a mesma AST usada pelas Smart Properties.
- Segurança —
RequireAuth,RequireRole(roles),RequireReadRole(roles),RequireWriteRole(roles)— Separação de permissões read/write com validação JWT integrada viaIClaimsPrincipal. - Métodos Permitidos —
Allow([amGet, amGetList])restringe quais endpoints são gerados. - Multi-Tenancy —
RequireTenantpara isolamento por tenant. - Naming Strategy —
UseSnakeCase,UseCamelCasepara controle de casing na serialização. - Enum Style —
EnumsAsStrings,EnumsAsNumbers. - DbContext Explícito —
DbContext<TMyContext>para selecionar qual contexto usar. - SQL Customizado —
UseSql('SELECT ...')para queries customizadas. - Swagger —
UseSwagger,Tag('Products'),Description('...')para documentação automática.
- Auto-Discovery — Prefixo
Tremovido automaticamente viaTReflection.NormalizeFieldName. - Pluralização — Inglês:
y→ies,ch/sh/x/s→es, default→s(ex:TCategory→/api/category). - Rotas Customizadas —
[DataApi('/meu/caminho')]sobrescreve convenção. - Case Mapping —
PascalCasena propriedade Delphi →snake_casena URL para filtros.
- Resolução automática de tipo de PK — Delega ao
IModelBinderpara conversão transparente: Integer, String, TUUID, TGUID. - Composite Keys — Separador
|para chaves compostas (ex:/api/entity/1|ABC).
- DI Scope —
GetDbContextresolve oTDbContextdo DI container (suporta múltiplos contextos viaContextClass). - Telemetria —
TDiagnosticSource.Write('DataApi.ModelBinding.Start/Complete')emite eventos rastreáveis. - Logging — Todos os handlers emitem logs via
Log.Debug/Log.Errorcom structured templates. - Serialização —
TDextJson.Deserialize+TDextSerializercom settings configuráveis per-endpoint. - Swagger — Endpoints registrados aparecem automaticamente na documentação OpenAPI.
[DataApiIgnore]— Atributo para excluir entidades específicas do scan automático.
- Auto-Detection — O pipeline detecta automaticamente headers
HX-Requestvindos do navegador e suprime o layout global em endpoints compatíveis. - Partial Rendering —
Results.View<T>('fragment', Query).WithLayout('')para renderização de fragmentos parciais sem layout. - Full-Stack SPA Feel — Combina SSR server-side com substituições dinâmicas HTMX para apps altamente responsivos sem JavaScript pesado.
- O(1) Memory —
TStreamingViewIterator<T>itera sob demanda durante o@foreachdo template. 10.000 registros renderizados usando memória equivalente a um único objeto. - Sem
ToList— PasseDb.Customers.QueryAlldiretamente paraResults.View<T>('customers', Query)e o framework engata o streaming automaticamente. - Smart Properties in Templates —
@(Prop(item.Name))para unwrap automático deProp<T>dentro de templates HTML.
- Provider Nativo —
Services.AddWebStencils(...)com whitelist de entidades viaTWebStencilsProcessor.Whitelist.Configure. - Agnóstico — Mesma interface
IViewEnginepara Dext Template Engine e Web Stencils; troque sem alterar código.
O framework inclui suporte nativo à especificação HTTP/2 (RFC 9113) e ao algoritmo de compressão de cabeçalhos HPACK (RFC 7541), permitindo multiplexação de streams e comunicação de alta eficiência em conexões persistentes, servindo de base para implementações de alto desempenho como gRPC e Delphi Hub Client.
- Multiplexação Completa — Suporte a múltiplos streams lógicos independentes e concorrentes sobre uma única conexão TCP, eliminando o bloqueio de cabeça de fila (Head-of-Line blocking) no nível da aplicação.
- Tipos de Frames RFC 9113 — Implementação e decodificação rigorosa de frames
HEADERS,DATA,SETTINGS,RST_STREAM,PING,GOAWAYeWINDOW_UPDATE. - Controle de Fluxo por Stream & Conexão — Gerenciamento dinâmico de janelas de transmissão de dados (
WINDOW_UPDATE) para evitar saturação de buffer do receptor e otimizar throughput de rede. - State Machine de Conexões — Máquina de estados completa para gerenciar o handshake inicial (
SETTINGS), controle de encerramento amigável (GOAWAY), detecção de conexões ativas (PING) e fechamento prematuro de streams (RST_STREAM).
- Tabela Estática — Implementação completa da tabela estática de 61 entradas padrão da especificação RFC 7541 para mapeamento de cabeçalhos comuns.
- Tabela Dinâmica — Gerenciamento dinâmico de cabeçalhos adicionais com controle de tamanho máximo de buffer (padrão de 4096 bytes) e desalocação FIFO de entradas antigas conforme novos índices são inseridos.
- Codificação Huffman — Codificador e decodificador Huffman baseado em tabelas estáticas de árvores de bits para compressão eficiente de strings de texto enviadas nos nomes e valores dos cabeçalhos.
- Representações de Campo — Suporte completo para campos indexados, campos literais indexados (com ou sem atualização de tabela dinâmica) e literais nunca indexados.
- Suporte gRPC — Exemplo prático de transporte gRPC Unary demonstrando o processamento de corpos de mensagem binários no padrão Length-Prefixed Message (1 byte de flag de compressão + 4 bytes big-endian de tamanho do corpo + dados protobuf).
- Tratamento de Headers e Trailers — Emissão correta de cabeçalhos de resposta gRPC e envio final de trailers HTTP/2 (
grpc-status,grpc-message) em um frameHEADERScom flagEND_STREAM.
- TDbContext — Unit of Work with Change Tracking automático (estados: Added, Modified, Deleted, Unchanged). Identity Map para unicidade de instâncias por chave primária.
- DbSet<T> — Repository genérico. Operações:
Add,Update,Remove,Find,FirstOrDefault,Where,Include,ToList. - SaveChanges — Persiste todas as mudanças rastreadas em uma transação.
- Fluent Connection Setup & Pooling Auto-Detection — Construtores de conexão fluente (
UsePostgreSQL,UseFirebird, etc.) com sincronização e extração automática de parâmetros via setters de propriedade, eliminando bugs de opções vazias ou pooling desconfigurado. - Suporte a ConnectionDefName (FireDAC) — Suporte nativo para definições de conexão registradas no FireDAC (
UseConnectionDef). Resolve dinamicamente o dialeto, driver ID e status de pooling consultando oFDManager.ConnectionDefsglobal do FireDAC. - Suporte a Shadow Properties (Propriedades de Sombra) — Permite mapear colunas do banco (ex:
TenantId,CreatedAt,IsDeleted) que são processadas e persistidas sem precisar declará-las como campos ou propriedades físicas na classe.
- Query fluída com Projeção (Select) (
Select(array of string), projeções tipadas por propriedade), preservação de especificação no servidor, Paging (Skip/Take), Aggregates (Count,Sum,Max,Min,Average). - SQL Cache — Reaproveitamento de comandos SQL gerados para queries repetidas.
- Joins Fluentes Fortemente Tipados (
JoinInner,JoinLeft,JoinRight,JoinFull,JoinCross) — Compilam diretamente em joins SQL otimizados no banco de dados (INNER, LEFT, RIGHT, FULL, CROSS) usando expressões de condição explícitas, auto-resolução implícita via metadados de relacionamento (TModelBuilder), ou produto cartesiano via Cross Join. - Pessimistic Locking —
FOR UPDATEpara controle de concorrência. - Multi-Mapping (estilo Dapper) — Recursive hydration via atributo
[Nested]. - Integração com Validação Fluente — Verificação automática de entidades no
SaveChangesantes da execução das transações físicas no banco de dados.
- Fluent Specification Builder —
Where,OrderBy,Include,Take,Skippara regras de negócio desacopladas e reutilizáveis. - TExpressionEvaluator (
Dext.Specifications.Evaluator) — Avaliador in-memory da mesma AST usada pelo SQL Compiler. AvaliaIExpressioncontra objetos (TObject) ou dicionários (TDictionary<string, Variant>). Suporta: comparações (=,<>,>,>=,<,<=),LIKE(case-insensitive com%),IN/NOT IN,IS NULL/IS NOT NULL, operações bitwise (AND/OR/XOR), aritmética (+,-,*,/,mod,div), short-circuit emAND/OR. Faz unwrap automático deProp<T>(Smart Types) via RTTI. - TStringExpressionParser (
Dext.Specifications.Parser) — Parser que converte strings no formato"Campo Operador Valor"para nósIExpression. Conversão automática de tipos: Boolean, Float (invariant), Integer, String. Usado internamente pelo Database as API para transformar filtros da QueryString em expression trees. - IExpressionVisitor — Padrão Visitor para percorrer a árvore de expressão, usado tanto pelo SQL Compiler (gerando SQL) quanto pelo Evaluator (filtrando in-memory).
- One-to-One, One-to-Many, Many-to-Many.
- Lazy Loading via Proxy Objects (interceptação transparente).
- Eager Loading —
Include/ThenIncludepara pré-carregamento de grafos. - Split Queries Loading (Carregamento Dividido) — Resolução otimizada de coleções aninhadas via consultas SQL adicionais isoladas usando cláusulas
INcom IDs parametrizados, evitando explosão cartesiana de JOINS.
- Evolução Code-First automatizada com snapshots cronológicos do modelo de dados.
- PostgreSQL, SQL Server, MySQL, SQLite, Oracle, Firebird, InterBase.
- Legacy Paging — Envelopamento automático para
ROWNUMem Oracle/SQL Server antigos. - Driver Oracle (
TOracleDialect) — Suporte nativo a Oracle OCI via FireDAC:- Definição de colunas identity (
GENERATED BY DEFAULT AS IDENTITY). - Sintaxe nativa
RETURNING "ID" INTO :RET_VALpara recuperação de PK gerada. - Paginação automática com wrapper
ROWNUMem versões legadas e modernas. - Mapeamento preciso:
NUMBER(1,0)→Boolean/BoolType,NUMBER(4,0)→SmallInt/Int16Type,NUMBER(9,0)→Integer/IntType,NUMBER(18,0)→Int64/Int64Type,NUMBER(p, s)→Currency/Double,DATE→TDateTime(preserva hora),RAW(16)→TGUID/GuidType, e mapeamento de colunaJSON.
- Definição de colunas identity (
- Atributo Declarativo —
[SoftDelete('IsDeleted')]transformaRemove()emUPDATEautomático. - Valores Customizados —
[SoftDelete('Status', 99, 0)]para inteiros/enums. - HardDelete —
Db.Tasks.HardDelete(Task)para exclusão física. - Restore —
Db.Tasks.Restore(Task)para restaurar registros soft-deleted. - Query Filters Automáticos — Registros excluídos ficam invisíveis por padrão.
IgnoreQueryFilterspara ver tudo,OnlyDeletedpara a lixeira. - Soft Delete por Timestamp (
[DeletedAt]) — Converte automaticamenteRemove()em uma atualização definindo o timestamp atual, e gera filtrosIS NULLpara registros ativos (Issue #121). - IdentityMap Cleanup — Entidades soft-deleted são removidas do cache de memória após
SaveChanges.
- Atributo
[JsonColumn]— Marca propriedades string como colunas JSON.[JsonColumn(True)]para JSONB no PostgreSQL. - Query Fluente —
.Json('path')para consultar propriedades dentro de colunas JSON:Prop('Settings').Json('role') = 'admin'. - Propriedades Aninhadas —
Prop('Settings').Json('profile.details.level') = 5com notação de ponto. - IS NULL —
Prop('Settings').Json('nonexistent').IsNullpara chaves inexistentes. - Cross-Database — PostgreSQL (
#>>/ JSONB indexado), MySQL (JSON_EXTRACT/JSON_UNQUOTE), SQLite (json_extract+ JSON1), SQL Server (JSON_VALUE). - INSERT com Cast —
::jsonbautomático no PostgreSQL para[JsonColumn(True)].
- TDextBatchStrategyFactory — Seleção dinâmica de estratégias de batch
UPDATEeDELETEbaseadas emTDatabaseDialect. - Estratégia PostgreSQL (
TDextPostgresBatchStrategy) — Reescreve lotes deUPDATEem instrução únicaUPDATE table AS t SET ... FROM (VALUES (...), (...)) AS v(...) WHERE t.pk = v.pke deleções emWHERE (pk1, pk2) IN (...). - Estratégia MySQL / MariaDB (
TDextMySqlBatchStrategy) — Reescreve lotes deUPDATEem instrução únicaUPDATE table SET col = CASE WHEN pk = x THEN y END WHERE pk IN (...). - Estratégia Array DML Nativo (
TDextNativeArrayDmlStrategy) — Mantém binding de arrays nativo para Oracle OCI e Firebird 4+. - Desempenho — Elimina a emulação iterativa do Array DML do FireDAC em PostgreSQL e MySQL, reduzindo o tempo de latência de ~650 µs para ~118 µs por registro.
- Cross-Database — PostgreSQL (
#>>/ JSONB indexado), MySQL (JSON_EXTRACT/JSON_UNQUOTE), SQLite (json_extract+ JSON1), SQL Server (JSON_VALUE).
- Ponte ORM ↔ VCL/FMX — Conecta componentes (DBGrid, FastReport) a coleções
TList<T>de POCOs preservando a arquitetura limpa. - Zero-Allocation Memory — Acesso via offsets de memória mapeados pelo
TEntityMapelimina a necessidade de RTTI ou cópias de string a cada leitura de registro. LoadFromUtf8Json— Carregamento direto de streams/buffers JSON viaTByteSpansem conversão prévia de encoding.- Setup Automático (Parse AST) — Em design-time, as Verbs "Sync Fields" e "Refresh Entity" fazem o parse direto das units
.pase criam osTFieldsdinamicamente sem precisar compilar o projeto. - Live Data Preview (Híbrido) — A maior mágica da IDE: informando um
TFDConnectione umDataProvider, o Dext gera SQL dinâmico e exibe dados reais na Grid durante o desenvolvimento. Em runtime, esse SQL é completamente ignorado e o componente consome apenas as coleções injetadas. - Filtros por Expressão —
DataSet.Filter := 'Score > 100'suportado usando o mesmoTExpressionEvaluatordo framework in-memory. - Auto-Stabilization — A propriedade
Activenunca é serializada comoTrueno DFM; evita erros de instâncias ausentes em runtime. - DML Memory Mode — Operações de
Append,Edit,PosteDeleteoperam nativamente na lista subjacente na memória.
- TPH (Table-Per-Hierarchy) — Hidratação polimórfica automática baseada em discriminadores via atributos.
- Streaming Iterators (Flyweight pattern) — O(1) de memória para renderizar grandes volumes em views SSR.
TStreamingViewIterator<T>itera sob demanda durante o@foreachdo template. - Conversores automáticos para GUID, Enums, JSONB e UUID v7.
- Stored Procedures — Execução declarativa via
[StoredProcedure]e[DbParam]. - Multi-Tenancy — Banco Compartilhado (TenantId), Isolamento por Schema (
search_path), Tenant per Database. - Operações em Lote / Bulk — APIs em lote de alta performance:
AddRange,UpdateRange, eRemoveRangecom suporte a coleções genéricas brutas (TArray<T>,IEnumerable<T>) para persistência em massa em uma única transação de contexto, incluindo fatiamento automático configurável (com padrão de 100 registros, customizável viaWithBulkBatchSizenoTDbContextOptions) para otimizar pacotes de rede e respeitar limites de parâmetros do driver (ex: FireDAC). - Database Sequence Generators & HiLo (
Dext.Entity.Sequences) — Mapeamento declarativo de sequences através do atributo[Sequence('name', allocationSize)]ou via fluentUseSequence. Utiliza umTSequenceManagerthread-safe com otimizador Pooled-lo para pré-alocar blocos de chaves na memória, ativando inserções em lote (bulk) de alta performance para chaves primárias sequenciadas. Suporte a SQLite emulado via tabela dedicada (dext_sequences).
IgnoreQueryFilters(API Fluente) —Db.Users.IgnoreQueryFilters.ToList— ignora todos os filtros globais de query registrados (Soft Delete, Multi-Tenancy) para uma única chamada. Não afeta chamadas subsequentes.- Controle no Nível da Specification —
ISpecification<T>.IgnoreQueryFilterseISpecification<T>.IsIgnoringFilters: permite que classes de specification declarem a intenção, mantendo queries administrativas autocontidas e reutilízaveis. IsOnlyDeleted(Integração com Spec) —ISpecification<T>.IsOnlyDeletedpropagaa flag de query da lixeira pelo mesmo mecanismo, permitindo queOnlyDeletedseja declarado em uma spec.- Propagação com Escopo — Em
TDbSet<T>.ToList(ASpec), as flags da spec são propagadas para o estado internoFIgnoreQueryFilters/FOnlyDeletedantes da geração do SQL e redefinidas viaResetQueryFlagsem um blocofinally— garantindo isolamento entre chamadas. - Integração com SQL Generator —
TSQLGenerator<T>.GetSoftDeleteFilterretorna string vazia quandoFIgnoreQueryFilterséTrue.GetQueryFiltersSQLtambém sai cedo pelo mesmo motivo. - Padrão Admin Spec — Permite construir classes de specification dedicadas (
TAdminListSpec) que chamamIgnoreQueryFiltersno construtor, habilitando acesso declarativo e sem fricção a dados brutos.
Oferece controle de alterações distribuído e descompressão de rede.
- Rastreamento de Estados de Linha — Controle de modificações usando
TEntityRowStateexposto pela listaChanges(TEntityChange). - Tombstones para Exclusão — Preserva chaves primárias (
Key) dos registros excluídos, permitindo sincronizar remoções com o servidor. - Gestão Transacional — API nativa
AcceptChangespara consolidar o estado em memória pós-sincronização bem-sucedida.
- Roteamento Automático — Mapeamento via
MapEntityDataSet<T>expõeGETpara listagem ePOST/applypara persistência das alterações. - Persistência Customizável — Interface plugável
IEntityDataSetStoreintegrada ao ciclo transacional do ORM (DbContext.SaveChanges).
- Fluent API — Consumo de APIs sem componentes visuais. Métodos:
RestClient('url').BearerToken('...').Get<T>('/path').Await. - Factory de Requisições REST Fluente — Padrão de agrupamento usando
Client.Request.Get('/path')para isolar o modo de planejamento/builder, evitando o inchaço de escopo na raiz do cliente e limitações de tipo de retorno (Issue #119). - Payloads de Body sem Restrição — Suporte nativo à serialização de
recordeTArray<T>nos payloads de requisiçãoBody<T>e no helper de arrayBodyArray<T>, contornando limitações de restrições genéricas do compilador. - Deserialização de Records & Arrays — Deserialização nativa de arrays e objetos JSON diretamente em records e arrays dinâmicos (
TArray<T>) durante a execução de requisições. - Respostas Ergonômicas — Helper booleano
IRestResponse.IsSuccesspara verificação imediata de status codes na faixa200..299. - Connection Pooling — Reuso inteligente de instâncias
TNetHttpClient(pooling thread-safe), eliminando o overhead de handshakes TCP/SSL repetitivos e reduzindo drasticamente o uso de recursos do SO. - Auto-Serialization — Integração nativa com o motor JSON do Dext para hidratação de objetos e coleções genéricas (
IList<T>). - Async First — Totalmente integrado ao
Dext.Threading.Asynccom suporte aICancellationTokenpara cancelamento cooperativo e proteção contra Access Violations na UI. - Retry Logic — Recuperação automática com backoff exponencial e suporte a Async/Await.
- Typed Responses —
Client.Get<TUser>('/users/1')com deserialização automática. - Async Chaining —
Client.Get<TToken>('/auth').ThenBy<TUser>(...).OnComplete(...).Start. - Cancellation —
ICancellationTokenpara abortar requisições em andamento. - Pluggable Auth —
TBearerAuthProvider,TBasicAuthProvider,TApiKeyAuthProvider. - Thread Safety — Snapshot imutável da configuração no
Execute; execução isolada via pool. - Response Headers — Acesso completo via
GetHeader(case-insensitive) eGetHeaders(TNetHeaders array). - THttpRequestInfo — Integração com parsers
.httppara execução de requisições ad-hoc. - Campos de Formulário Multipart com Content-Type — Suporte para definição de tipos MIME específicos (ex:
application/json) para campos individuais de formulário em requisições multipart viaAddFormFieldeAddMultipartField(Issue #125). - Parâmetros de Consulta Condicionais — Suporte para adição fluente de parâmetros de consulta condicionais (
QueryParamIfNotEmpty,QueryParamIfe sobrecargas com valores padrão fallback) para simplificar a construção de requisições (Issue #123). - Compatibilidade Legada e Fallback Indy — Abstração completa do motor HTTP (
IDextHttpEngine) com fallback automático via Indy (TIdHTTP) para IDEs antigas (Delphi XE2 a XE7), ativado em versões inferiores ao XE8 ou sob a diretivaDEXT_FORCE_INDY. Requisição de OpenSSL DLLs para chamadas HTTPS legadas. - Negociação Automática — O
TRestClientsinalizaAccept-Encodinge realiza a descompactação viaTZDecompressionStreamde forma transparente. - Preservação de Stream Bruto — Mantém o stream compactado original
disponível em
RawContentStreampara inspeção e auditoria.
- Bearer Token (JWT) — Envio automático de
Authorization: Bearer <token>. - Basic Auth (RFC 7617) — Encoding Base64 de
user:password. - API Key — Header ou query string customizável.
- OAuth 2.0 Client Credentials (RFC 6749 §4.4) — Token caching automático, refresh thread-safe com margem de segurança de 30s para evitar uso de tokens expirados.
O Dext inclui uma biblioteca cliente nativa e de alta performance para o Redis, suportando os protocolos RESP2 e RESP3. Ele conta com otimizações de parsing zero-allocation, connection pooling integrado, pipelines assíncronos de comandos via TAsyncTask e processamento de Pub/Sub concorrente utilizando canais.
- Parser Zero-Allocation — O
TDextRedisParseranalisa os streams de bytes RESP sem alocações desnecessárias no heap usando spans de memória (TByteSpan). - Novos Tipos do RESP3 — Suporte nativo para os novos tipos de retorno do RESP3: Nulos (
_), Booleanos (#) e Double Floats (,).
- TDextRedisConnectionPool — Pool de conexões seguro e concorrente (
IStack<TDextRedisConnection>) para evitar custos de conexão repetida e gerenciar recursos de forma eficiente. - Comandos Thread-Safe — Gerenciamento transparente na aquisição e liberação das conexões durante chamadas concorrentes ao cliente.
- TDextRedisPubSub — Motor de Pub/Sub assíncrono integrado com canais concorrentes do Dext (
IChannel<TDextRedisMessage>) para despacho seguro de mensagens entre threads.
- Suporte ao Módulo RedisJSON — Integração nativa com a engine
Dext.Jsonpara serializar e deserializar objetos complexos em Delphi diretamente de e para o servidor Redis.
- Abstração Unificada de TLS — Definições de
IDextTLSEngine,IDextTLSContextProvidereIDextTLSStreampara desacoplamento de transporte. - Motor OpenSSL 3.x Memory BIO — Zero-copy/lock-free TLS handshake e framing criptografado em memória para sockets TCP assíncronos (
epollno Linux eIOCPno Windows). - Integração HTTP.sys & Windows Schannel — Suporte nativo a bindings HTTPS e certificados do Windows Certificate Store sem DLLs externas.
- Taurus TLS & Indy SSL — Provedor de TLS 1.3 / OpenSSL 3.x (
TDextTaurusTLSContext) para servidores Indy. - Suporte SSL no TDextRedisClient (
rediss://) — Envoltório TLS transparente para o cliente Redis nativo. - Ferramenta CLI dev-certs (
dext dev-certs https) — Gerador CryptoAPI nativo em Pascal para certificados RSA X.509 de desenvolvimento com extensão SAN (localhost,127.0.0.1) e registro automático no Root Certificate Store.
O framework inclui suporte para desacoplamento de transporte no servidor IOCP/Epoll para exposição de sockets TCP/UDP puros e uma implementação nativa do protocolo MQTT v3.1.1 (cliente e broker) para mensageria assíncrona.
- Desacoplamento de Engine — Abstração de conexões físicas (
IDextTransportConnection) e manipulador customizado (IConnectionHandler) que permite interceptar conexões puras de rede diretamente na engine IOCP/Epoll sem passar pelo parser de requisições HTTP.
- TDextTcpServer & TDextTcpClient — Servidor TCP baseado nas engines assíncronas do Dext e cliente leve com controle de timeouts de leitura e escrita.
- TDextUdpServer & TDextUdpClient — Componentes UDP para transmissão rápida de pacotes, com suporte a spans de bytes e callback assíncrona de recebimento.
- Encoder/Decoder Binário — Parser de alta performance com codificação e decodificação eficiente de inteiros de comprimento variável (Remaining Length) e suporte para todas as mensagens de controle MQTT (CONNECT, CONNACK, PUBLISH, PUBACK, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, PINGREQ, PINGRESP, DISCONNECT).
- Roteador Trie Tree — Árvore Trie customizada para correspondência eficiente de tópicos com suporte completo aos coringas de nível único (
+) e múltiplos níveis (#). - Broker Server e Client — Servidor broker concorrente com suporte a sessões limpas e controle de assinaturas, e cliente assíncrono com thread de recebimento dedicada e keep-alive automático via ping/pong.
Implementação do protocolo de transporte binário de alta performance.
- TProtobufSerializer — Engine de serialização binária de alta velocidade e zero alocação no heap para Protocol Buffers (proto3).
- Formatadores Específicos — Suporte a formatação Varint, Fixed32, Fixed64 e Length-Prefixed usando a abstração de memória de alto desempenho
TSpan. - Marshalling via RTTI — Serialização direta de objetos Delphi baseada em mapeamento de atributos
[ProtoMember]e ordinais de campo.
- TGrpcCodec — Implementação do codec de enquadramento (framing) para mensagens gRPC Length-Prefixed Message (LPM).
- Suporte a Compressão — Tratamento do flag de compressão de 1 byte seguido de tamanho em big-endian de 4 bytes para entrega segura em streams HTTP/2.
- TGrpcDispatcher — Decodificador de frames HTTP/2 que despacha requisições
application/grpcpara os respectivos métodos e classes de serviço registrados. - Mapeamento RTTI — Resolução e chamada dinâmica de serviços baseados em interfaces usando tabelas de roteamento otimizadas.
- TEntitygRpcProvider — Provedor de sincronização remota gRPC integrado para
TEntityDataSet, possibilitando persistência bidirecional estruturada. - TgRpcClient — Cliente gRPC de baixo nível responsável pelo transporte de streams Protobuf e recebimento de payloads binários de resposta.
Publish/Subscribe in-process inspirado no MediatR (Dext.Events). Handlers respeitam o ciclo de vida do DI (handlers Scoped compartilham o contexto da request).
- IEventBus — Barramento central de eventos in-memory para desacoplamento total entre produtores e consumidores.
- IEventHandler<T> — Interface tipada para handlers de eventos. Múltiplos handlers por tipo de evento, executados em ordem de registro.
- IEventPublisher<T> — Fachada ISP (Interface Segregation Principle) para componentes que publicam apenas um tipo de evento.
- Dispatch Síncrono —
IEventBus.Dispatchinvoca todos os handlers e retornaTPublishResultcom estatísticas (HandlersInvoked,HandlersFailed,HandlersSucceeded). - Dispatch Assíncrono —
DispatchBackgroundexecuta handlers em thread separada com escopo DI isolado (fire-and-forget). - TEventBusExtensions — Helpers estáticos genéricos
Publish<T>ePublishBackground<T>que fazem boxing do evento paraTValuee delegam aoIEventBus.
- IEventBehavior — Middleware cross-cutting para o pipeline de eventos. Método
Intercept(AEventType, AEvent, ANext)— chamarANext()continua o pipeline; omitir short-circuits. - TEventLoggingBehavior — Logging estruturado via
ILogger. Debug antes/depois do handler com elapsed time. Error com re-raise em falhas. - TEventTimingBehavior — Debug-only, registra tempo de dispatch via
OutputDebugString. - TEventExceptionBehavior — Wrapping estruturado de exceções em
EEventDispatchExceptioncom nome do tipo de evento. Re-raise preserva contexto original. - Behaviors Globais vs Per-Event — Globais aplicam-se a todos os eventos; Per-event aplicam-se apenas ao tipo específico e executam DENTRO dos globais.
Services.AddEventBus— RegistraIEventBuscomo Singleton (cada Publish cria escopo DI filho).Services.AddScopedEventBus— Registra como Scoped (handlers compartilham o mesmo escopo, ideal para web requests com DbContext compartilhado).Services.AddEventHandler<TEvent, THandler>— Registro tipado de handler com auto-registro Transient (respeita registros existentes).Services.AddEventBehavior<T>— Behavior global.AddEventBehaviorFor<TEvent, T>— Behavior per-event.Services.AddEventPublisher<T>— RegistraIEventPublisher<T>transient para injeção ISP.Services.AddEventBusLifecycle— RegistraTEventBusLifecycleServicecomoIHostedService.
- TEventBusLifecycleService — Background service que escuta
IHostApplicationLifetimee publicaTApplicationStartedEvent,TApplicationStoppingEvent,TApplicationStoppedEventnoIEventBus. - Hosting Bridge (
Dext.Hosting.Events.Bridge) —THostingLifecycleEventBridgepara integração com o background services builder viaAddLifecycleEvents.
- TEventBusTracker —
IEventBusfalso para testes: grava cada publish em lista tipada.DispatchBackgroundé síncrono. - Registro no DI —
TEventBusTracker.Register(Services, Tracker)no lugar deAddEventBus, encadeável comAddEventPublisher/AddTransient. - Asserções —
HasPublished<T>,PublishedCount<T>,LastPublished<T>,GetPublished<T>,Clear.
- EEventDispatchAggregate — Exceção agregada contendo
Errors: TArray<string>com uma entrada por handler que falhou. Todos os handlers sempre são invocados antes do raise.
- CLI Runner —
dext testexecuta a suíte do projeto. Em Windows,--coveragegera HTML/XML edext_coverage.xml(SonarQube coverage) via Delphi Code Coverage. O host vivo da suíte é o Dext Test Explorer (S36 / seção 7.7), não um dashboard web embutido. - Fluent Runner API (
Dext.Testing.Fluent) — Configuração programática:TTest.Configure.Verbose.RegisterFixtures([...]).Run. O exe da suíte já lê-filter:,-category:,-fixture:,-junit:,-html:,-json:.
Permite a escrita de testes sem herança de classes base, usando metadados RTTI.
- Core Attributes —
[Fixture],[Test],[Fact],[TestClass]. - Lifecycle Management —
[Setup],[TearDown],[BeforeAll],[AfterAll],[AssemblyInitialize],[AssemblyCleanup]. - Data-Driven Testing —
[TestCase(A, B, Expected)]— Testes parametrizados inline.[TestCaseSource('MethodName')]— Provedores de dados dinâmicos via método.
- Execution Filters & Control —
[Ignore('Reason')],[Skip('Reason')]— Pular testes.[Explicit]— Testes executados apenas se selecionados nominalmente.[Category('Tag')],[Trait('Name', 'Value')]— Categorização e filtragem.[MaxTime(ms)]— Aviso se o teste passar do orçamento (não falha).[Repeat(n)]— Repete o método n vezes.[Priority(n)]— Ordem de execução (menor número primeiro). Não é filtro de CLI.[Platform('Windows, Linux')]— Restrição por sistema operacional.
API fluente baseada no padrão Should(Value).
- Typed Assertions — Métodos específicos para
ShouldString,ShouldInteger,ShouldDouble(aproximação),ShouldBoolean,ShouldDateTime,ShouldGuid,ShouldUUID,ShouldObject. - List/Collection Assertions —
Should(List).HaveCount(5).Contain(X).OnlyContain(Predicate).AllSatisfy(Predicate). - Structural Comparison —
BeEquivalentTofor deep object and collection comparison (order-independent). - Soft Asserts —
Assert.Multiple(procedure ... end)to collect multiple failures in a block before interrupting the test. - Action Assertions —
Should(Proc).Throw<EException>().WithMessageContaining('...').
TDextApplicationFactory<TApp>/TDextWebApplicationFactory<TApp>— MontaTWebApplicationcomWithTestServices/WithConfigure.CreateClient: IDextTestHttpClient— GET/POST/PUT/DELETE in-process (sem TCP); despacha viaTWebApplication.BuildRequestPipeline.IDextTestHttpResponse— StatusCode, ContentType, Body, headers.
MatchSnapshot('name')— Verificação de objetos complexos e payloads JSON via comparação de baselines em disco.- Pasta — Baselines em
{ExeDir}\Snapshots\(não__snapshots__/). - Structural JSON Compare — Comparação inteligente que ignora formatação e ordem de propriedades em JSON.
- Update Mode — Variável de ambiente
SNAPSHOT_UPDATE=1para atualizar baselines.
- Dynamic Proxies —
TProxy(Interfaces) eTClassProxy(Classes com métodos virtuais) viaTVirtualInterfaceeTVirtualMethodInterceptor. - Fluent Mocking —
Mock<T>.Setup.Returns(Val).When.Method(Args). - Argument Matchers —
Arg.Any<T>,Arg.Matches<T>(Arg.&Is<T>),Arg.IsNil<T>,Arg.IsNotNil<T>. - Verification —
Received(Times.Once),Received(Times.AtLeast(n)). - Auto-Mocking —
TAutoMockerfor automated mock injection into the DI container during unit tests.
- Multi-Format Export — JUnit XML, xUnit XML, TRX (Azure DevOps), HTML (Dark Theme), JSON.
- SonarQube Integration — Geração de relatórios de cobertura de código e falhas compatíveis com Quality Gates.
- Integração TestInsight Desacoplada (
Dext.Testing.TestInsight) — Gancho de execução e ouvinte desacoplado para o plugin TestInsight que direciona execuções e envia resultados para a IDE de forma transparente, eliminando acoplamento em tempo de compilação. - Decoupled Test Runner Integration & Registry (
Dext.Testing.Integration) — Registro por linha de comando e processamento de parâmetros para execução desacoplada do executor de testes a partir da IDE ou da CLI, sem dependências de BPLs intermediárias. - Native DUnitX Integration (
Dext.Testing.DUnitX) — Adaptador de runner desacoplado para DUnitX que trafega resultados, status em tempo real e filtros via HTTP/SSE locais para o Expert Dext Test Explorer. - Native DUnit Integration (
Dext.Testing.DUnit) — Adaptador de runner desacoplado para DUnit que registra ouvintes customizados para trafegar resultados, metadados de tempo de execução e streams de execução para o Dext Test Explorer. - Native DUnit2 Integration (
Dext.Testing.DUnit2) — Adaptador de runner desacoplado usando interfaces proxy para trafegar resultados em tempo real e hierarquia de suites do DUnit2 para o Dext Test Explorer. - Test Context Injection —
ITestContextinjetável via parâmetro paraWriteLine,AttachFile(screenshots) e metadados de execução. - Histórico por método no Test Explorer (
TTelemetryTrackeremDext.Testing.Design.DockableForm) — Arquivo{projeto}\.dext\testing\history.json(até 1000 linhas). O painel Details marca teste flaky e regressão de duração. Não é o JSON de totais da suíte. TTestHistoryManager(Dext.Testing.History,dext_test_history.json) — Totais por run (passed/failed/skipped/duration, últimas 50). Hoje só o dashboard sidecar consome. O Explorer ainda não mostra essa série — backlog S75 F-10.- Telemetria de Testes OpenTelemetry (
Dext.Testing.Listeners.Telemetry) — Listener integrado de telemetria enviando métricas de execução de testes (test_duration_ms,test_count_passed,test_count_failed) para coletores OpenTelemetry.
- Dext Test Explorer Dockable Window (
Dext.Testing.Design.DockableForm) — Janela ancorável nativa no RAD Studio exibindo árvore interativa de suítes, filtros por status e busca. Histórico por método no Details (flaky / duração). Totais da suíte ao longo das runs: S75 F-10. - Gutter Margin Icons (
Dext.Testing.Design.Gutter) — Marcas visuais interativas na margem esquerda do editor de código do RAD Studio (verdes para sucesso, vermelhas para falhas). - Servidor HTTP/SSE Local da IDE (
Dext.Testing.Design.Server) — Servidor de comunicação em tempo real embutido no Expert que recebe o fluxo de execução dos testes sem BPLs intermediárias. - Visualizador de Cobertura de Código (
Dext.Testing.Design.Coverage) — Destaque direto no editor das linhas de código cobridas por testes via parsing AST (Dext.Testing.Design.AST).
O Dext é validado continuamente por uma infraestrutura de testes massiva para garantir a integridade entre seus subsistemas:
- Estatísticas de Engenharia — O projeto ultrapassa 200.000 linhas de código Pascal puro (excluindo templates e documentação), refletindo um investimento massivo em estabilidade e abstrações de alto nível.
- Cobertura Massiva — Centenas de suítes de testes com milhares de asserções individuais validando desde o Core (Memory, Collections) até integrações complexas de Web e ORM.
- Matriz Multi-DB (ORM) — O motor de persistência é testado exaustivamente em uma matriz real de 5 bancos de dados: PostgreSQL, SQL Server, MySQL, SQLite e Firebird.
- Stress & Concurrency Testing — Validação de coleções concorrentes, canais e async tasks sob alta carga para garantir ausência de Race Conditions.
- Evidências de Campo — Framework validado em projetos reais com deploy em AWS e Azure, e sistemas de gestão fiscal processando picos de ~800.000 requisições diárias.
- CI/CD — Relatórios JUnit / xUnit / TRX / HTML / JSON e cobertura SonarQube (
dext_coverage.xml) para pipelines Azure DevOps e GitHub Actions.
- ITemplateEngine — Interface principal:
Render(template, context)eRenderTemplate(name, context). - TDextTemplateEngine — Implementação completa com parser de AST (Abstract Syntax Tree). Cada diretiva é compilada em um nó (
TTemplateNode) com métodoRender. - ITemplateContext — Contexto hierárquico com valores string, objetos e listas.
CreateChildScopepara escopo aninhado.
- ITemplateLoader — Interface plugável para carregamento de templates. Implementações: FileSystem e In-Memory.
TTextNode(texto literal),TExpressionNode(interpolação{{ var }}),TIfNode/TElseIfNode/TElseNode(condicionais),TForEachNode(iteração com@index,@first,@last),TBlockNode(blocos nomeados),TExtendsNode(herança de layout),TSectionNode(seções),TMacroNode(macros reutilizáveis),TBreakNode/TContinueNode(controle de fluxo em loops).
- Parser de expressões com suporte a operadores aritméticos, comparação, lógicos (
and,or,not). - Chained Filters —
{{ value | upper | truncate(10) }}com pipeline de filtros. - Filter Registry (
ITemplateFilterRegistry) —RegisterFilter(name, func)para filtros customizados. - Built-in Filters —
upper,lower,capitalize,truncate,default,date,html_escape, etc.
- Layout Inheritance —
{% extends "base.html" %}com override de blocos. - Whitespace Control —
{%- -%}para controle de whitespace em diretivas. - HTML Mode —
IsHtmlModepara auto-escaping de output. - Source Position Tracking —
TSourcePoscom linha, coluna e filename para error reporting preciso. - ETemplateException — Exceções com posição e snippet do template para debugging.
- Attribute-Based Validation — Decoradores RTTI:
[Required],[StringLength(min, max)],[Range(min, max)],[RegularExpression(pattern)],[EmailAddress],[Url]. - Fluent Validation API — Classe base de validação fortemente tipada
TAbstractValidator<T>que implementaIValidator<T>como uma alternativa moderna ao FluentValidation do C#. - Fluent Rule Builder — Record
TValidationRuleBuilder<T>extremamente eficiente em memória que evita alocações na heap ao construir regras de validação encadeadas (Required,Length,Range,EmailAddress,Matches,MatchesPattern,Must,When). - Integração com Smart Properties — Sobrecargas concretas de
RuleForpara propriedades inteligentes padrãoProp<T>(ex:Prop<string>,Prop<Integer>,Prop<Boolean>, etc.) para extrair automaticamente nomes de propriedade a partir de entidades fantasmas de protótipo (Prototype.Entity<T>) sem magic strings ou problemas de coerção implícita de tipos. - Pattern Registry — Registro
TValidationPatternsmapeando chaves para expressões regulares específicas de localização (ex: telefone e CEP para Pt-BR ou En-US). - TValidator — Helper não-genérico:
Validate(obj)retornaTValidationResultcom lista deTValidationError(campo + mensagem). - TValidator<T> — Versão genérica tipada.
- Custom Validators — Herança de
ValidationAttributepara regras de negócio customizadas. - Integração Web — Resolução automática de validadores registrados (
IValidator<T>) a partir do container de Injeção de Dependências (DI) dentro do pipeline de model binding Web (THandlerInvoker.Validate), gerando exceçõesTWebValidationExceptionque retornam payloads JSON/HTMX de erro estruturados.
- TMapper — Fachada estática e registro centralizado para mapeamento objeto a objeto usando RTTI Delphi.
- Configuração de Mapeamento Fluente — Record
TTypeMapConfig<TSource, TDest>com suporte a mapeamentos customizados via sintaxe fluente:ForMember(DestName, MapFunc)— Define funções de mapeamento customizadas para converter valores da origem para o destino.Ignore(DestName)— Evita a cópia de propriedades específicas.
- Mapeamento de Instância —
TMapper.Map<TSource, TDest>(Source)instancia e retorna uma nova classe de destino mapeada. - Mapeamento Em-Lugar —
TMapper.Map<TSource, TDest>(Source, Dest)mapeia as propriedades da origem sobre uma referência de objeto de destino existente. - Mapeamento de Coleções —
TMapper.MapList<TSource, TDest>(SourceList)mapeia listas e coleções genéricas automaticamente. - Mapeamento de Records — Copia campos e propriedades equivalentes entre classes e records.
- Otimização de Valores Padrão — Parâmetro
AOnlyNonDefaultpara mapear apenas valores não-padrão (evitando sobrescrever valores previamente inicializados no destino). - CreateMap<TSource, TDest> — Registro de mapeamento com reflexão automática de propriedades por nome (complementa o
TTypeMapConfigacima).
- ITenantProvider — Abstração para identificação do tenant atual.
- ITenantConnectionStringProvider — Resolução dinâmica de connection strings por tenant.
- Estratégias — Shared Database (discriminador TenantId), Schema Isolation (
search_pathno PostgreSQL), Database per Tenant. - Filtros Tenant em DML (S68) —
GenerateUpdate/GenerateDelete(e templates batch) acrescentamAND TenantId = :…para entidadesITenantAwareviaITenantProvider(respeita.IgnoreQueryFilters). - Integração DI — Registro como serviço Scoped para resolução por request.
- ISimpleNavigator — Navegação Push/Pop/Replace/PopUntil com passagem de dados via
TValue. - 3 Adapters —
TCustomContainerAdapter(embutir frames em painel),TPageControlAdapter(tabs),TMDIAdapter(janelas filhas). - Middleware Pipeline —
TLoggingMiddleware,TAuthMiddleware,TRoleMiddleware— mesma arquitetura do Web pipeline. - Lifecycle Hooks —
INavigationAwarecomOnNavigatedTo(Context)eOnNavigatedFrom. - DI Integration — Navigator registrado como serviço Singleton no container.
- Two-Way Binding por Atributos —
[BindEdit('Name')],[BindCheckBox('Active')],[BindText('ErrorMessage')]. - Nested Properties —
[BindEdit('Customer.Address.City')]com notação de ponto. - Message Dispatch —
[OnClickMsg(TSaveMsg)]elimina handlersOnClickmanuais. - Custom Converters —
IValueConvertercomConvert/ConvertBackpara tipos complexos (ex:TCurrencyConverter). - TBindingEngine — Motor central que sincroniza ViewModel ↔ UI automaticamente.
- Arquitetura limpa com ViewModel + Controller + DI.
- Integração com Validação —
FViewModel.Validatecom erros automaticamente refletidos na UI via binding.
- Interception Engine — Motor de proxy para intercepção de métodos, base para Mocks e recursos de AOP (Aspect-Oriented Programming).
- Design-Time Experts — Data Preview em IDE Grid e editores de propriedades especializados para metadados.
- Integração via TSelectionEditor — Menus de contexto não invasivos para
TFDConnectioneTDataSet(FireDAC e Genérico). Os menus do Dext coexistem com os menus nativos da IDE. - TTableSelectionForm — Interface de seleção avançada com filtro em tempo real, atalhos "Selecionar Tudo/Nenhum" e contadores dinâmicos de tabelas/seleção.
- Live Scaffolding Preview — Janela de preview de alta fidelidade com geração de código em tempo real, estatísticas (Entidades/Metadados/Linhas) e troca de estilo (POCO vs. Smart).
- Smart PascalCase Engine — Lógica de nomenclatura consciente de acrônimos (
EmployeeID→EmployeeId,ReportsTopreservado) com suporte a normalização desnake_caseeALL_CAPS. - Inferência de Metadados Avançada — Detecção precisa de AutoInc via RTTI e
ftAutoInc, garantindo paridade 1:1 com o schema do banco de dados. - Automação IOTA — Criação fluida de novas units em memória e associação automática com o projeto Delphi ativo.
- Dext CLI (S01) — Motor CLI unificado (
dext.exe) para gerenciamento de projetos e automação de desenvolvimento. - Advanced Scaffolding — Geração de projetos e arquivos via templates inteligentes:
dext new(projetos),dext scaffold(controllers, entidades ORM, DTOs, middlewares). dext dev-certs— Provisionador nativo CryptoAPI de certificados X.509 de desenvolvimento local com extensão SAN e registro automático no Root Certificate Store.dext test --coverage— Executor da suíte com cobertura de código via.map(Windows). Gera HTML/XML do Delphi Code Coverage edext_coverage.xml(SonarQube coverage) automaticamente. Sem flag--sonarà parte.dext migrate [up|down|list|generate]— Gerenciador CLI de migrações de esquema de banco de dados para o Dext ORM.dext doc— Geração automatizada de documentação técnica estática HTML e mapas visuais de rotas.dext ui— Dashboard web local de configuração do projeto (não é monitor da suíte de testes).dext index— Mapeamento e indexação de todos os símbolos públicos (classes, records, interfaces, métodos) em Markdown, JSON e CSV otimizados para consumo por agentes de IA e NotebookLM.- Scaffolding com resolução automática de schema em maiúsculas para metadados Oracle (
MetaCurSchema,MetaDefSchema), como no índice em inglês.
- TDiagnosticSource (S03) — Publicador de eventos centralizado baseado em payloads JSON, garantindo desacoplamento entre produtores (ORM, Web) e consumidores. Observadores interceptam o ciclo de vida HTTP e a execução SQL sem acoplar monitoramento à regra de negócio.
- Activity Tracking — CorrelationId / rastreamento de atividades para depuração de fluxos complexos e distribuídos.
- Dext Sidecar (
DextSidecar.exe) — Aplicação nativa acoplada para monitoramento em tempo real (Dext.Services.FileWatcher.pas), streaming de logs (Dext.Sidecar.LogStreamer.pas), servidor web de telemetria (TSidecarServer) e interface System Tray VCL (Dext.Vcl.TrayIcon.pas). - Telemetry Bridge (
Dext.Logging.Telemetry) — Integração automática comILogger, permitindo visualizar telemetria HTTP e SQL no console ou arquivos de log. - SQL Capture — Extração e formatação de instruções SQL nativas do ORM para auditoria em tempo real.
- HTTP Life-cycle — Tracing de latência, códigos de status e rotas do framework web.
- Stack Trace Extraction (
Dext.Core.Debug) — Extração precisa e detalhada do stack trace no momento da exception. Fundamental para debugar um framework altamente integrado onde o fluxo de execução é dinâmico e o mesmo erro pode ter origens completamente diferentes dependendo do contexto.
O framework inclui uma suíte de observabilidade premium, de alta performance e assíncrona, para coleta, armazenamento e visualização de logs estruturados, spans distribuídos, métricas do sistema e profiling de chamadas de banco de dados e conexões de rede externas.
- Ring Buffer Assíncrono — Pipeline de logs estruturados e spans armazenados em ring buffer de alta performance na memória (limite de 1000 itens) para evitar gargalos de I/O em threads de execução HTTP.
- Persistência Assíncrona — Thread de background dedicada (
TDashboardSaveTimer) que descarrega periodicamente os logs paratelemetry.jsona cada 30 segundos de forma não-bloqueante. - Visualização Gantt Hierárquica — O Dashboard renderiza em tempo real a árvore de spans sob o contexto de trace pai (
TraceId/SpanId), permitindo analisar tempos de resposta e gargalos de processamento de forma sequencial.
- RED Metrics & Performance — Gráficos em tempo real no Dashboard monitorando HTTP RPS (Requisições por Segundo), SQL QPS (Queries por Segundo), HTTP Errors e Latência média de processamento.
- System Health Monitor — Coleta e amostragem de dados do sistema operacional: uso de CPU (%), consumo de memória física (Working Set em MB), contagem de threads ativas no processo e conexões de banco ativas.
- Persistência Não-Bloqueante — Métricas serializadas em buffer circular e gravadas a cada 30s em
metrics.jsonvia timer assíncrono.
- Auto-Instrumentação FireDAC — Interceptação automática nas camadas do driver de banco de dados (
Dext.Entity.Drivers.FireDAC.pas). Captura comandos SQL (db.statement), serialização de parâmetros de queries (db.params), elapsed time de execução do comando e captura automática de exceções nativas. - Auto-Instrumentação Outbound HTTP — Interceptação de chamadas de rede no cliente REST (
Dext.Net.RestClient.pas), capturando URL de destino, método HTTP, tempos de resposta de rede, códigos de status e tratamento de falhas. - Context Inspector Drawer — Painel deslizante no Dashboard que abre ao clicar em caixas de spans na árvore. Exibe a query SQL formatada, os parâmetros do banco estruturados, cURL pronto para cópia da chamada HTTP, e metadados adicionais.
- IStreamableSessionManager — Gerenciador de canais SSE com limpeza de sessões expiradas (Garbage Collector a cada 60s expulsando sessões inativas após 30 minutos).
- HTMX Fragment Swap — Endpoints que expõem fragmentos HTML dinâmicos (como
/sidecar/fragments/metrics) permitindo atualização visual direta no DOM em tempo real via HTMX sem escrever código JavaScript.
- Native AI Skills — Arquivos de instrução modulares (
dext-web.md,dext-orm.md,dext-auth.md) que ensinam assistentes de IA (Cursor, Antigravity, Copilot, Claude) a gerar código idiomático Dext. - 3 modos de integração — Cópia direta para
.agents/skills/, configuração global customizada, ou symlinks. - Modular por Design — Skills atômicos para poupar tokens de contexto; carregue apenas o módulo relevante para a feature atual.
- Compatibilidade — Claude Code, Cursor, Antigravity, Cline, OpenCode, GitHub Copilot.
O framework fornece uma implementação nativa e sem dependências da especificação MCP 2025-03-26, permitindo que aplicações Dext exponham ferramentas, recursos e prompts para agentes de IA (como Claude Desktop e Claude Code).
- Transportes Suportados —
HTTP Streamable(POST síncrono com sessões),SSE(Legado Server-Sent Events) eStdio. - API RTTI Declarativa —
TMCPToolProvidercom atributos[MCPTool],[MCPParam],[MCPResource]e[MCPPrompt]para registro de endpoints sem fricção. - API Builder Fluente — Registro encadeado:
Server.Tool('nome').Description('...').OnCall(...). - Tipos de Conteúdo Ricos — Suporte integrado para
TMCPContent(Texto, Imagem, Áudio, Recursos Embutidos) eTMCPToolResultretornando múltiplos blocos e estados de erro. - Integração — Roda nativamente sobre o
TWebHostBuilderdo Dext, permitindo que endpoints MCP e REST coexistam no mesmo processo sem bloqueio.
- TMCPServerBuilder — Builder fluente para configurar servidores MCP.
- Seleção de Stack HTTP — Escolha entre as stacks Indy e HTTP.sys.
- Registro de Provedores — Mapeamento automatizado de provedores customizados.
Dext Framework 1.0 — Índice de Features. Revisão: setembro de 2026.