2013年11月5日 星期二

Android: 當資料庫越來越肥大 之 容易擴充的DB架構

使用這樣的寫法在修改或擴增database的時候可以比較舒服(我覺得啦XD)
不過如果只是要寫一個小小且不太會擴充的db那就先不需要這把牛刀了!

後面有完全沒有整理過(囧)的範例code,可能看code比較好懂.

此架構大致分為五個部分:

DBHelper


  • 這個就是一般在寫db的時候繼承SQLiteOpenHelper而來的class,這邊增加了一些function讓操作更便利一點.擔負起了依照schema來建立table、實際操作db等重責大任.
  • 這個class是獨立於project的,可以直接貼到別的project.

DBSchema


  • 掌握了整個db的架構,建立實體以後會喂给DBHelper的constructor吃.
  • 這個class幾乎也獨立於不同project,除了要在變數定義的時候告知這個project中table的相關資訊.另外加入新的Table時也記得要在這裡增加定義.

DBTable

  • 每一個table有自己專屬的class,所以加入新table的時候基本上不會動到舊的架構.
  • 提供的method儘量不存取到自己以外的table.
  • 提供存取自己table 的method给data provider使用.

Data Provider

  • 扮演db的adapter角色,可以存取多個db並且將資料處理組合後以便使用.
  • app的其他部分需要存取資料理當只會使用到Provider,不會直接使用DBTable.
  • Provider理當是唯一會直接使用到DBTable的class.
  • 可以視需求增加不同的data provider

Global initialization

因為DBHelper是採用singleton,所以用application context來做初始化.
我是另外建立了一個application class來確保db在被任何activity使用前已經初始劃完成.



建立一個新的table步驟:

  1. 先建立一個table class.
  2. 去Schema中加入Table資訊.
  3. 接著就可以在data provider中使用這個table.

剩下的就讓code自己來解說吧XD



沒有留言:

張貼留言