簡體   English   中英

對我當前的 MVVM android 應用架構的建議

[英]Advice for my current MVVM android app architecture

我有將 Java 用於后端 web 應用程序的經驗,我試圖弄清楚必須鋪設 MVVM 架構的方式,但我不能停止思考 ZD52387880E1EA9、22817A72D37 等服務......

到目前為止,這是我的 android app ui 的結構:

Main activity ---> Fragment -> SubFragment
               |-> Fragment2 -> SubFragment2
               |-> etc...

很簡單,對吧?

但就是這樣。 我沒有使用服務,也沒有使用 ViewModels(所以我猜它不是 MVVM 結構,然后大聲笑)。

所有的邏輯都寫在 Main Activity 中,用於全局的東西,每個片段也有自己的邏輯。 它開始變得一團糟,我一直在避免讓這個問題變得太多,哈哈。

所以我有4個問題:

Q1) 是否可以將邏輯寫入片段 class 中? 即 MyFragment 加載帶有 Firestore 文檔的 RV。 在我的 java 后端應用程序中,我總是在使用服務和東西,代碼仍然干凈很多,但在 Android 中,正如我上面所說,它開始變得混亂,因為在 MyFragment 中我需要適配器、ViewHolder 和多個查詢方法,因為我已經實現了一些過濾器。 因為這些過濾器是另一個單獨的 RV,所以我需要另一個適配器、另一個 ViewHolder,而且……你明白我的意思了。 對於我的應用程序的早期版本,我將片段與創建“MyFragmentAdapter.kt”文件的適配器分開。 您認為這樣做是一個好的解決方案嗎? 或者所有這些都應該 go 到 ViewModel 中?

Q2)到目前為止,我還沒有使用 ViewModel,因為如果我需要持久化數據,我會將這些數據放在我的 Main Activity 中,僅此而已。 主要活動永遠不會消亡,因此片段數據也永遠不會消亡。 你認為這是一個好習慣嗎?

Q3)查看開源 android 應用程序,我發現沒有包含服務文件夾的結構,這對我來說實際上是給定的。 這是為什么?

Q4)我項目中的文件夾布局如下:

.project.login -> some activities with barely any logic
        .models -> just pojos
        .utils -> some utils.kt
        .ui -> recipes (folder) -> bunch of fragments with lots of logic
            -> news (folder) -> more fragments with lots of logic

你會在這個結構中添加一些東西嗎?

我會盡量簡單地回答。 如果它適合你(你的例子),那么沒關系。 就那么簡單。 這個世界上沒有正確/錯誤的答案、最好的拱門、圖案等來制作 android 應用程序。 甚至更大的 IT 公司也遵循自己的設計模式,有些開發人員喜歡它,有些則不喜歡。 無論如何,回到你的部分問題:

  1. 考慮 Fragment 和 Activity 只是負責 UI 邏輯。 即加載視圖、更改視圖屬性(按鈕顏色、可見性等)、在這些視圖上顯示數據等(從 VM 獲取)。 MyFragmentAdapter-> 是的,使用 ViewHolder 制作單獨的適配器 class。 我什至讓單個 class 責任,即單獨的 ViewHolder class。 或者所有這些都應該 go 到 ViewModel 中?-> 不,ViewModel 不包含對視圖的引用! 它只是保存數據並與 ui 通信!

  2. 你認為這是一個好習慣嗎? 如果您正在研究 VM,那么這不是一個好主意。 正如我上面所說,Fragment(和 Activity)只負責 UI 邏輯。 在 VM 中,開始查詢 REST Api 調用等,然后將該數據發送到 UI。

主要活動永遠不會消亡,因此片段數據也永遠不會消亡。-> 是的,但 VM 的主要魔力是,它“幸存”了配置更改。 當活動重新創建時,VM 是“相同的”並保存所有需要在 UI 上顯示的數據。

  1. 服務沒有 UI,不需要 ViewModel。

  2. 好的,但我會考慮每個功能模塊都有自己的邏輯。 示例:recipes-> ui-> 片段、適配器、視圖模型、di(依賴項)、數據(api、存儲庫)、域(用例)

我不會考慮你在做什么好的做法。

無論您遵循 MVVM、MVP、MVC 還是其他方式,我們的想法是將您的應用程序解耦為至少 2 個不同的層:UI 和 Logic。

簡而言之,這在 Android 中意味着不要在您的活動或片段中執行任何邏輯。

在 MVVM 中,所有邏輯都應在 ViewModels 中為 go。 go 不應在活動或片段中。 應該純粹通過觀察 ViewModel 中的 LiveData 字段來更新活動和片段。 LiveData 不是絕對必要的,但應該使用一些觀察者模式。 目標是讓你的觀點盡可能地愚蠢。 擁有數據驅動的 UI。 而且您的邏輯應該對平台一無所知,甚至不應該知道這是Android。

一些好處是:

  1. 能夠對所有內容進行單元測試(許多開發人員不了解這一點的重要性)
  2. 解耦,可以在不改變邏輯的情況下改變UI,反之亦然
  3. 可移植性,可以采用相同的邏輯代碼並將其放在另一個平台或另一個應用程序中
  4. 更簡潔的代碼,更少的意大利面,更小的文件,遵循 SOLID 原則,更易於閱讀、調試、重構、修改等。

暫無
暫無

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

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