2

我開始學習Android開發,也一直試圖遵循DDD設計模式。讓我感到困惑的一件事是應用程序邏輯與ContentProvider相關的地方。創建ContentProviders時,應用程序邏輯和約束在哪裏?

ContentProviders看起來很像我的存儲庫,但很多時候我不想直接暴露我的存儲庫。存儲庫/數據庫中的服務內可能還有一些額外的應用程序邏輯。

我發現大多數ContentProviders的例子都顯示他們直接訪問數據庫。在ContentProviders和數據庫之間有服務或應用程序對象是否是錯誤的?

例如,我正在嘗試創建個人財務/預算應用程序(例如Mint/Quicken等)。我將擁有一個事務數據庫和一個相應的TransactionProvider。在大多數情況下,交易是相互獨立的。然而,如果兩個交易被標記爲同一個「轉賬」的一部分,那麼將存在一些我希望在這兩個交易之間保持同步的字段。如果有人更改了一筆交易的類別或金額,我想確保爲交易的其他賬戶的交易更新相同的值。

回答

1

ContentProvider可以在其insert()update()delete()query()方法執行任意代碼。它們不一定與相應的數據庫操作一對一映射,結構定義(即字段)本身也不是。你可以,例如:

  • 更新超過一張桌子當您插入,更新或刪除。
  • 保持SQLite中的規範化表,但提出一個非標準化的接口進行查詢。
  • 根本不在數據庫中存儲數據(例如公開/處理應用程序私有存儲中可用的文件)。
  • & c。

因此,您確實可以在ContentProvider的「後端」中包含任何您想要的業務邏輯。在你的情況下,這意味着更新相關記錄以保持同步。

只是爲了澄清,因爲你開始Android開發,它沒有必要建立一個ContentProvider的,如果你只是想將數據存儲在SQLite的 - 你可以直接使用SQLiteDatabase爲。 ContentProvider通常是,用於將您自己的數據展示給其他應用程序,或者用於搜索建議等特殊情況。

Creating a Content Provider

確定是否需要內容提供商。你需要建立一個內容提供商 如果要提供以下一項或多項特徵:

  • 你想複雜的數據或文件提供給其他應用程序。
  • 您想允許用戶將複雜的數據從您的應用程序複製到其他應用程序。
  • 您想使用搜索框架提供自定義搜索建議。

如果在您的應用程序中完全使用 ,則不需要提供者使用SQLite數據庫。

如果你正在構建一個財務數據應用程序,你可能不需要一個。你想讓其他應用程序能夠訪問這些數據嗎?

相關問題