Начните с создания слоя сервисов, а затем просто используйте интерфейс для его абстрагирования - это будет мое начальное предложение.
public interface IPaymentService
{
Guid PopulateTable();
Order GetOrder(Guid id);
}
public class PayPalPaymentService : IPaymentService
{
public Guid PopulateTable() { ... }
public Order GetOrder(Guid id) { ... }
}
public class GooglePaymentService : IPaymentService
{
public Guid PopulateTable() { ... }
public Order GetOrder(Guid id) { ... }
}
Предположим, вы могли бы заменить "Репозиторий" на "Сервис", так как я думаю, что это то, что вам нужно, но я думаю, что ваша идея Репозитория немного отличается.
Я бы использовал репозиторий для обработки запросов к базе данных ...
Это будет выглядеть примерно так:
T Get<T>(Guid id);
IList<T> FindAll<T>(Guid fid);
Что будет использоваться PayPal и службами Google (/ репозиторий).