志气天涯  
大数据搜索,分布式服务,模式设计,系统架构设计
日历
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
统计
  • 随笔 - 1
  • 文章 - 0
  • 评论 - 5
  • 引用 - 0

导航

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

 
  我们在程序开发中,也许经常碰到这样的情况,在一个业务流程中会调用很多不同的函数。

    例如:
//---------------------------------------
    func1(param1);

    func2(param21,param22);
   
    func3(param31,param32,param33);

//----------------------------------------
     而在上面三个函数中每个函数的内部很可能都查询访问了同一个数据,这样就造成了资源的浪费,
有没有解决办法呢?
     我想了一个解决方法,我命名为“数据商店”。“数据商店”:从名字即可看出思路,在整个业务流程中创建一个二重hash表,先按类型做外层hash表的key,而后按每个对象关键字来做内层hash表的key。用这种结构把数据暂存起来以便业务流程中每个函数访问。那怎么在业务流程中的每个函数内部访问呢?
把存储数据的二重hash表做为参数传给每个函数。
下面是伪代码:
//-----------------------------------------------------------------
#include <map>
#include <string>

using namespace std;

typedef struct DataNode
{
   string type;
   map<string,void*> goods;
} Chest;

map<string,Chest> shop;

func1(param1,&shop);

func2(param21,param22,&shop);
    
func3(param31,param32,param33,&shop);
//-----------------------------------------------------------------
在每个函数中在访问请求数据前,都在shop中搜索要请求的数据在shop中是否存在,如果shop中存在就
直接取出,不必再访问请求数据节省了资源和时间。
这个解决方法只在一个业务流程中使用,不作为类似缓存或持久层来使用。请大家给些意见,现在还没有完善。




posted on 2011-01-11 15:58 sapielion 阅读(1524) 评论(5)  编辑 收藏 引用
评论:
  • # re: 我在程序模式设计上的一个想法不知道算不算一个模式  doyle Posted @ 2011-01-11 16:57
    这是个缓存的思路
    不过,请解决数据更新问题
    如果数据库里的值更新了,你这个二维hash表要怎么更新呢
    先查询一次,判断是不是更新了?
    那还是直接查询吧  回复  更多评论   

  • # re: 我在程序模式设计上的一个想法不知道算不算一个模式  gbb21 Posted @ 2011-01-11 17:05
    这个不是山寨cache么?不过cache做得比你这个更加完善,首先,cache是隐式的,不需要额外的变量,其次cache很好解决了声明周期控制,并发访问控制等在你这很难解决的问题。  回复  更多评论   

  • # re: 我在程序模式设计上的一个想法不知道算不算一个模式  不得不过来回复一下 Posted @ 2011-01-11 21:21
    不得不过来回复一下

    如果这个数据商店是唯一的,那么可以做成全局静态变量,完全不需要用参数

    另外,如果你的程序运行在一个容器中,比如servlet,EJB之类的,完全可以将这个数据商店托管给容器来处理,比如绑定到JNDI,你这个想法太简单了,不能做为模式。
      回复  更多评论   

  • # re: 我在程序模式设计上的一个想法不知道算不算一个模式  jmchxy Posted @ 2011-01-12 10:39
    另外,如果这一系列函数和那个数据都是和某个问题相关的,可以把这些函数和数据封装到类中,数据直接是类的成员,也不需要显式提供一个单独的参数,还可防止数据被其他函数错误修改。  回复  更多评论   

  • # re: 我在程序模式设计上的一个想法不知道算不算一个模式  finalday Posted @ 2011-01-13 13:25
    这个模式应用得很广泛。一说cache大家都知道了。
    不是gof里面的模式,但一般情况下其实比那些模式更常用。
    不建议自己实现,有太多好实现了。
      回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © sapielion Powered by: 博客园 模板提供:沪江博客