论坛首页 Java企业应用论坛

如何让系统支持多种数据库

浏览 22545 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-02-15  
kanme818 你的出发点是在 项目上 只卖一次

而我们说的出发点是在 产品上 卖N次
0 请登录后投票
   发表时间:2012-02-15  
a1721615168 写道
kanme818 写道
a1721615168 写道
kanme818 写道
a1721615168 写道
caizi12 写道
WAMING5 写道
用抽象工厂设计不同的数据库DAO,根据数据库配置选择不同DAO实例


你这样设计和做四个支持不同数据库的系统有多大区别。


哈哈 有意思 像你这种想法 那还要设计模式干嘛 有什么用 需要改的时候我在重写一套不就完了

但是你要知道,好的程序,健壮的程序,容易扩展的程序是需要遵循开发规则的,

首先使用抽象工厂实现 只需要提供不同的实现DAO层就行 每种数据库的DAO都分别实现一个

他遵守了开放封闭原则,有需求变更的时候不需要修改代码但是可以新加类来扩展,如果以后还需要增加sqlserver的支持

我只需要在新建一个sqlserver 的实现DAO 降低了代码的耦合度 就OK了 其他的都不需要变 你说方便不方便


在一个 如果你使用了抽象工程 你就可以配置你的 oracleDaoService 是单例模式 还是 原型模式

极大的可配置性,同时还可以提高程序的性能 多好啊! 想加什么就加什么,想怎么改就怎么改

你说的那个实现4个系统 那一改 得乱成啥样,我改一个地四个产品都得改,一想都脑袋疼,还是个产品 老的程序员走了

在招新的程序员去改 那新的程序员估计想死的心都有了。



那如果现在业务有所改变,需要改一下SQL逻辑,那你要改几次SQL?技术带来的好处都知道,有谁想过带来好处的同时也会伴随副作用。


呵呵 需求变肯定需要改程序了,,,但是我们设计开发的宗旨是当有新的需求以及原有需求改变的时候,我们可以做到以最少的修改或者最方便的扩展来满足客户的需求。

这个功能本来就是可以实现的,为什么要去劝客户不这么做,,呵呵,,会让客户想 你们公司是不是技术不行啊,这不做那不做的,那我换家公司做吧。


没见过中途变数据库的项目,客户可能也不懂,你就应该帮他阐明清楚,哪些是重要的,哪些是次要的,不是人家提了什么需求都要接受。



现实中是有这种情况的 很正常,,比如说 一家公司想买我们公司的产品,,,那买我们公司的产品的是消费者,,,我们公司是生产者,,,下面我就直接说生产者和消费者了,,,

比如说消费者想买生产者的产品,,,但是消费者公司只有一台非常牛的oracle服务器,而且他们公司包括oa或者其他的项目的数据库也都是oracle,,,那他们新上的项目 新买的产品也希望是oracle的 方便管理,不想在去购买其他的数据库服务器了。而且他们的数据库管理员也只会oracle数据库管理。

那生产者的项目只支持mysql的 ,这就不行了吧。。


那你是做产品不是做定制项目吧。
0 请登录后投票
   发表时间:2012-02-15  
kanme818 写道
a1721615168 写道
kanme818 写道
a1721615168 写道
kanme818 写道
a1721615168 写道
caizi12 写道
WAMING5 写道
用抽象工厂设计不同的数据库DAO,根据数据库配置选择不同DAO实例


你这样设计和做四个支持不同数据库的系统有多大区别。


哈哈 有意思 像你这种想法 那还要设计模式干嘛 有什么用 需要改的时候我在重写一套不就完了

但是你要知道,好的程序,健壮的程序,容易扩展的程序是需要遵循开发规则的,

首先使用抽象工厂实现 只需要提供不同的实现DAO层就行 每种数据库的DAO都分别实现一个

他遵守了开放封闭原则,有需求变更的时候不需要修改代码但是可以新加类来扩展,如果以后还需要增加sqlserver的支持

我只需要在新建一个sqlserver 的实现DAO 降低了代码的耦合度 就OK了 其他的都不需要变 你说方便不方便


在一个 如果你使用了抽象工程 你就可以配置你的 oracleDaoService 是单例模式 还是 原型模式

极大的可配置性,同时还可以提高程序的性能 多好啊! 想加什么就加什么,想怎么改就怎么改

你说的那个实现4个系统 那一改 得乱成啥样,我改一个地四个产品都得改,一想都脑袋疼,还是个产品 老的程序员走了

在招新的程序员去改 那新的程序员估计想死的心都有了。



那如果现在业务有所改变,需要改一下SQL逻辑,那你要改几次SQL?技术带来的好处都知道,有谁想过带来好处的同时也会伴随副作用。


呵呵 需求变肯定需要改程序了,,,但是我们设计开发的宗旨是当有新的需求以及原有需求改变的时候,我们可以做到以最少的修改或者最方便的扩展来满足客户的需求。

这个功能本来就是可以实现的,为什么要去劝客户不这么做,,呵呵,,会让客户想 你们公司是不是技术不行啊,这不做那不做的,那我换家公司做吧。


没见过中途变数据库的项目,客户可能也不懂,你就应该帮他阐明清楚,哪些是重要的,哪些是次要的,不是人家提了什么需求都要接受。



现实中是有这种情况的 很正常,,比如说 一家公司想买我们公司的产品,,,那买我们公司的产品的是消费者,,,我们公司是生产者,,,下面我就直接说生产者和消费者了,,,

比如说消费者想买生产者的产品,,,但是消费者公司只有一台非常牛的oracle服务器,而且他们公司包括oa或者其他的项目的数据库也都是oracle,,,那他们新上的项目 新买的产品也希望是oracle的 方便管理,不想在去购买其他的数据库服务器了。而且他们的数据库管理员也只会oracle数据库管理。

那生产者的项目只支持mysql的 ,这就不行了吧。。


那你是做产品不是做定制项目吧。


呵呵 刚看到 咱们的出发点不一样 我的出发点是产品 你的出发点是项目
0 请登录后投票
   发表时间:2012-02-15  
a1721615168 写道
kanme818 写道
a1721615168 写道
kanme818 写道
a1721615168 写道
kanme818 写道
a1721615168 写道
caizi12 写道
WAMING5 写道
用抽象工厂设计不同的数据库DAO,根据数据库配置选择不同DAO实例


你这样设计和做四个支持不同数据库的系统有多大区别。


哈哈 有意思 像你这种想法 那还要设计模式干嘛 有什么用 需要改的时候我在重写一套不就完了

但是你要知道,好的程序,健壮的程序,容易扩展的程序是需要遵循开发规则的,

首先使用抽象工厂实现 只需要提供不同的实现DAO层就行 每种数据库的DAO都分别实现一个

他遵守了开放封闭原则,有需求变更的时候不需要修改代码但是可以新加类来扩展,如果以后还需要增加sqlserver的支持

我只需要在新建一个sqlserver 的实现DAO 降低了代码的耦合度 就OK了 其他的都不需要变 你说方便不方便


在一个 如果你使用了抽象工程 你就可以配置你的 oracleDaoService 是单例模式 还是 原型模式

极大的可配置性,同时还可以提高程序的性能 多好啊! 想加什么就加什么,想怎么改就怎么改

你说的那个实现4个系统 那一改 得乱成啥样,我改一个地四个产品都得改,一想都脑袋疼,还是个产品 老的程序员走了

在招新的程序员去改 那新的程序员估计想死的心都有了。



那如果现在业务有所改变,需要改一下SQL逻辑,那你要改几次SQL?技术带来的好处都知道,有谁想过带来好处的同时也会伴随副作用。


呵呵 需求变肯定需要改程序了,,,但是我们设计开发的宗旨是当有新的需求以及原有需求改变的时候,我们可以做到以最少的修改或者最方便的扩展来满足客户的需求。

这个功能本来就是可以实现的,为什么要去劝客户不这么做,,呵呵,,会让客户想 你们公司是不是技术不行啊,这不做那不做的,那我换家公司做吧。


没见过中途变数据库的项目,客户可能也不懂,你就应该帮他阐明清楚,哪些是重要的,哪些是次要的,不是人家提了什么需求都要接受。



现实中是有这种情况的 很正常,,比如说 一家公司想买我们公司的产品,,,那买我们公司的产品的是消费者,,,我们公司是生产者,,,下面我就直接说生产者和消费者了,,,

比如说消费者想买生产者的产品,,,但是消费者公司只有一台非常牛的oracle服务器,而且他们公司包括oa或者其他的项目的数据库也都是oracle,,,那他们新上的项目 新买的产品也希望是oracle的 方便管理,不想在去购买其他的数据库服务器了。而且他们的数据库管理员也只会oracle数据库管理。

那生产者的项目只支持mysql的 ,这就不行了吧。。


那你是做产品不是做定制项目吧。


呵呵 刚看到 咱们的出发点不一样 我的出发点是产品 你的出发点是项目


呵呵,不知道楼主什么性质的项目。
0 请登录后投票
   发表时间:2012-02-15  
楼主都没信了,咱们还讨论的这么激烈,汗了,闪人了,温习下准备跳槽,哈哈
0 请登录后投票
   发表时间:2012-02-15  
a1721615168 写道
楼主都没信了,咱们还讨论的这么激烈,汗了,闪人了,温习下准备跳槽,哈哈


说不定领导说项目取消了。
0 请登录后投票
   发表时间:2012-02-15  
遇到过,不过用hibernate,主键是用uuid,也可以用自增,不过oracle数据库要用触发器来实习自增。
0 请登录后投票
   发表时间:2012-02-17  
kjj 写道
只能在dao层抽象两种设计了 比如 MysqlUserDao ,OracleUserDao,同样的功能实现两套就行了,你懂得,



这样会不会太麻烦了 每种数据库都要写一种
0 请登录后投票
   发表时间:2012-02-17  
kanme818 写道
a1721615168 写道
楼主都没信了,咱们还讨论的这么激烈,汗了,闪人了,温习下准备跳槽,哈哈


说不定领导说项目取消了。



这几天出差 ,刚回来。不好意思
0 请登录后投票
   发表时间:2012-02-17  
icefishc 写道
nkadun 写道
ice_panda 写道
我是指重新开发一套的时候,如何让系统可以支持多数据库

全部采用SQL99标准语法,当然,这不一定能满足需要,那么可能的选择就是用Hibernate或者做一套语法转换器,那就复杂了……
反正是包含特性语法的同一段程序不可能在不改变代码的情况下转移到另一种数据库中


只用SQL99的标准语法也不能保证能同时在2个环境上运行, 而且肯定会遇到2个都不能用的情况。。。
我建议只要直接写sql就放弃一套sql同时适应2个环境的想法, 除非能确定项目中都是极其简单的sql




SQL99 可以做到。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics