日期:2014-05-18  浏览次数:20529 次

【再提问】电子商务网站 数据库访问 架构设计问题,急求啊老大们
【各位,不好意思,为了得到更多的帮助和建议,请允许我再提问一次】


我们公司要做一个电子商务网站,是行业性的,结合其他应用系统一起使用的。
现在的情况:用c#+Sql200,数据库是已经原有的,而且分布在不同的计算机上面,数据量较大,千万行吧。

目的:提高数据库访问速度、增强SQL语句安全性

我们现在的做法:把说有的数据库操作都写在存储过程,每次访问数据库都调用一个存储过程。如登陆调用登陆的存储过程,注册用户调用一个注册的存储过程,插入一个订单也调用一个增订单存储过程,查找记录调用查记录的存储过程...........

问题:这样做下来,我们这个系统就有了很多的存储过程了,日后难以管理维护;“一棒打”方式,所有的数据库操作都用存储过程似乎办法很笨,滥用存储过程资源


面对这些现象和问题,很迷惑。因为我之前做的都是C/S架构,B/S架构不懂。
还望大家多加指点啊

现在想到的解决办法:
1:继续延用现在的做法,全用存储过程。
2:根据系统功能实现的需求,具体分析,找出数据量大的功能,有针对性的使用存储过程。其他小数据量的功能采用页面写sql语句的方式。

请问大家,那种好呢?还是有其他更好的方案吗?
谢谢先啦

------解决方案--------------------
后台设计跟b/s、c/s差别没有关系。

核心的管理思想就是以ORM为指导,存储过程的源码应该写在每一个class中(例如attribute标签来声明到具体class、method、property层次),程序自动反射并创建到数据库中,以及自动清理不用的过程。不要手工编辑.sql等脚本文件。程序中从来不应该直接调用,而应该调用对象的属性、方法,由对象自己调用自己的存储过程。

比如说一个开发“发送消息”的功能的人,不应该调用“查询用户注册资料”的存储过程来判断信息接收者的身份,而应该new一个“用户”对象,然后读取这个对象的属性。

首先做到OO,然后才能自动化地管理存储过程。
------解决方案--------------------
程序中从来不应该直接调用 --> 外部程序中从来不应该直接调用存储过程

只有拥有存储过程的class内部可以调用存储过程,外部一律使用面向对象的方法调用对象。在大的方面,不要搞低级的数据库编程风格,要遵循面向对象编程风格。