帮助重组项目

时间:2010-01-12 23:15:43

标签: asp.net-mvc oop

我有一个商业应用程序,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引用实体,所以似乎没有办法绕过这个(在我的脑袋无论如何)。

我该如何重新设计?

1 个答案:

答案 0 :(得分:0)

单独断开接口无济于事。提供商需要知道有关订单的一些细节,但可能不是全部。

我建议您介绍一个PaymentOrder,其中包含提供商需要了解的有关订单的所有信息。将其与其他支付界面一起分解为新的程序集。您的付款程序集不应该对您的应用程序有任何引用。

您需要将原始Order映射到PaymentOrder

您的申请将参考:

  • PaymentProviderInterfaces.dll
  • 所有支付提供商实施

任何支付提供商都会参考

  • PaymentProviderInterfaces.dll,但您的域中没有其他内容