C# 关于存储库(ies)方法的帮助

C# 关于存储库(ies)方法的帮助,c#,design-patterns,domain-driven-design,C#,Design Patterns,Domain Driven Design,我是这个库百灵鸟的新手,所以非常感谢您的帮助 我正试图设计一种方法,有一个中央支付网站为我们所有的网站。 这些站点将填充一个返回GUID的表。所有站点都将GUID传递到中央支付站点。中央支付站点将查看查询字符串,并使用GUID检索有关订单的详细信息以及哪个站点调用该订单。 我试图使它灵活,所以下面 1) 在给定的时间内可以使用不同的支付提供商(如贝宝、谷歌支票),而无需大费周章 2) 可以使用不同的DB(orm)层(目前我们使用亚音速,但可以使用LINQ等) 我不知道如何实施这一点。有什么建议吗

我是这个库百灵鸟的新手,所以非常感谢您的帮助

我正试图设计一种方法,有一个中央支付网站为我们所有的网站。 这些站点将填充一个返回GUID的表。所有站点都将GUID传递到中央支付站点。中央支付站点将查看查询字符串,并使用GUID检索有关订单的详细信息以及哪个站点调用该订单。 我试图使它灵活,所以下面 1) 在给定的时间内可以使用不同的支付提供商(如贝宝、谷歌支票),而无需大费周章 2) 可以使用不同的DB(orm)层(目前我们使用亚音速,但可以使用LINQ等)

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

谢谢


Podge

首先创建一个服务层,然后使用一个接口来抽象它——这将是我的开始建议

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);
T获取(Guid id);
IList FindAll(Guid fid);

将被贝宝和谷歌Services(/RealStand)使用。

首先考虑这是一个应用有界上下文的好地方:理想情况下,您不应该通过数据库集成不同的(子)系统。这应该发生在api级别。假设:

  • 所有站点正在填充的“表”不是所有站点的单一共享信息。它真正的意义在于,每个网站都保存它所需要的关于即将开始的流程的任何信息,并获得一个ID,然后将其交给支付系统
  • 支付系统不应在不同的网站上强制使用唯一的ID。它可以强制每个网站在自己的上下文中发送一个唯一的id
  • 如果支付系统需要额外的信息,它还应该在API级别要求它,而不是强制所有站点和支付系统之间建立db关系
您可以让站点调用支付站点上的API来启动支付过程,然后重定向到该站点。您可以使用每个网站控制的ID,也可以使用支付网站在首次支付呼叫后返回的公共ID


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

感谢您的回复,这将回答我在存储库中遇到的一些问题。从网络上看,存储库模式似乎有不同的行。也许我应该使用repository模式来抽象DB操作。然后把这个帐户传给服务层?是的,听起来你已经知道了。我认为(特别是因为我也来自亚音速的命名法),人们对存储库的称呼只是有所不同。如果要实现存储库,只需从TDD开始。如果很容易测试,你就做对了。