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
	

}

参考#

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。