マイクロサービス アプリケーション レイヤーと Web API を設計するDesign the microservice application layer and Web API

SOLID の原則と依存関係の挿入を使用するUse SOLID principles and Dependency Injection

SOLID の原則は、最新のミッション クリティカル アプリケーション (DDD のパターンを使用したマイクロサービスの開発など) で使用する重要な技法です。SOLID principles are critical techniques to be used in any modern and mission-critical application, such as developing a microservice with DDD patterns. SOLID は、次の 5 つの基本原則をグループ化する頭文字で構成されています。SOLID is an acronym that groups five fundamental principles:

  • 単一責任 (Single Responsibility) の原則Single Responsibility principle

  • 開放/閉鎖 (Open/closed) の原則Open/closed principle

  • リスコフの置換 (Liskov substitution) 原則Liskov substitution principle

  • インターフェイス分離 (Interface Segregation) の原則Interface Segregation principle

  • 依存関係逆転 (Dependency Inversion) の原則Dependency Inversion principle

SOLID はむしろ、アプリケーションまたはマイクロサービス内部レイヤーの設計方法と、それらの間の依存関係の分離方法について述べています。SOLID is more about how you design your application or microservice internal layers and about decoupling dependencies between them. ドメインには無関係ですが、アプリケーションの技術的な設計には関係しています。It is not related to the domain, but to the application's technical design. 最後の原則、つまり依存関係逆転原則に従って、インフラストラクチャ レイヤーを他のレイヤーから分離できます。それにより、DDD レイヤーの優れた分離実装が可能になります。The final principle, the Dependency Inversion principle, allows you to decouple the infrastructure layer from the rest of the layers, which allows a better decoupled implementation of the DDD layers.

依存関係挿入 (DI) は、依存関係逆転原則を実装する 1 つの方法です。Dependency Injection (DI) is one way to implement the Dependency Inversion principle. オブジェクトとその依存関係の間の疎結合を実現するための手法です。It is a technique for achieving loose coupling between objects and their dependencies. クラスがそのアクションを実行するために必要なオブジェクトは、コラボレーターを直接インスタンス化したり、静的参照を使用 (つまり、新しいものを使用) するのではなく、クラスに提供 (または "挿入") されます。Rather than directly instantiating collaborators, or using static references (that is, using new…), the objects that a class needs in order to perform its actions are provided to (or "injected into") the class. ほとんどの場合、クラスはコンストラクターを使って依存関係を宣言することで、明示的な依存関係の原則に従うことができます。Most often, classes will declare their dependencies via their constructor, allowing them to follow the Explicit Dependencies principle. 通常、依存関係の挿入は特定の制御の反転 (Inversion of Control: IoC) コンテナーに基づきます。Dependency Injection is usually based on specific Inversion of Control (IoC) containers. ASP.NET Core には簡単な組み込み IoC コンテナーが備わっていますが、Autofac や Ninject などのお気に入りの IoC コンテナーを使用することもできます。ASP.NET Core provides a simple built-in IoC container, but you can also use your favorite IoC container, like Autofac or Ninject.

SOLID の原則に従うことで、クラスは必然的に小さく、十分に考慮された、簡単にテストできるものになる可能性が高くなります。By following the SOLID principles, your classes will tend naturally to be small, well-factored, and easily tested. しかし、クラスに挿入されている依存関係が多すぎるかどうかはどのように把握できますか。But how can you know if too many dependencies are being injected into your classes? コンストラクターによって DI を使用している場合、コンストラクターのパラメーター数を確認するだけで簡単にわかります。If you use DI through the constructor, it will be easy to detect that by just looking at the number of parameters for your constructor. 依存関係が多すぎる場合、一般に、クラスで行おうとしていることが多すぎるサイン (コードのにおい) であり、単一責任の原則に違反する可能性があります。If there are too many dependencies, this is generally a sign (a code smell) that your class is trying to do too much, and is probably violating the Single Responsibility principle.

SOLID の詳細を取り上げた別のガイドがあります。It would take another guide to cover SOLID in detail. そのため、このガイドで必要となるのは、これらのトピックに関する最小限の知識のみです。Therefore, this guide requires you to have only a minimum knowledge of these topics.

その他の技術情報Additional resources