重型数据应用Silverlight vs mvc vs asp.net

时间:2011-07-03 14:05:37

标签: winforms c#-4.0 webforms erp

我们已经使用定制的ERP应用程序超过4年,实际上有一些糟糕的设计问题影响了应用程序的性能。

事实上问题是,这个应用程序可以归类为重数据应用程序,也就是业务应用程序。

最大的不良设计问题是,我们获取特定业务单元的整个数据,并将其分配给控件,或将其保存在内存中(如ArrayLists,Generic Lists),并为用户提供导航的灵活性和完整的应用速度响应。

在使用的前两年,我们没有注意到问题,但到那个时期结束时,我们越来越多地抱怨应用程序的性能。

我们当时并且仍然使用ADO.NET和存储过程,这是为CRUD操作(获取,列表,删除,插入,更新SP)生成的,所以如果我们要分隔每年的数据,我们必须重新设计那些在数据访问层中具有所需修改的自动生成的SP,并且由于层中没有实际的分离,我们无法通过简单的方法进行修改,因此第一个即将到来的解决方案是做一些数据库增强以平衡这种巨大的数据流量,但问题再次提升了大约6个月。

所以我们认为现在是纠正错误的时候(很晚才做出决定),但我们怎么能这样做呢?我们最终得到了这些解决方案:

  • 使用Web应用程序而不是Windows应用程序,因此我们将能够使用我们服务器的全部功能,并最大限度地减少连接的流量

  • 重新设计应用程序,以便它处理Year Endings,不获取所有数据,使用更好的ORM而不是旧的融合ADO.NET,但坚持使用Windows窗体,以及相同的应用程序

    < / LI>

并根据时间范围(限制一些如何),团队成员(2,两者都有很好的windows,web开发经验),我现在无法做出决定,我担心Windows应用程序修改可能需要比预期更长的时间。

你能建议我吗?

我正在使用C#4.0,ASP.NET Web表单,(MVC新手)。

1 个答案:

答案 0 :(得分:2)

如果数据库本身很快,正如您在对我的评论的回复中指出的那样,那么,正如您所建议的那样,您必须减少填充DataSet的数据量。

虽然ADO.NET使用“断开连接”模型,但开发人员仍然可以控制用于填充DataSet中每个表/关系的select-query。一个假设的例子:假设您在数据库的CUSTOMERS表中有5000个客户。您可以在DataSet中填充CUSTOMERS表,如下所示:

             select * from CUSTOMERS order by customername

或者像这样:

            select id, customername from CUSTOMERS order by customername

order-headers表可以填充如下:

            create proc getOrderHeaders4Customer
            @customerid int
            as
            select * from ORDERHEADER where customerid = @customerid

也就是说,在填充OrderHeaders关系之前,您需要在GUI中拥有当前客户,并且只有在用户点击特定用户时才会获取订单详细信息数据GUI中的order-header。关键是,ADO.NET可用于执行此操作 - 您不必放弃应用程序中的所有内容,以便对断开连接的数据集更加简洁。

客户端将获取多少数据,更重要的是,当客户端获取数据时,无论是Silverlight,WinForms还是ASP.NET,都完全受开发人员控制。现在,如果您的ERP应用程序效率不高,那么改造效率可能会很困难。但是您不必放弃ADO.NET来实现效率,只需选择其他数据层技术本身就不会为您带来效率。