Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 编写访问数据库的方法的最佳方法是什么?_Design Patterns - Fatal编程技术网

Design patterns 编写访问数据库的方法的最佳方法是什么?

Design patterns 编写访问数据库的方法的最佳方法是什么?,design-patterns,Design Patterns,在编写另一个充满了访问数据库表的方法的类时,我开始思考如何最好地编写这些方法,以防应用程序可能需要以服务器上负载最少的方式运行 例如,如果我有查询和显示条形图的方法foo,我可以这样编写: function foo (params) { this->query_db("select bar from bars where bar != foo"); for all bars display bar } 我想知道写这样的东西是否是更好的设计 function foo(bars

在编写另一个充满了访问数据库表的方法的类时,我开始思考如何最好地编写这些方法,以防应用程序可能需要以服务器上负载最少的方式运行

例如,如果我有查询和显示条形图的方法foo,我可以这样编写:

function foo (params) {
   this->query_db("select bar from bars where bar != foo");

   for all bars display bar
}
我想知道写这样的东西是否是更好的设计

function foo(bars,params) {
   if(!bars) { bars = this->query_db("select bar from bars where bar != foo"); }

   for all bars display bar
}
在第二种方法中,bars作为数组传递给方法foo,这将允许两件事,a)如果bars已经在同一实例中被查询过,则可以避免对数据库的调用b)foo现在可以通过在其他实例中传递数组来使用,您可能希望使用foo而不使用数据库中的数据

对于使用数据库的程序来说,这是一种很好的设计方法吗?是否有一种软件模式建议类似的设计?或者……这只是愚蠢吗?;)

点a)可能是有效的,只要您知道自己在做什么:在数据库前面实现缓存。这意味着您必须考虑缓存实现者所担心的所有常见问题:缓存大小与内存消耗之间的权衡,缓存数据的保留时间,如果基础数据库发生更改,缓存可能不再有效的可能性,您可能还想考虑使用对象关系映射工具(如Hibernate),它可以为您处理一些此类缓存。

我认为你的观点(b)实际上是一种反模式

有一种方法可以概括为“查询数据库并显示结果,或者显示您在不执行查询的情况下传递的某些数据”,它要求进行重构,因此它只做一件事