|
原帖由 dayspring_chen 于 2011-2-11 09:48 发表 ![]()
1.把存储过程做成调用接口包。
2.为了更方便不同客户端调用,可以用表函数作为访问方式(以自治事务进行DML,用表函数返回状态信息)
3.存储过程里面用动态sql(execute immediate,dbms_sql),通过访问元数据表读取业务规则,实现访问控制。即业务逻辑并不在存储过程中,而在元数据表中。
4.通过维护元数据表来进行业务扩展、业务调整、业务作废工作。元数据表加上机构级别、业务起始终止时间、自定义限制等,实现生命周期及细粒度控制。
5.在此基础上,将开发团队分为3个组:数据处理组、工具组、业务定制组,以简驭繁,对项目需求进行分解,实现极限编程。
已经在3个以上项目中按此方式实施。如有兴趣请加我msn:dayspring_chen@yahoo.com.cn。
我很不赞同你的一些做法。
2.为了更方便不同客户端调用,可以用表函数作为访问方式(以自治事务进行DML,用表函数返回状态信息)
为什么用表函数就更方便?
你全都是用表函数返回嵌套表,然后用SELECT...FROM TABLE(...)? 这样有什么好处?
如果要返回结果集,可以打开一个REF CURSOR并返回。
自治事务要特别小心。基本上,除了写日志,其他的应用都是错的。你这样做,将不得不把COMMIT放到你的函数里。这是不提倡的,COMMIT最好交给客户端去处理。另外你的函数将很难模块化,因为每个都是不同的事务!比如函数A调用函数B, A和B应该在同一个事务里,你如果在A,B里用了自治事务,全乱套了。
3.存储过程里面用动态sql.....
动态SQL是应该尽力避免的。它的应用范围及其有限,一般是为了组合灵活的查询条件。如果你把事务处理也用动态SQL实现,一定有问题。
动态SQL程序很难读,很难维护,无法在编译的时候发现语法问题;因为多隔了一层,效率也要打个折扣。
你可以把业务逻辑中一些灵活的部分抽出来进行参数化,也就是通过配置的方式来进行控制,但是“执行动作”应该都是静态代码,它只是根据不同的配置走不同的分支。
如果你的需求决定了有很多雷同的代码,那么你可以利用你的元数据来生成静态代码,这样节省了人工,但是最终编译、执行的代码还是静态的。
4.通过维护元数据表来进行....
如果元数据表是我上述提到的配置表,这样的做法是可取的。 |
|