日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据与程序分离——程序中那些表的事儿

發(fā)布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据与程序分离——程序中那些表的事儿 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們先來看一小段程序:

const char *GetString(int key) {if (key == 1)return "first";else if (key == 2)return "second";else if (key == 3)return "third";else if (key == 4)return "forth";//...return "none"; ]

這是我們經(jīng)常會看到的一段程序,設(shè)計模式中著名的工廠方法。它封裝了將“材料”生產(chǎn)成“產(chǎn)品”的過程,使程序更加容易讀懂,并方便后期修改(易讀性與可維護性)。當(dāng)然,在“產(chǎn)品”很少的時候,這樣的程序又簡明又易寫,很是適合。但當(dāng)我們的工廠逐漸變大,產(chǎn)品的種類越來越多的時候,你就不得不寫上一堆又一堆的 else if 了,這可是非常麻煩和煩人的一件事。后期修改的時候,讀程序的人也會不禁咒罵之前的作者——這樣的意大利面條可不是誰都愿意吃的。


沒錯,當(dāng)面對這種情況時,你馬上會想到用 switch 來代替。你很聰明,switch 從形式上,確實要比 else if 明了得多了,但是它也有一個缺點:如果 key 變?yōu)榱朔钦突?char 型,又該怎么辦?

?

這個時候,我們會想到,如果有一種方法,能將數(shù)據(jù)與程序分離開,每次出現(xiàn)新產(chǎn)品,只需要將產(chǎn)品的樣式填到菜單里就可以,那多好。啊,數(shù)據(jù)庫,它可以很方便地管理這些字段。這是個好的建議,當(dāng)數(shù)據(jù)項和數(shù)據(jù)量多到一定程度時,使用數(shù)據(jù)庫幾乎成為必然手段。然而,我們面對的卻是一種尷尬的情況:問題的規(guī)模不適合用 else if 和 switch 處理,如果使用數(shù)據(jù)庫,且不說運行效率,僅從操作的麻煩程序上來說,還不如直接寫 else if 了。。。所以在這里,我們需要的不是強大卻麻煩的大型數(shù)據(jù)庫,我們需要的,僅僅是編程上的一點小技巧。說到這里,也許您已經(jīng)明白了,沒錯,就是在程序中實現(xiàn)一個數(shù)據(jù)表與查詢方法。查詢方法只按固定的方式去數(shù)據(jù)表中查詢對應(yīng)項的數(shù)據(jù),然后返回。這樣,既不必連接消耗資源的數(shù)據(jù)庫,提高程序運行效率,又可以明了簡便地完成我們想要的模式。查詢方法很簡單,只要給一個數(shù)據(jù)結(jié)構(gòu),遍歷就是了,那么表呢?用什么來實現(xiàn)?對,在C中,數(shù)組是一個必然的選擇。表是二維的,那么用二維數(shù)據(jù)嗎?顯然不行,二維數(shù)據(jù)只能維護一堆數(shù)據(jù)類型相同的數(shù)據(jù),這顯然不符合我們的需要。我們是要將int型數(shù)據(jù)對應(yīng)為string型的。于是我們想到了一個利器:結(jié)構(gòu)體數(shù)組。

?

那么讓我們來改寫一下之前的代碼:

#define END 9999typedef struct {int key;char *str; }ITEM;const ITEM table[] = {{1, "first"},{2, "second"},{3, "third"},{4, "forth"},//... {END, NULL} };const char *GetString(int key) {for (int i = 0; table[i].key != END; i++) {if (table[i].key == key)return table[i].str;} }

table維護了數(shù)據(jù)的對應(yīng),而GetString只是遍歷table去查找相應(yīng)項。每當(dāng)產(chǎn)品增加時,我們只需要在table中添加一個對應(yīng)項即可。這樣就解決了我們所面對的用 else if? 和 switch 不足,用數(shù)據(jù)庫又有余的數(shù)據(jù)對應(yīng)問題。

同樣的方法也適用于Java。Java中使用枚舉來替代結(jié)構(gòu)體數(shù)組。

轉(zhuǎn)載于:https://www.cnblogs.com/qyit/archive/2012/05/30/2525801.html

總結(jié)

以上是生活随笔為你收集整理的数据与程序分离——程序中那些表的事儿的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。