I understand that a delegate is used to decouple client and business layer. A client invokes a business service through delegate object. My question is that is it good to have interface of delegate exposed to client (Design by contract principle OR DIP) not the actual delegate object. Or is it just fine to have a delegate object accessed by the client directly.