2012-03-20 34 views
1

我已經構建了一個基於SQLite數據庫的整個銀行應用程序。今天我有一個恐慌的時刻。我一直在閱讀關於面向對象的各種文章,我相信我理解這個概念,並且它很重要,但是,我無法理解它在像我這樣的應用程序中的位置。到目前爲止,也許無知,我來處理數據的邏輯一直是如下(編輯銀行形式新帳戶應用實例僞代碼):數據庫驅動應用程序中的OOP建模對象?

  • 在EditAccountApplication活動,定義一個公共光標,這個光標會保留之前申請表格數據的細節。
  • 使用來自DbHelper的方法查詢舊的應用程序表單數據的數據庫,並返回一個帶有所述數據的Cursor對象。
  • 使用此Cursor,填充用戶可以編輯的UI組件(EditText,TextView等)的值以重新提交他們的應用程序與更新的數據。
  • 用戶單擊按鈕以重新提交他們的應用程序表單,在按鈕的onClick()方法中,爲ContentValues對象中的每個UI組件定義和設置變量,然後將此ContentValues對象傳回給DbHelper的方法,最終更新相關的數據庫記錄。

這是我在使用SQLite後端時應該採取的正確方法嗎?我沒有看到建模對象在這種情況下會如何幫助(光標幾乎是對象,我不需要操作它,因爲UI元素可供用戶操作)。

我真的很想知道這種情況是否是創建建模對象沒有額外好處的情況。

我真的很感謝任何幫助,現實檢查將是一個緩解在這一點上,因爲我嚇壞了!

再次感謝!

+0

這是一個非常有趣的話題,但它應該被轉移到程序員。 – MPelletier 2012-03-21 02:17:50

+0

我已經更新了它,使它更具體,你知道它也可以被移動嗎? – AutoM8R 2012-03-21 17:29:30

+0

這個答案接近我的問題,不完全,但非常接近:http://stackoverflow.com/questions/1122679/querying-and-working-with-cursors-in-sqlite-on-android – AutoM8R 2012-03-21 17:31:34

回答

1

您已經在使用OOP而沒有意識到它。當爲Android等平臺編寫移動應用程序時,通常使用通用模式來執行常見任務(例如更新Sqlite後端)。這些模式可以在Android Dev頁面或書本中的片段中找到,並且非常具體。所以很難偏離它們 - 它們「已經」是面向對象的。

現在,假設您將應用程序中的銀行帳戶對象實例保存在內存中,因此需要使用BankAccount對象進行模式化。在那裏,你可以遵循OOP原則,如封裝和數據例如隱藏由具有方法:

debitAccount(double amt) { 
    // do validation checks for account balance such as don't let it go negative 
} 
在BankAccount類和操縱在

。或者,如果您公開了更新對象的API,並且該更新的偵聽器需要通知,那麼您有機會使用Observer模式顯式建模OOP。

但是對於一個簡單的任務,如更新SQLite數據庫,當您使用特定的Android模式(如您正在使用的)時,代碼是ALREADY Object Oriented。

恕我直言,你很好。

+0

謝謝Sid,我完全明白,Cursor和ContentValues是我的對象。他們關鍵的區別是我的應用程序是物理存儲與內存存儲。當用戶查看某個項目時,他們會對該視圖中的該項目執行操作,或返回到主視圖。所有更改都在物理DB存儲中更新,因此內存中沒有任何內容被傳遞。如果記憶中沒有什麼東西在傳遞,那麼首先就沒有把它客觀化的意義,是嗎? – AutoM8R 2012-03-21 21:30:58

+0

那麼,當你向用戶展示這些項目時,他們已經在內存中。我認爲不同的是,像文字等這些項目已經是類和遵循面向對象。假設您正在爲自己的類建模,那麼您需要更多地考慮OOP。 – Sid 2012-03-22 01:40:13

+0

如果您對此有疑問,請隨時詢問。 – Sid 2012-03-22 01:40:37

0

面向對象的概念應該用於給定的應用程序取決於您試圖解決的問題的類型。您的問題是您是否應該在數據驅動的應用程序中使用面向對象的建模,該應用程序的編號爲begging the question。也就是說,您已經使用數據驅動的風格編寫了您的應用程序(假設這是最適合手頭問題的風格),並且正在詢問從不同架構範例的概念中合併的正確方法。

如果您實際編寫了完整的銀行應用程序,那麼您可能會遇到用戶界面問題,輸入驗證問題,銀行業領域問題,數據訪問問題等,並且您的架構可能在面向對象設計原則。

如果你只是一個純粹的form-over-data CRUD應用程序,它沒有業務邏輯,並且不會隨着時間的推移而不斷髮展以結合新的功能,那麼你的方法就好了(雖然有很多快速應用程序編程工具你可能已經解決了這個問題,而且幾乎沒有實際的編碼)。

+0

謝謝德里克,我明白你的意思。我確實需要驗證問題,但是,它們很容易在DbHelper類中處理,並且它是相關的方法。對我來說,通過DbHelper類運行所有數據庫更改是有意義的,我想我已經創建了一個巨大的對象:DbHelper,這可能會被拆分成多個對象。最終,我想有兩個測試:程序是否易於更新,是否容易跟蹤和修復錯誤?目前我可以很容易地更新程序,並且錯誤也很容易被廢除。在這一天結束時,我想這是最重要的? – AutoM8R 2012-03-21 21:25:56

相關問題