[英]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.