我們在程序開發(fā)中,也許經(jīng)常碰到這樣的情況,在一個(gè)業(yè)務(wù)流程中會(huì)調(diào)用很多不同的函數(shù)。
例如:
//---------------------------------------
func1(param1);
func2(param21,param22);
func3(param31,param32,param33);
//----------------------------------------
而在上面三個(gè)函數(shù)中每個(gè)函數(shù)的內(nèi)部很可能都查詢訪問了同一個(gè)數(shù)據(jù),這樣就造成了資源的浪費(fèi),
有沒有解決辦法呢?
我想了一個(gè)解決方法,我命名為“數(shù)據(jù)商店”。“數(shù)據(jù)商店”:從名字即可看出思路,在整個(gè)業(yè)務(wù)流程中創(chuàng)建一個(gè)二重hash表,先按類型做外層hash表的key,而后按每個(gè)對(duì)象關(guān)鍵字來做內(nèi)層hash表的key。用這種結(jié)構(gòu)把數(shù)據(jù)暫存起來以便業(yè)務(wù)流程中每個(gè)函數(shù)訪問。那怎么在業(yè)務(wù)流程中的每個(gè)函數(shù)內(nèi)部訪問呢?
把存儲(chǔ)數(shù)據(jù)的二重hash表做為參數(shù)傳給每個(gè)函數(shù)。
下面是偽代碼:
//-----------------------------------------------------------------
#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);
//-----------------------------------------------------------------
在每個(gè)函數(shù)中在訪問請求數(shù)據(jù)前,都在shop中搜索要請求的數(shù)據(jù)在shop中是否存在,如果shop中存在就
直接取出,不必再訪問請求數(shù)據(jù)節(jié)省了資源和時(shí)間。
這個(gè)解決方法只在一個(gè)業(yè)務(wù)流程中使用,不作為類似緩存或持久層來使用。請大家給些意見,現(xiàn)在還沒有完善。