bin^2

bin^2

discord server
twitter

我是如何開發Android App的——包結構

我是如何開發 Android App 的 —— 包結構#

#article/done/published
#2021-01-17

包命名規則#

namespace com.company.project {
	namespace framework{
		namespace common{}
		namespace services{}
	}
	namespace features {
		namespace feature_a {
			namespace module_aa {
				namespace ui {
				
				}
				namespace core {
				
				}
				namespace data {
				
				}
				com.company.project.features.feature_a.module_aa.ui-->com.company.project.features.feature_a.module_aa.core
				com.company.project.features.feature_a.module_aa.data-->com.company.project.features.feature_a.module_aa.core
			}
			namespace module_ab {
				namespace ui {
				
				}
				com.company.project.features.feature_a.module_ab.ui --> com.company.project.features.feature_a.module_aa.core
			}
		}
		namespace feature_b {
			namespace module_ba {
				namespace ui {
				
				}
				com.company.project.features.feature_b.module_ba.ui --> com.company.project.framework.services
				com.company.project.features.feature_a.module_ab.ui --|> com.company.project.framework.services

			}
		}
		namespace feature_n {
			namespace module_na {
			
			}
		}
	}
	namespace app{
		
	}
	com.company.project.app --> com.company.project.features
	com.company.project.app --> com.company.project.framework
}

com.{company}.{project}.{layer}.{feature}.{module}.{usage}
layer=app|features|framework
feature=feature1|feature2|...
module=module1|module2|...
usage=ui|data|core|....

company 是公司名稱,project 是項目名稱。
layer 是分層
app 是殼工程用來集成核心功能(features)和基礎設施(framework)

package com.company.project {
	package app{
	
	}
	package framework{
	
	}
	package features{
	
	}
	features --> framework
	app --> features
}

features 中是各個功能的包

package features{
	package feature_a
	package feature_b
	package feature_n
}

feature 中包含 1 個或者多個模塊,feature 作為一個組件來整體部署和集成

package feature_a{
	package module_aa
	package module_ab
}

每個 module 中的 usage 是模塊內的分層

package module_aa{
	package ui{
	
	}
	package data{
	
	}
	
	package core{
	
	}
	ui-->core
	data -->core
}

module 中的 ui|data|core 並不是都必須有,可以只有一個或兩個或者都有,
實際開發過程中,有些模塊是有界面,有些模塊只有數據

package features.feature_a{
package module_ac{
	package ui
	package core
	package data
	data--|>core
	ui-->core
}
package module_aa.ui
package module_ab.ui
module_aa.ui --> core
module_ab.ui --> core
}

ui 採用 MVVM 模式,
按照界面進行細分,放在 pages 中
utils 中存放和具體頁面無關,應用與所有界面的工具類
usecases 中存放可以在不同頁面之間複用的數據處理邏輯

package ui{
	package usecases
	package pages{
		package page_a{
		
		}
		package page_b{
		
		}
	}
	package utils 
	page_a --> utils
	page_b --> utils
	page_a --> usecases
	page_b --> usecases
}

core 核心包中,按照領域細分為 domain_a domain_b ... domain_n
usecases 中為 ui 中使用的 usecases 的實現,
每個 domain 中通過 Repository 獲取與具體技術框架無關的實體。倉庫和實體的具體實現在 data 中。

package core{
	package usecases{
		class SampleUseCase
		SampleUseCase --> domain_a
		SampleUseCase --> domain_b
	}
	package domain_a{
		class DomainAEntity
		interface IDomainARepository
		IDomainARepository-->DomainAEntity
	}
	package domain_b{
		class DomainBEntity
		interface IDomainBRepository
		IDomainBRepository-->DomainBEntity
	}
	package utils {
	
	}
	usecases --> utils
	domain_a --> utils
	domain_b --> utils
}

data 數據層按照存儲方式細分,api/room/datastore ...
repositories 中 為 core 中的倉庫接口的實現,倉庫同時負責緩存的實現
utils 中為工具類

package data{
	package api
	package room
	package datastore
	package repositories
	package utils
	

}

參考#

[[命名空間如何使用]]

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。