← Spring コース
20. パスが深い理由: 15階層を分解する
フォルダに責務が無いように見えるのは、正しい見方です。深いパスの大半は設計上の区切りではなく、決めた人の違う取り決めが、1本につながったものです。区切りが15個(ディレクトリ14段とファイル名)のパスを実際に作って分けると、と( を1つずつ持つビルドの単位)の区分が3段、の規約が3段、名を写した部分が8段でした。 が決めた段は1つもありません。
8段の部分は、ファイルの1行目に書く の . を / に置き換えたものです。先頭の jp/co/example はドメイン名を逆順にした接頭辞、shop と order は製品名と機能名、application/service/impl はチームの層の呼び名です。同じものを NestJS の公式の例にならって置くと6段で、差の9段は main/java の2、の3、製品名の1、層の3でした。
子がディレクトリ1つだけの、通過するだけの段は、14段のうち8段ありました。VS Code は子が1つだけのフォルダを、IntelliJ IDEA は中に別のパッケージしか無いパッケージを、1行に畳んで表示できます。 は Java の規則ではなくビルドツールの規約なので、 の回のプロジェクトでは src の直下からパッケージが始まっていました。段数はこの1例の値で、構成が違えば変わります。
点線の付いた語はタップすると説明が出ます。用語集を開く →
repo / backend / order-service1〜3段目。チーム: リポジトリと、ビルドの単位(Maven のモジュール)の区分
ここからソースの置き場
src / main / java4〜6段目。ビルドツール(Maven / Gradle)の規約
Ant には規約が無い。Ant の回の例では src の直下から始まるここから8段は package 宣言の . を / にしたもの
jp / co / example7〜9段目。名前付けの慣習: 逆ドメイン
shop / order10〜11段目。チーム: 製品名と機能名
application / service / impl12〜14段目。チーム: 層の呼び名
最後の1つ
OrderServiceImpl.java15個目。Java: public なクラスの名前がファイル名になる
この中で
Spring が決めた段: 0Spring を使わない素の Java でも同じ形になる
- 通過するだけ(子がディレクトリ1つ・ファイル0個)だったのは repo、src、java、jp、co、example、shop、application の8段です。ツリー全体ではディレクトリ32個のうち18個でした(tree の表示の 31 directories は根の repo を数えないので、1つ少なく出ます)。
- 数は、メインのコード8クラスと設定1つ、pom.xml 3つのツリーを実際に作って数えた値です。読者が見たプロジェクトそのものではありません。
- NestJS 側の6段は公式ドキュメントの図にならった想定のパスで、実物は作っていません。層の3段は言語と無関係で、NestJS でも作ろうと思えば作れます。
- 畳んで表示する機能は、IntelliJ IDEA のヘルプと VS Code 1.41 のリリースノートで確かめた範囲です。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Java
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗