ABPとはABP(ASP.NET Boilerplate)
4073 ワード
1.紹介
ABPはオープンソースで、ドキュメントがそろっているアプリケーションフレームワークです.実際にはフレームワークだけでなく、そのベストプラクティスを考慮して、ABPは分野駆動設計(DDD)に基づく強力な価格モデルを提供しています.
ABPは最新のASPをサポートする.NET CoreとEF Coreは、ASPにも対応しています.NET MVC 5.xとEF 6.x.
2.一例をすばやく見る
public class TaskAppService : ApplicationService, ITaskAppService
{
private readonly IRepository _taskRepository;
public TaskAppService(IRepository taskRepository)
{
_taskRepository = taskRepository;
}
[AbpAuthorize(MyPermissions.UpdateTasks)]
public async Task UpdateTask(UpdateTaskInput input)
{
Logger.Info("Updating a task for input: " + input);
var task = await _taskRepository.FirstOrDefaultAsync(input.TaskId);
if (task == null)
{
throw new UserFriendlyException(L("CouldNotFindTheTaskMessage"));
}
input.MapTo(task);
}
}
上記はアプリケーションサービス方法の例であり、DDD中国側のアプリケーションサービスは、アプリケーションを実行するために表示レイヤによって直接呼び出される例である.UpdateTaskは、JavaScriptがAJAXによって呼び出される方法とみなされます.
3.ABPのメリット
依存注入(DI):ABPは従来のDIインフラストラクチャを提供するが、これはアプリケーションサービスであるため、通常DIコンテナに過渡的(要求に応じて作成)として登録する.この例のIrepositoryでは、任意の依存項目を簡単に注入することができる.
倉庫:ABPは、この例のIrepositoryなど、エンティティごとにデフォルトのリポジトリを作成できます.デフォルトのリポジトリには、この例で使用するFirstOrDefaultメソッドなど、多くの有用な方法があります.デフォルトのリポジトリを拡張して、ニーズを満たすことができます.リポジトリはDBMSとORMを抽象化し、データアクセスロジックを簡素化します.
ライセンス:ABPは、現在のユーザーに「update tasks」権限がないか、ログインしていない場合、UpdateTaskメソッドへのアクセスをブロックするチェック権限を宣言できます.ABPは宣言属性だけでなく、他のライセンス方法も使用します.
検証:ABPは、入力がNullであるかどうかを自動的にチェックします.また、標準データ注釈属性とカスタム検証規則に基づいて、入力されたすべての属性を検証します.要求が無効な場合は、例外が投げ出され、クライアントで処理されます.
監査ログ:ユーザー、ブラウザ、IPアドレス、呼び出しサービス、メソッド、パラメータ、呼び出し時間、実行時間、その他の情報を、約束と構成に基づいて自動的に保存します.
作業ユニット:ABPでは、各アプリケーション・サービス・メソッドがデフォルトで1つの作業ユニットとして仮定されます.メソッドの開始時に接続を自動的に作成し、トランザクションを開始します.このメソッドに異常な完了がない場合、トランザクションはコミットされ、接続が解放されます.この方法は異なる倉庫や方法を使っていますが、彼らは原子的です.トランザクションがコミットされると、エンティティに対するすべての変更が自動的に保存されます.呼び出す必要もありませんrepository.Update(task)は、前例のようになります.
異常処理:ABPのwebアプリケーションでは、手動で異常を処理することはほとんどありません.デフォルトではすべての例外が自動的に処理されます!異常が発生した場合、ABPは自動的に記録し、クライアントに正しい結果を返します.たとえば、これがAJAXリクエストの場合、JSONオブジェクトをクライアントに返してエラーの発生を識別します.UserFriendlyExceptionの場合のみ、実際の例外が隠されます.また、クライアント上のエラーを処理し、対応する情報をユーザーに表示することもできます.
ログ:ベースクラスで定義したLoggerオブジェクトを使用できます.デフォルトではLog 4 Netが使用されますが、これは変更可能な構成です.
ローカライズ:異常を投げ出す際に「L」メソッドを使用したことに注意しますか?これにより、現在のユーザーの文化に基づいて自動的にローカライズされます.
自動マッピング:最後の行で、ABPのMapTo拡張メソッドを使用して入力属性をエンティティ属性にマッピングします.AutoMapperライブラリを使用してマッピングを実行します.ネーミング規則に基づいて、アトリビュートを1つのオブジェクトから別のオブジェクトに簡単にマッピングできます.
動的API:TaskAppServiceは簡単なクラスです.通常、JavaScriptクライアントにメソッドを公開するためにパッケージAPIコントローラを作成する必要がありますが、ABPは実行時に自動的に実行されます.これにより、クライアントからアプリケーション・サービス・メソッドを直接使用できます.
動的AJAXエージェント:ABPは、クライアント上でJavaScriptメソッドを呼び出すようにアプリケーション・サービス・メソッドを呼び出すように簡単なエージェント・メソッドを作成します.
この簡単なクラスでABPのメリットを見ることができます.これらのタスクは通常長い時間がかかりますが、ABPではフレームワークが手伝ってくれました.私たちは自分の本当のビジネスに注目するだけです.