Contract در توسعه نرم‌افزار معمولاً به Interface یا قراردادی گفته می‌شود که رفتار مورد انتظار یک جزء را مشخص می‌کند. کلاس‌های مختلف می‌توانند همان Contract را با پیاده‌سازی‌های متفاوت اجرا کنند.

استفاده از Contract وابستگی مصرف‌کننده به جزئیات یک کلاس را کاهش می‌دهد. قرارداد باید بر اساس رفتار واقعی و پایدار طراحی شود، نه صرفاً برای افزایش تعداد Interfaceها.

وقتی PaymentGateway یک قرارداد عمومی باشد، تیم می‌تواند StripeGateway یا FakeGateway را بدون تغییر سرویس سفارش جایگزین کند. شرط اصلی این است که هر دو همان رفتار مورد انتظار را رعایت کنند.

درک تفاوت این موضوع با تزریق وابستگی و وارونگی کنترل به انتخاب راهکار مناسب‌تر کمک می‌کند.