我有一个商业应用程序,asp.net mvc。
我希望它是可扩展的,因为其他人可以创建其他支付提供商,只要他们遵守接口。
/blah.core
/blah.web
/blah.Authorize.net (Implementation of a payment provider using interfaces Ipaymentconfig and paymentdata class)
现在的问题是:
/blah.core
- PaymentData
/blah.core.interfaces
- IPaymentConfig
付款数据如下所示:
using blah.core;
public class PaymentData
{
public Order Order {get;set;}
}
IPayment数据包含来自blah.core的类,如Order类。
现在我想使用实际的Authorize.net实现,所以当我尝试在blah.core项目中引用它时,我遇到了circular dependency
错误。
我怎么能解决这个问题?许多人说要将界面分解为他们自己的项目,但问题是在blah.core中找到的PaymentData引用实体,所以似乎没有办法绕过这个(在我的脑袋无论如何)。
我该如何重新设计?
答案 0 :(得分:0)
单独断开接口无济于事。提供商需要知道有关订单的一些细节,但可能不是全部。
我建议您介绍一个PaymentOrder
,其中包含提供商需要了解的有关订单的所有信息。将其与其他支付界面一起分解为新的程序集。您的付款程序集不应该对您的应用程序有任何引用。
您需要将原始Order
映射到PaymentOrder
。
您的申请将参考:
PaymentProviderInterfaces.dll
任何支付提供商都会参考
PaymentProviderInterfaces.dll
,但您的域中没有其他内容