帮助Repository(ies)方法

时间:2009-03-26 15:20:40

标签: c# design-patterns domain-driven-design

我是这个存储库的新手,所以感谢一些帮助。

我正在尝试设计一种方法,为我们所有的网站提供中央支付网站。  这些站点将填充一个返回GUID的表。所有站点都将GUID传递到中央支付站点。中央支付站点将查看查询字符串并使用GUID检索有关订单的详细信息以及调用它的站点。   我试图使其灵活,所以以下 1)可以在给定时间使用不同的支付提供商(即Paypal,Google Check),而不需要主要支持 2)可以使用不同的DB(orm)层(我们目前使用亚音速,但可以使用LINQ等)

我不知道如何实现这一点。有什么建议吗?

由于

波奇

2 个答案:

答案 0 :(得分:0)

首先创建一个服务层,然后只使用一个界面来抽象它 - 这将是我的开始建议。

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服务(/存储库)将使用它。

答案 1 :(得分:0)

首先考虑这是一个应用有界上下文的好地方:http://dddcommunity.org/discussion/messageboardarchive/BoundedContext.html。理想情况下,您不应该通过数据库集成不同的(子)系统。这应该发生在api级别。您可能已经将其结构化,假设:

  • 所有网站填充的“表格”不是所有网站的单个共享信息。它真正的意义在于每个站点都会保存它即将启动的过程所需的任何信息,并获得一个可以交给支付系统的ID。
  • 支付系统不应强制跨不同网站的唯一ID。它可以强制每个网站在自己的上下文中发送唯一的ID。
  • 如果支付系统需要额外的信息,它还应该在API级别要求它,而不是在所有站点和支付系统之间强制建立数据库关系。

您可以让网站在付款网站上调用API来启动付款流程,然后重定向到该网站。您可以使用每个网站控制的ID,也可以使用支付网站在首次付款通知后返回的公共ID。

考虑到这一点,存储库将在内部使用,并由站点和支付服务独立使用以保留信息。这并不一定意味着它必须是数据库,因为您可以将信息保存到其他地方/机制。