Помощь в реструктуризации проекта - PullRequest
1 голос
/ 13 января 2010

У меня есть коммерческое приложение, 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.

Как я мог решить эту проблему? Многие говорят, что нужно разбить интерфейсы на свой собственный проект, , но проблема в том, что PaymentData ссылается на сущности, которые можно найти в blah.core также , так что, похоже, не существует способа обойти это (в моем в любом случае).

Как я могу изменить это?

1 Ответ

0 голосов
/ 30 декабря 2010

Разрыв одних только интерфейсов не поможет. Поставщик должен знать некоторые детали о заказе, но, вероятно, не все.

Я предлагаю вам ввести PaymentOrder, который содержит всю информацию, которую поставщик должен знать о заказе. Разбейте его на новую сборку вместе с остальными интерфейсами оплаты. В вашей платежной сборке не должно быть ссылок на вашу заявку.

Вам необходимо сопоставить оригинал Order с PaymentOrder.

Ваша заявка будет ссылаться:

  • PaymentProviderInterfaces.dll
  • Все реализации платежных систем

В то время как любой поставщик платежа будет ссылаться

  • PaymentProviderInterfaces.dll, но ничего больше с вашего домена
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...