这是一个非常标准的设置,WinForms客户端>自助式业务/数据层> SQL Server(存储过程)。
目前,我的WinForms调用抓取数据将会像是一样
MyData = RecipientInfo.GetListings(<options>)
。然后它将使用所述数据填充UI,主要是通过Binding,因为所有对象都支持BindingList和INotifyPropertyChanged等内容。
GetListings()
函数执行两项操作。首先,它获取一个查找数据列表,然后一旦从DataReader填充该结构,另一个函数将关闭并通过调用另一个对象静态GetOtherRelatedStuff(<stuffId>)
方法进行更多数据库访问。然后将对其进行排序和分组。
我认为我的问题实际上更多的是品味问题,但如果我想处理我的SQL(DataReaders和喜欢手动填充我的对象),然后对数据做一些基本分析,这里有明显的选择。用户正在等待。
BeginExecuteReader()
函数和回调。这对我的调用代码没有帮助,所以我必须连接一个双回调例程来通知WinForms客户端什么时候完成工作事实上,我也可以像AsParallel一样在内部使用帮助程序来协助在SQL工作完成后获取方法和数据分组/排序的额外数据。
任务也使单元测试变得更加容易,因为我的数据访问代码以易于执行的方式编写。
我错过了什么?
答案 0 :(得分:0)
好的,所以这是一个非常主观的问题,但我决定从TPL开始执行任务,从我的WinForms客户端执行。
我的“业务层”接受了一个长期工作的CancellationToken,它被分解为许多特定的例程,以帮助并行化多阶段流程。
SQL是同步完成的,但是通过任务运行它是自动线程的。虽然我必须仔细考虑WinForms代码以符合特定的数据要求,但它很容易被分解,并且很好地将解决方案联系在一起。