アプリケーションのサイズと複雑さが増すにつれて、サブシステム間の相互依存の管理が困難になる可能性があります。ファサード デザイン パターンは、この相互作用を簡素化し、サブシステム内の一連のインターフェイスに統一されたインターフェイスを提供します。
顧客が商品を閲覧し、カートに追加して、チェックアウトできるオンライン ショッピング アプリケーションを考えてみましょう。アプリケーションには、在庫、支払い、配送システムなど、他の部分の管理を担当するさまざまなサブシステムがあります。これらのサブシステムには異なるインターフェイスがあり、購入を完了するために相互に通信する必要があります。
問題は、アプリケーションが大きくなるにつれて、サブシステム間のこの通信の管理が難しくなる可能性があることです。 1 つのサブシステムの変更が他のサブシステムに連鎖的に影響を及ぼし、コードベースが複雑で保守が困難になる可能性があります。
ファサード デザイン パターンを使用して、サブシステム間の相互作用を簡素化できます。ファサード パターンは、サブシステムへの単一のエントリ ポイントを提供し、その複雑さをクライアントから隠します。この例では、在庫、支払い、および配送サブシステムへの統一されたインターフェースを提供するファサードを作成できます。
この記事では、C# プログラミング言語を使用した Facade の設計パターンについて説明します。
public interface IInventorySystem { void Update(int productId, int quantity); bool IsAvailable(int productId, int quantity); } public interface IPaymentSystem { bool Charge(double amount); } public interface IShippingSystem { bool Ship(string address); }
次に、サブシステムを実装できます。
public class InventorySystem : IInventorySystem { public void Update(int productId, int quantity) { // update inventory } public bool IsAvailable(int productId, int quantity) { // check if inventory is available return true; } } public class PaymentSystem : IPaymentSystem { public bool Charge(double amount) { // charge the customer return true; } } public class ShippingSystem : IShippingSystem { public bool Ship(string address) { // ship the product return true; } }
最後に、これらのサブシステムへの単純なインターフェースを提供するファサードを作成できます。
public class OrderFacade { private IInventorySystem _inventorySystem; private IPaymentSystem _paymentSystem; private IShippingSystem _shippingSystem; public OrderFacade() { _inventorySystem = new InventorySystem(); _paymentSystem = new PaymentSystem(); _shippingSystem = new ShippingSystem(); } public bool PlaceOrder(int productId, int quantity, double amount, string address) { bool success = true; if (_inventorySystem.IsAvailable(productId, quantity)) { _inventorySystem.Update(productId, -quantity); success = success && _paymentSystem.Charge(amount); success = success && _shippingSystem.Ship(address); } else { success = false; } return success; } }
OrderFacade
クラスでは、サブシステムのインスタンスを作成し、製品 ID、数量、金額、および配送先住所を受け取る単純なメソッドPlaceOrder
提供します。 PlaceOrder
手法では、サブシステムを使用して在庫を確認し、顧客に請求し、製品を出荷します。
ファサード パターンを使用すると、サブシステムの詳細を気にすることなく、クライアント コードでOrderFacade
クラスのインスタンスを作成し、 PlaceOrder
メソッドを呼び出すことができます。
var order = new OrderFacade(); bool success; // place an order success = order.PlaceOrder(productId: 123, quantity: 1, amount: 99.99, address: "123 Main St"); if (success) { Console.WriteLine("Order placed successfully"); } else { Console.WriteLine("Unable to place order"); }
この例では、ファサード パターンを使用して、オンライン ショッピング アプリケーションのサブシステム間の対話を簡素化しました。クライアント コードは、「OrderFacade」クラスとやり取りするだけでよく、在庫、支払い、および配送のサブシステムについて知る必要はありません。
ファサード デザイン パターンは、サブシステム間の相互作用を簡素化し、サブシステム内の一連のインターフェイスに統一されたインターフェイスを提供します。結合を減らし、大規模で複雑なアプリケーションの保守性を向上させるのに役立ちます。この記事では、ユース ケースとコード例を使用して、C# のファサード デザイン パターンについて説明します。ファサード パターンを使用すると、コードベースを簡素化し、保守と拡張を容易にすることができます。
読んでいただきありがとうございます。この記事を気に入っていただければ幸いです。コメント欄にフィードバックをお寄せください。
C# の出版物、開発者。 to 、 Pinterest 、 Substack 、 Hashnode 、 Write.as