bin^2

bin^2

discord server
twitter

私はAndroidアプリを開発する方法-パッケージ構造

Android アプリの開発方法 - パッケージ構造#

#記事 / 完了 / 公開
#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
}

各モジュールの usage はモジュール内のレイヤーです。

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

モジュールの ui|data|core はすべて必要ではありません。1 つだけ、または 2 つ、またはすべてを持つことができます。実際の開発プロセスでは、一部のモジュールにはインターフェースがあり、一部のモジュールにはデータのみがあります。

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 パッケージでは、ドメインをドメイン_a、ドメイン_b などのドメインごとに細分化しています。usecases には ui で使用される usecases の実装が含まれています。各ドメインでは、リポジトリを介して具体的な技術フレームワークに依存しないエンティティを取得します。リポジトリとエンティティの具体的な実装は 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
	

}

参考#

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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。