
Delphiフレームワーク(Windows/Linux/Android/MacOSX/iOS)は、高性能でスケーラブルなデスクトップ、モバイル、Webアプリケーションを簡単に構築します。 Delphi 10〜12アテネがサポートしました。
Githubでこのプロジェクトを「主演」してください!コードを参照するのに役立つだけです。 
このプロジェクトが役立つ場合は、寄付をすることを検討してください。
抽象化:
サービス:
MVC:
拡張機能:
MVC拡張機能:
更新:
QuickCoreは、デスクトップ/モバイル/Webアプリを簡単に構築するためのフレームワークです。
フレームワーク全体は、依存関係の注入プリピューールに基づいています。コンテナは、アプリケーションに必要なすべてのサービスを保持し、マイナーなエンフォリットで簡単なインフラストラクチャの変更を可能にします。
サービスは自動的にサーバーに注入され、単一のユニット「起動」から構成されます。すべてのコアプロジェクトには、tstartupbaseから継承するクラスがあるstartup.pasが必要です(サンプルフォルダーの例を参照)。
これは、事前定義またはカスタムサービスを登録してライフサイクルを制御できるサービスのコレクションです(Singleton、Transient、..)。 ServiceCollectionは、QuickCoreに含まれるビルドインコンテナであり、デフォルトでコンストラクターインジェクションをサポートします。
services
.AddLogging(TLoggerBuilder.GetBuilder(TLoggerOptionsFormat.ofYAML,False)
.AddConsole(procedure(aOptions : TConsoleLoggerOptions)
begin
aOptions.LogLevel := LOG_DEBUG;
aOptions.ShowEventColors := True;
aOptions.ShowTimeStamp := True;
aOptions.ShowEventType := False;
aOptions.Enabled := True;
end )
.AddFile(procedure(aOptions : TFileLoggerOptions)
begin
aOptions.FileName := ' .WebApiServer.log ' ;
aOptions.MaxFileSizeInMB := 200 ;
aOptions.Enabled := True;
end )
.Build
)
.AddDebugger
.AddOptions(TOptionsFileFormat.ofYAML,True)
// add entity database
.Extension<TEntityServiceExtension>
.AddDBContext<TShopContext>(TDBContextOptionsBuilder.GetBuilder.UseSQLite.ConnectionStringName( ' ShopContext ' ).Options)
// add Identity
.Extension<TAuthenticationServiceExtension>()
.AddIdentity<TUser,TRole>(procedure(aOptions : TIdentityOptions)
begin
aOptions.Password.RequiredLength := 6 ;
aOptions.User.RequireUniqueEmail := True;
end )
.AddEntityStore<TShopContext>();
// add Authentication
services.Extension<TAuthenticationServiceExtension>()
.AddAuthentication(procedure(aOptions : TAuthenticationOptions)
begin
end );
// add ApiKey Authentication
services.Extension<TApiKeyAuthenticationServiceExtension>
.AddApiKey()
.UseIdentityStore<TUser,TRole>( ' ApiKey ' );
// add Authorization
services.Extension<TAuthorizationServiceExtension>
.AddAuthorization(procedure(aOptions : TAuthorizationOptions)
begin
aOptions.AddPolicy( ' ApiKeyValidation ' ,TAuthorizationPolicyBuilder.GetBuilder
.RequireAuthenticatedUser.Build
// .RequireClaim(TClaimTypes.Role,'Admin').Build
);
end );QuickCoreはIloggerインターフェイスで動作します。ビルドインロギング拡張機能を使用するか、独自の実装を定義して挿入できます。
QuickLoggerの実装を使用するには(QuickLoggerライブラリが必要です。インストール要件を参照)。 QuickLoggerは、Ilogger Builderを使用して簡単に構成します。デフォルトのオプションは、オプションデリゲート機能として渡すことができます。 QuickLogger構成ファイルが存在する場合、デフォルトオプションはさらに適用されません。
services
.AddLogging(TLoggerBuilder.GetBuilder(TLoggerOptionsFormat.ofYAML,False)
.AddConsole(procedure(aOptions : TConsoleLoggerOptions)
begin
aOptions.LogLevel := LOG_DEBUG;
aOptions.ShowEventColors := True;
aOptions.ShowTimeStamp := True;
aOptions.ShowEventType := False;
aOptions.Enabled := True;
end )
.AddFile(procedure(aOptions : TFileLoggerOptions)
begin
aOptions.FileName := ' .WebApiServer.log ' ;
aOptions.MaxFileSizeInMB := 200 ;
aOptions.Enabled := True;
end )
.Build
);...または、独自のロガー実装を追加します
services.AddLogging(MyLogger);QuickCoreロギング構成ファイルは、QuickLogger.yml o jsonファイルとして保存されます。 core_environment環境変数を使用すると、各実装に使用されるファイルを定義できます。環境変数が定義されている場合、QuickCoreは「QuickCore。[core_environment] .yaml/json」ファイルをロード/保存しようとします。
QuickCoreはオプションパターンで動作します。すべてのTOPTIONSオブジェクトは、構成ファイルのセクションとして保存され、サービスまたはコントローラーコンストラクターに注入できます。セクションを追加する前に、オプションサービスがServiceCollectionに追加する必要があります。 config filenameおよびjsonまたはyaml形式を定義できます。
.AddOptions(TOptionsFileFormat.ofYAML,True)すべての構成セクションを追加する必要があり、デフォルト値で構成できます。
services.Configure<TAppSettings>(procedure(aOptions : TAppSettings)
begin
aOptions.Smtp := ' mail.domain.com ' ;
aOptions.Email := ' [email protected] ' ;
end )
そして、私たちは後でそれを単純に挿入することができます...
constructor TMyController.Create(aLogger : ILogger; aAppSettings : IOptions<TAppSettings>);
begin
fOptions := aAppSettings. Value ;
fSMTPServer.Host := fOptions.Smtp;
end ;スタートアップ構成には、読み取りオプションを使用してオプションのアクションを実行できます。
if services.GetConfiguration<TAppSettings>.UseCache then
begin
// do some stuff or define service implementation
end
else
begin
// do some stuff or define alternative service implementation
end ;core_environment環境変数を使用すると、すべての実装で使用されるファイルを定義できます。環境変数が定義されている場合、QuickCoreは「QuickCore。[core_environment] .yaml」ファイルをロード/保存しようとします。
options.nameが定義されていない場合、クラス名は構成ファイルのセクション名として使用されます。構成されたすべてのオプションは保存され、ファイルを構成するためにロードされますが、必要に応じて、保存されたオプションを隠すことができます。 options.hideoptions:= true(外部から構成できない内部オプションの場合)。
デバッガーは、シンプルなトレーサーデバッガーです(QuickLibドキュメントを参照)。デバッガーをロギングサービスに接続するには、ServiceCollectionにデバッガーサービスを追加するだけで(デフォルトではコンソール出力が使用されます):
services.AddDebugger;コマンドラインパラメーターを使用すると、コマンドライン拡張機能を使用して簡単です。可能な議論でTPARAMETERSまたはTSERVICEPARAMETERS(QuickAppServicesを使用している場合)から継承されたクラスを定義します。
uses
Quick.Parameters;
type
TArguments = class (TParameters)
private
fPort : Integer;
fSilent : Boolean;
published
[ParamCommand( 1 )]
[ParamHelp( ' Define listen port ' , ' port ' )]
property Port : Integer read fPort write fPort;
property Silent : Boolean read fSilent write fSilent;
end ;de commandline拡張子に渡す:
services.AddCommandline<TArguments>;-helpでexeを呼び出すと、ドキュメントを取得します。スイッチや値を確認する必要がある場合は、次のようにできます。
if services.Commandline<TArguments>.Port = 0 then ...
if services.Commandline<TArguments>.Silent then ...インターフェイスと実装をServiceCollectionに追加できます。 AddSingletonとAddTransientにより、ライブサイクルを定義できます。
services.AddSingleton<IMyService,TMyService>;または委任された作成を伴う
services.AddTransient<IMyService,TMyService>(function : TMyService)
begin
Result := TMyService.Create(myparam);
Result.Host := ' localhost ' ;
end );または実装を追加します
services.AddSingleton<TMyService>;拡張機能は、アプリ/サーバーに追加できる注射可能なサービスです。拡張機能は、ServiceCollection Startupユニットに注入されます。 ServiceCollection Method Extensionsは、.NET拡張メソッドと同様の機能、拡張ServiceCollection。
拡張機能を追加するには、スタートアップユニットの使用句にそのユニットを追加する必要があります(上記のQuickCore Precedined Extensionsを参照)。
uses
Quick.Core.Extensions.AutoMapper;
...
begin
services.Extension<TAutoMapperServiceExtension>
.AddAutoMapper;
end ;QuickCoreを使用すると、コントローラーとアクションを使用してWebアプリケーションを作成できます。
アプリケーションサーバーを作成し、バインディングとセキュリティを定義します。
ApiServer := TMvcServer.Create( ' 127.0.0.1 ' , 8080 ,False);
ApiServer.UseStartup<TStartup>;
ApiServer.Start;
```delphi
To configure services and middlewares startup must configured
```delphi
class procedure TStartup.Configure (app : TMVCServer);
begin
app
.AddControllers
.AddController(THomeController)
.DefaultRoute(THomeController, ' Home/Index ' )
.UseWebRoot( ' .wwwroot ' )
.UseRouting
.UseMVC;
end ;AddController(ControllerClass): Webアプリサーバーにコントローラーを追加することを許可します。
Controllersの追加: RegisterController(ControllerClass)を使用して、初期化ユニット中に登録されたすべてのコントローラーを追加します。
usewebroot(path):静的ファイル/データフォルダーを定義します。
usecustomerrorpages:カスタムエラーページの使用を有効にします。 403エラーでは、サーバーは403.html、40x.html、または4xx.htmlファイルを検索します。 Dinamic Pageが指定した場合、単純な口ひげパターンはエラー情報(StatusCode、StatusMsGなど)に置き換えられます。
USEMUSTACHEPAGES:シンプルな口ひげテンプレートエンジンは、シンプルなビューを交換します。
ミドルウェアは機能の層のようなもので、リクエストパイプラインに実行されます。すべてのリクエストは、各Middlwares(作成の順序で)かどうかにかかわらず、ミドルウェアの補充に応じて渡されます。
UseStaticFiles:静的コンテンツを提供できるようにします。
UseHSTS: HTTP Strict Transport Security MiddlewareはHTTPS接続のみを許可します。
usehttpsredirection:リダイレクトミドルウェアがヘッダーの場所をリダイレクトできるようにします。
ユーザーアウト:ルーティングミドルウェアがリクエストから一致するルートを取得できるようにします。
USEMVC: MVCミドルウェアが、すべてのリクエストを特派員のコントローラーアクションまたはビューに管理およびリダイレクトできるようにします。
UseMiddleware:パイプラインをリクエストするためにカスタムミドルウェアクラスを追加します。
使用(RequestDelegate):ミドルウェアとして匿名メソッドを実行します。
Useothentication:リクエストから認証情報を取得しようとします。
UseOuthorization:許可ポリシーに基づいて、ACCEをリソースに許可/禁止します。
THTTPControllerおよび公開されたメソッドからのすべてのコントローラーの継承は、アクションになります。カスタム属性を使用すると、これらのメソッドのルーティング、承認などを定義できます。すべてのコントローラーが依存関係の注入から注入されるため、自動注入可能なパラメーターでコンストラクターを定義でき、IOCはコンストラクターの作成で解決しようとします。
constructor THomeController.Create(aLogger: ILogger);HTTPルーティングは、カスタム属性ベースです。各コントローラーのルーティングと方法/アクションを定義する必要があります。
[HttpGet( ' home/index ' )]
function THomeController.Index : IActionResult;
[HttpPost( ' home/GetAll ' )]
function THomeController.GetAll : IActionResult;クラスで定義されているルーティングの場合、それはグローバルであり、各メソッド/アクションで再現する必要はありません。
[Route( ' home/other ' )]
THomeController = class (THttpController)
published
[HttpPost( ' GetAll ' )] // global + local = home/other/GetAll
function THomeController.GetAll : IActionResult;パラメーターは属性で定義され、自動的に解析およびメソッドパラメーターとして注入されます。
[HttpGet( ' Add/{productname}/{price} ' )]
function Add ( const ProductName : string; Price : Integer): IActionResult;パラメーターを定義すると入力できます。 INT:数値のみのアルファ:文字のみ。フロート:フローティング数のみ。
[HttpGet( ' Add/{productname:alpha}/{price:float} ' )]
function Add ( const ProductName : string; Price : Extended): IActionResult;?パラメーターをオプションとして定義します
[HttpGet( ' Add/{productname:alpha}/{price:float?} ' )]
function Add ( const ProductName : string; Price : Extended): IActionResult;リクエスト本体からパラメーターを取得するには(自動脱派化による)
[HttpPost( ' Add/User ' )]
function Add ([FromBody] User : TUser): IActionResult;アクション結果はコントローラーの結果です。 StatusCode(StatusCode、Statustext):ステータスコードとオプションのステータステキストをクライアントに返します。
Result := StatusCode( 200 , ' ok ' );OK(statustext): 200ステータスコードとオプションのStatustextを返します。
Accepted(statustext): 202ステータスコードとオプションのステータステキストを返します。
BadRequest(statustext): 400ステータスコードとオプションのステータステキストを返します。
notfound(statustext): 404ステータスコードとオプションのステータステキストを返します。
Forbid(statustext): 403ステータスコードとオプションのステータステキストを返します。
不正(statustext): 401ステータスコードとオプションのステータステキストを返します。
リダイレクト(URL):時間的リダイレクトをURLに返します。
Redirectpermament(URL): URLに永続的なリダイレクトを返します。
コンテンツ(テキスト):応答テキストを返します。
JSON(Object、onlypublishedproperties):シリアル化されたJSONオブジェクトまたはリストを返します。 PublishedPropertiesのみが有効になっている場合、オブジェクト公開されたプロパティのみがシリアル化されます。
Result := Json(User);ビュー(ViewName):ビューを返します。
Result := View ( ' home ' );AutomApper拡張機能により、クラスタイプを別のクラスタイプにマップできます。 AutomApperを使用するには、StatupユニットのServiceCollectionにサービスを追加する必要があります。
services.Extension<TAutoMapperServiceExtension>
.AddAutoMapper;次に、マッピング関係を持つプロファイルマップを定義します。プロパティ名が同一の場合、マッピングを手動で提供する必要はありません。
constructor TMyProfile.Create;
begin
// maps properties with same name in both classes
CreateMap<TDBUser,TUser>();
end ;
initialization
TAutoMapper.RegisterProfile<TMyProfile>;一部のプロパティが異なる名前またはタイプの場合、カスタムマッピングを使用する必要があります。
constructor TMyProfile.Create;
begin
// maps properties with delegate function and rest maps formember
CreateMap<TDBProduct,TProduct>(procedure(src : TDBProduct; tgt : TProduct)
begin
tgt.Id := src.uid;
tgt.Age := src.Age;
end )
.ForMember( ' Money ' , ' Cash ' )
.ForMember( ' Name ' , ' FullName ' )
.IgnoreOtherMembers;
end ;
initialization
TAutoMapper.RegisterProfile<TMyProfile>;Formember(SourceProperty、TargetProperty):ソースプロパティ名をターゲットプロパティ名にマップします。 Ingoreallnonexisting:ターゲット上のすべての非既存のプロパティを無視します。
IngoreOtherMembers:カスタムマッピングで定義されているプロパティのみが解決されます。
Resolveunmapp: ProfilEmapが定義されていないまま、すべてのマップを自動的に解決しようとします。
AutomApperサービスは、使用句の抽象化を定義するオブジェクト/コントローラーに注入できます。
uses
Quick.Core.Mapping.Abstractions;
...
TMyController.Create(aMapper : IMapper);..そしてそれを使用してください:
product := fMapper.Map(dbproduct).AsType<TProduct>;Delphiを学びたいですか、それともスキルを向上させたいですか? LearnDelphi.org