一些关闭我的头顶部我做了(当我有一些更多的时间或需要休息时,会增加更多)
客户端设计 – 这是内联sql(甚至与预准备语句)的VB方法让你陷入麻烦。你可以花费AGES只是找到这些语句。如果你使用像Hibernate这样的东西,并把尽可能多的sql到命名的查询,你有一个单一的地方大部分的sql(没有比试图测试sql是在一些IF语句,你只是不打“触发器”您的测试中的IF语句的标准)。在使用hibernate(或其他orms’)之前,当我直接在JDBC或ODBC中做sql时,我会将所有的sql语句作为对象的公共字段(使用命名约定)或属性文件(也有命名对于值的约定,PREP_STMT_xxxx和使用反射或迭代在启动时的值在a)测试用例b)启动应用程序(一些rdbms允许您预先编译预处理语句执行前,所以在启动后登录我在启动时预编译预处理程序以使应用程序自测试,甚至对于一个好的rdbms上的100个语句只有几秒钟而且只有一次,并且它已经节省了我的对接在一个项目中,DBA的(不同的团队,在不同的国家),模式似乎改变了NIGHTLY,没有理由每天早上,我们得到一个清单,它在哪里打破应用程序,在启动时。
如果你需要adhoc功能,把它放在一个命名良好的类(即,再次命名约定有助于自动配合测试),作为一种工厂为你查询(即它构建查询)。你将不得不写相当的代码反正正确,只是把一个地方,你可以测试它。你甚至可以在同一个对象或单独的类中编写一些基本的测试方法。
如果可以,也可以尝试使用存储过程。他们有点难测试如上。一些数据库也不会在编译时仅在运行时对存储过程中的sql进行预验证。它通常涉及说取一个模式结构的副本(没有数据),然后针对这个副本创建所有存储的proc(如果db团队更改DID没有正确验证)。因此,可以检查该结构。但作为一个变化点管理存储过程是巨大的。在变化所有得到它。特别是当db更改是业务流程更改的结果时。和所有语言(java,vb等获得更改)
我通常还设置一个表,我使用称为system_setting等。在这个表中,我们保留一个VERSION标识符。这是为了使客户端库可以连接并验证它们是否对此版本的模式有效。根据对模式的更改,如果客户端可能损坏模式(即,在数据库中没有大量的引用规则,但在客户端上),则不希望允许客户端连接。这取决于你是否也将有多个客户端版本(这发生在NON – 网络应用程序,即,他们运行错误的二进制文件)。也可以有批处理工具等。我还做的另一种方法是在某种属性文件中或在system_info表中定义一组模式到操作版本。这个表在登录时加载,然后由每个“管理器”使用(我通常有某种客户端api来做大多数db东西)来验证该操作是否是正确的版本。因此,大多数操作可以成功,但是你也可以失败(抛出一些异常)过时的方法,并告诉你为什么。
管理对模式的更改 – >你更新表或添加1-1关系到新表?我看到很多商店总是通过视图访问数据,因为这个原因。这允许表名称更改,列等。我玩的想法实际上处理视图,如COM中的接口。即。您可以为新功能/版本添加新的VIEW。通常,让你在这里的是,你可以有很多报告(特别是最终用户自定义报告),假设表格式。视图允许您部署新的表格式,但支持现有的客户端应用程序(记住所有那些讨厌的adhoc报告)。
另外,需要写更新和回滚脚本。并再次测试,测试,测试…
———— OKAY – 这是一个位随机讨论时间————–
实际上有一个大的商业项目(即软件商店),我们有同样的问题。架构是一个2层,他们使用的产品有点像PHP,但pre-PHP。一样。不同的名字。反正我进来的版本2 ….
它花费了一大笔钱做升级。很多。即。在现场免费提供几周的咨询时间。
它正在达到要添加新功能或优化代码的点。一些现有的代码使用存储过程,所以我们有共同点,我们可以管理代码。但其他领域是这个嵌入的sql标记在html。这对于快速上市非常有用,但是每次新功能的互动,成本至少增加了一倍,以便测试和维护。因此,当我们看着提取PHP类型代码,放入数据层(这是2001-2002,任何ORM的等),并添加了很多新功能(客户反馈)看看这个问题如何工程UPGRADES进入系统。这是一个大的交易,因为升级成本很多钱做正确。现在,大多数模式和所有其他东西,人们讨论一定程度的能量处理正在运行的OO代码,但是你的数据必须a)整合到这个逻辑,b)的意义和结构数据可以随时间而改变,并且经常由于数据工作的方式,你结束了在客户机组织中需要该数据的许多子进程/应用程序 – >临时报告或任何复杂的自定义报告,以及为自定义数据Feed等完成的批处理作业。
考虑到这一点,我开始玩一些有点遗憾的东西。它也有几个假设。 a)数据读取多于写入。 b)更新确实发生,但不是在银行级别。一或二秒说。
想法是应用COM /接口视图来了解客户端通过一组CONCRETE表(随模式更改而变化)访问数据。您可以为每个类型操作创建一个单独的视图 – 更新,删除,插入和读取。这个很重要。视图将直接映射到表,或允许您触发一个虚拟表,进行真正的更新或插入等。我实际想要的是一些可陷入的水平间接,仍然可以使用水晶报告等。注意 – 对于插入,更新和删除,您还可以使用存储过程。你有一个版本的每个版本的产品。这样你的版本1.0版本的模式,如果表更改,你仍然有版本1.0 VIEWS,但新的后端逻辑映射到新表,如果需要,但你也有版本2.0视图,将支持新领域等。这只是为了支持临时报告,如果你的业务人而不是编码者可能是为什么你有产品的全部。 (你的产品可以是垃圾,但如果你有世界上最好的报告,你仍然可以赢,反过来是真实的 – 你的产品可以是最好的功能明智,但如果它的更糟的报告,你可以很容易松动)。
好的,希望一些这些想法的帮助。