サブライブラリ
ここでは,Yuライブラリにおけるサブライブラリの構成,命名,および依存関係に関する規則を定める.
定義
サブライブラリとは,特定の概念または問題領域に対して,一貫した意味論を提供する機能の集合である. サブライブラリは,独立した目的を持ち,単独で理解可能でなくてはならない. また,依存規則で定める例外を除いて,他のサブライブラリの存在を前提としてはならない.
命名規則
サブライブラリ名は次に従う:
- 代表する概念を表現できる英語の一般名詞を用いる
- アッパーキャメルケースを用いる
名前空間
サブライブラリが提供するすべてのエンティティは,対応する名前空間に配置される.それ以下の名前空間については,名前空間に関する規定に従う.
サブライブラリに対応する公開名前空間の名前は,サブライブラリ名をローワースネークケースで表したものとする.
例えば,Yu.Fooというサブライブラリには,yu::fooという公開名前空間が対応する.
公開境界
サブライブラリの公開APIは必ずその公開名前空間に属する. それ以外の非公開要素は非公開名前空間に配置され,それらへの依存は将来の互換性を保証しない.
依存規則
サブライブラリ間の依存は,片方向のみ認め,循環依存は禁止する.
依存は以下の条件のいずれか1つ以上を満たす際に許可される:
- 依存先が基盤となる概念や抽象基盤を提供する
- 依存により依存元の意味論が強化される
- 同等のエンティティの再実装を依存により避ける合理的理由が存在する
拡張点
サブライブラリがユーザに提供する拡張点は,当該サブライブラリの名前空間に属する. あるエンティティが拡張点であることはリファレンスによって規定される.