簡體   English   中英

Android / Java中的OOP

[英]OOP in Android/Java

我目前正在開發一個flashcard-app,因為我不喜歡現有的,第二個原因是我想提高我的java / android技能。

在我的應用程序中,我試圖使用OOP。 我的卡存儲在sqlite數據庫中。

現在我的問題:目前我的對象“卡”代表一個單獨的Flashcard有自己的DatabaseAdapter,它可以用它來更新自己的狀態,即它的點。

 Card card = new Card();
 card.setPoints(10); //<-- Also update its row in the database

或者做這樣的事情會更好:

 DBAdapter dbAdapter = new DBAdapter();
 Card card = new Card();
 dbAdapter.setPoints(Card);//<-- Updates Card and Database!

你覺得什么更好?

Thx提前!

您在第二個示例中所做的是不可取的,因為您正在創建副作用。 更新數據庫也在更新卡,這是錯誤的。 更新數據庫應該做一件事,那就是更新數據庫。

我更喜歡第一種方法,因為卡知道如何更新自己,但你也犯了同樣的錯誤,更新數據庫。 讓數據庫知道如何更新自己,並且卡知道如何更新自己。 我認為它實現了關注的清晰分離。

例如:

card.setPoints(points)//update card and only card
dbAdapter.setPoints(card) //update the database and nothing else.

絕對是第一個。 設置點的類應該不知道如何設置(或存儲)點。 這是一種“責任分離”。

想象一下,如果您決定從數據庫更改為ACME Dilithium Crystal Accumulator(TM)。 在選項1和選項2中需要更改多少代碼?

我猜不是兩個。

 dbAdapter.update(card.getId(),card.getPoint());

語法應該是

  public boolean update(int id, int value)

您的DbAdapter應該只有存儲或檢索的方法,刪除不應該特定於卡功能的數據。

在上面的示例中, card.getId()返回與Card關聯的URI ,然后它只更新整數值,因此您的代碼具有職責分離和隔離。

如果上面提到的兩個代碼片段都有效,我寧願選擇第一個代碼片段,因為代碼看起來更具可讀性,更直觀且更短!

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM