我是这个存储库的新手,所以感谢一些帮助。
我正在尝试设计一种方法,为我们所有的网站提供中央支付网站。 这些站点将填充一个返回GUID的表。所有站点都将GUID传递到中央支付站点。中央支付站点将查看查询字符串并使用GUID检索有关订单的详细信息以及调用它的站点。 我试图使其灵活,所以以下 1)可以在给定时间使用不同的支付提供商(即Paypal,Google Check),而不需要主要支持 2)可以使用不同的DB(orm)层(我们目前使用亚音速,但可以使用LINQ等)
我不知道如何实现这一点。有什么建议吗?
由于
波奇
答案 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级别。您可能已经将其结构化,假设:
您可以让网站在付款网站上调用API来启动付款流程,然后重定向到该网站。您可以使用每个网站控制的ID,也可以使用支付网站在首次付款通知后返回的公共ID。
考虑到这一点,存储库将在内部使用,并由站点和支付服务独立使用以保留信息。这并不一定意味着它必须是数据库,因为您可以将信息保存到其他地方/机制。