寻找合适的设计模式以在单线程机制上实现

时间:2012-02-21 05:43:32

标签: c# design-patterns

我的WebSite应用程序上有第三方支付解决方案。比如paypal。例如 用户在第三方网站上付款后,我需要使用“服务器到服务器”基础API并检查存款是否成功。

我想要做的是写一个静态单例成员,即某人要出去存入资金的事件。

我将在后面运行一个单独的线程并检查某个存款是否已完成 如果成功或失败,则调用某种方法。如果根本没有关于某个用户的结果,则在一小时后终止线程。

在底线,线程只有在我有存款请求时才需要运行 一旦结果在提供者服务器上,线程将被销毁。

实施此类活动的设计模式是什么? 您如何看待这种机制?

由于

2 个答案:

答案 0 :(得分:1)

最好不要依赖低级功能(例如创建线程)来实现结算功能。

更好的解决方案是将指示付款意向的条目存储到数据库,并安排一些cron任务来检查付款是否已完成。

此外,使用Paypal,您无需检查付款是否由您自己完成; IIRC,您只是从服务器向PayPal发送同步HTTP请求(用户从paypal网站返回给您并提供所有相应的令牌),paypal的响应将包含付款是否成功的信息。因此,即使没有任何长期存在的对象(例如DB条目或系统线程),也可以实现paypal集成。

答案 1 :(得分:0)

如果您有另一个定期检查付款的流程,那么您可以更好地分离问题。让用户将他们的付款发布到第三方网站,并让另一个进程实际处理付款。此过程可以在您的业务案例可接受的任何时间间隔内定期运行。分配某种唯一标识符,以便识别用户和付款。

启动线程进行检查没有任何好处。这只会导致更多潜在问题(想想如果IIS决定回收或数据中心被淹没会发生什么?)。众所周知,这类问题难以复制,并且可能导致数小时的生产力和头痛,这转化为成本。