[英]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 公司也遵循自己的設計模式,有些開發人員喜歡它,有些則不喜歡。 無論如何,回到你的部分問題:
考慮 Fragment 和 Activity 只是負責 UI 邏輯。 即加載視圖、更改視圖屬性(按鈕顏色、可見性等)、在這些視圖上顯示數據等(從 VM 獲取)。 MyFragmentAdapter-> 是的,使用 ViewHolder 制作單獨的適配器 class。 我什至讓單個 class 責任,即單獨的 ViewHolder class。 或者所有這些都應該 go 到 ViewModel 中?-> 不,ViewModel 不包含對視圖的引用! 它只是保存數據並與 ui 通信!
你認為這是一個好習慣嗎? 如果您正在研究 VM,那么這不是一個好主意。 正如我上面所說,Fragment(和 Activity)只負責 UI 邏輯。 在 VM 中,開始查詢 REST Api 調用等,然后將該數據發送到 UI。
主要活動永遠不會消亡,因此片段數據也永遠不會消亡。-> 是的,但 VM 的主要魔力是,它“幸存”了配置更改。 當活動重新創建時,VM 是“相同的”並保存所有需要在 UI 上顯示的數據。
服務沒有 UI,不需要 ViewModel。
好的,但我會考慮每個功能模塊都有自己的邏輯。 示例:recipes-> ui-> 片段、適配器、視圖模型、di(依賴項)、數據(api、存儲庫)、域(用例)
我不會考慮你在做什么好的做法。
無論您遵循 MVVM、MVP、MVC 還是其他方式,我們的想法是將您的應用程序解耦為至少 2 個不同的層:UI 和 Logic。
簡而言之,這在 Android 中意味着不要在您的活動或片段中執行任何邏輯。
在 MVVM 中,所有邏輯都應在 ViewModels 中為 go。 go 不應在活動或片段中。 應該純粹通過觀察 ViewModel 中的 LiveData 字段來更新活動和片段。 LiveData 不是絕對必要的,但應該使用一些觀察者模式。 目標是讓你的觀點盡可能地愚蠢。 擁有數據驅動的 UI。 而且您的邏輯應該對平台一無所知,甚至不應該知道這是Android。
一些好處是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.