存储过程和分层的讨论。。存储过程与分层难道真的是对立的吗?欢迎大家来各抒已见

今天一早就看到CSDN很多关于存储过程和分层的讨论。
其实现在我也遇到一个这样的问题。。公司要重新开发一套系统。。首先项目经理确定的是就是要保证在.jsp代码中不要有最好不要有任何JAVA代码。然后想把大多数的数据操作放在存储过程里实现。
当时开会讨论的时候。我是建议MVC采用JSF结构。数据库层采用DAO模式。就是说这个系统的结构为
domain object(域对象)+DAO(数据库层)+Service(业务逻辑)+view(视图Bean)。在这样的结构下。。我用到了spring的IOC思想(主要管理对象)。但当我把数据操作用存储过程来实现的时候我发现我的DAO和service基本都是多余的。没什么实际的意义,除非你的存储过程也是比较细粒度的,那样service层还有丁点意义。但我想那样存储过程开发和维护就很复杂了。。。可能也失去了存储过程的本意。
呵呵。。。。。。。。。。。。。。。。。。。。。很困惑。。。
存储过程与分层难道真的是对立的吗?

这是Jdon N多年前讨论的问题,存储过程是双刃剑,只有在极少情况下才会使用。

从几个角度谈:

1. 从设计角度看:我们坚持领域建模DDD,持久层只是帮助我们激活曾经委托其保管的对象,所以,不能因为持久层是保管者,我们就围绕其编程,除了要求其归还模型对象外,还要求其做其做复杂的业务组合,再归还我们?这合理吗?

打个比喻:你在火车站将水果和盘子两个对象委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,合理吗?

2. 如果存储过程都封装了业务过程,那么还要求我们业务层干什么?还要求三层多层架构做什么?不如回去用FoxPro Delphi。这里涉及需要多层结构的真正目的,目的是为维护拓展方便。

3. 如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?还是回到过去集中式数据库主机时代。


总的来说:你说的现象属于:农民开航天飞机,落后设计思维使用现代工具,白用。