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
}
参考#
[[命名空間如何使用]]