2015年12月18日 星期五

Android - Ch3 Android 目錄結構 與 MVC 架構

 

流程架構永遠是最重要的,程式碼永遠是排最後的;寫不出來很正常,不需要太苦惱。一年四季,花開花謝,出去走一走,Coding可以讓你體會人生,但不是你全部的人生 : )




一、Android 專案目錄結構


Android的專案,主要可分為3個部分:分別是 manifest、java 和 res,下面以本篇範例-Marriage Suggestion App-的專案目錄結構來做說明。



1. manifest


Android App 整體資訊的主要設定檔,內有一個預設名稱為 AndroidManifest.xml 的檔案。設定檔的內容使用XML格式,使用標籤(tag)來執行一些設定。

[用心去感覺] manifests 意思為「表明」


2. java


放置 Java 原始程式,子目錄名稱為 [Company Domain(inverse) + Application name],裡面有一個預設的 Activity 元件 MainActivity.java。


3. res


為 resource 的縮寫,專案所需的 UI 相關檔案,如 layout、圖像與文字。

  • drawable : 圖像檔案資源,例如 png、jpg……圖形檔案
  • layout  : UI 的 layout
  • values : UI 需用到的文字 (strings.xml)、顏色等一些常數資料


4. Gradle Scripts


Gradle 簡單說就是「專案自動化建構工具」。它的應用不僅在 Java 領域,也可和其他語言的開發環境搭配使用。

該目錄儲存與 Gradle 建置系統相關的設定檔,Gradle 是 Android Studio 採用的全新 App 建置系統。每一個 App 可以有多個模組,例如一個音樂播放 App,可以包含行動電話、平板電腦、穿戴式三個模組,每一個模組都可以被建置成一個獨立的 App。

在Gradle Scripts目錄有下列兩個主要的設定檔,它們都是Groovy格式的文字檔:

  • build.gradle(Project:專案名稱):應用程式最頂端的Gradle設定檔。以前面建立的應用程式專案來說,名稱是「build.gradle(Project:HelloAndroid)」。
  • build.gradle(Module:模組名稱):每一個模組的Gradle設定檔。以前面建立的應用程式專案來說,名稱是「build.gradle(Module:app)」。





二、Android 的 MVC 架構



為了實現 MVC(Model-View-Controller)架構,Android 將 APP 的開發分成三大部分:

  • Model:業務邏輯 (business logic) 處理,比如資料庫、網絡、演算法操作,耗時的任務等都在model處理。
  • View:處理顯示的部分,XML布局可以視為View,顯示Model的結果。
  • Controller :在Android中,Activity處理用戶交互問題,因此可以認為Activity是控制器,例如,
    1. Activity讀取View的資料(eg. 讀取當前EditText控制器的資料)
    2. 控制用戶輸入(eg. EditText控制器資料的輸入)
    3. 向Model發送資料請求(eg. 發起網絡請求等)。




Android中的V和C確實分得不太清楚,有人建議以MVC相似的MVP來做Android的開發,然過於細節在此不贅述。嚴格來講,在Android,activity 和 intent 起到了controller的角色,所以很明顯業務邏輯(business logic)不應該放在activity。建議在稍大一點的項目中將controller獨立出來,以避免將過多邏輯程式寫在activity中,程式碼太過於雜亂。






References


Android Tutorial 第一堂(3)開始設計 Android 應用程式
http://www.codedata.com.tw/mobile/android-tutorial-the-1st-class-3-app-project/

Android Studio 專案目錄、架構與結構 ( 寫得好好,還有範例碼 :D )
http://www.smalljacky.com/programming-language/android/android-studio-project-directory-structure/

androidbmi : 什麼是重構 (有重構範例,很值得一探究竟!)
https://code.google.com/p/androidbmi/wiki/BmiRefactor

知乎 - 你怎么看待在 Android 中应用MVC,是否有必要抽象出独立于 Activity 的 Controller ?
https://www.zhihu.com/question/19766132

Github - LuckyJayce/MVCHelper
https://github.com/LuckyJayce/MVCHelper

框架模式 MVC 在Android中的使用
http://blog.csdn.net/feiduclear_up/article/details/46363207

An Investigation into Flow and Mortar
https://www.bignerdranch.com/blog/an-investigation-into-flow-and-mortar/

前端之Android入门(3):MVC模式(上)
http://isux.tencent.com/learn-android-from-zero-session3.html






技術提供:Blogger.