アーキテクチャ概要¶
システム全体像¶
DDDSシステムは、臓器提供・移植データを管理する業務システムで、サブドメイン別に役割が分離された構成になっています。
graph TB
subgraph "ユーザー"
HQ[本部ユーザー]
CO[コーディネータ]
TP[移植施設ユーザー]
end
subgraph "DDDSシステム"
HDQRS[hdqrs サブドメイン<br/>本部機能]
BRNCH[brnch サブドメイン<br/>コーディネータ機能]
DDDS[ddds サブドメイン<br/>移植施設機能]
TRACER[tracer サブドメイン<br/>生体移植機能]
end
subgraph "外部システム"
BOX[BOX API]
EDC[EDCシステム]
end
subgraph "データストア"
DB[(MySQL Database)]
SESSION[(Session Store)]
end
HQ --> HDQRS
CO --> BRNCH
TP --> DDDS
TP --> TRACER
HDQRS --> DB
BRNCH --> DB
DDDS --> DB
TRACER --> DB
HDQRS -.-> SESSION
BRNCH -.-> SESSION
DDDS -.-> SESSION
TRACER -.-> SESSION
HDQRS <--> BOX
HDQRS <--> EDC
アーキテクチャの特徴¶
1. マルチサブドメイン構成¶
各サブドメインが独立した機能を提供し、アクセス制御を実現しています。
| サブドメイン | ブランチ定数 | 主要機能 | 対象ユーザー |
|---|---|---|---|
| hdqrs | APP_HEAD | 本部管理、BOX連携、バッチ処理 | 本部管理者 |
| brnch | APP_CORDINATOR | ドナー情報管理 | コーディネータ |
| ddds | APP_TRANSPLANT | 死体移植・生体移植管理 | 移植施設ユーザー |
| tracer | APP_TRANSLIVE | 生体移植管理(2FA) | 移植施設ユーザー(生体) |
2. MVCパターン¶
CodeIgniter 3のMVCフレームワークを採用しています。
application/
├── controllers/ # ビジネスロジック、リクエストハンドリング
│ ├── common/ # 共通コントローラ
│ ├── headquarter/ # 本部専用コントローラ
│ ├── cordinator/ # コーディネータ専用コントローラ
│ └── transplant/ # 移植施設専用コントローラ
├── models/ # データアクセス層
├── views/ # プレゼンテーション層
│ ├── common/ # 共通ビュー
│ ├── headquarter/
│ ├── cordinator/
│ └── transplant/
└── hooks/ # フック処理(認証・ログ)
3. データベース構造¶
- トランザクションテーブル: 死体移植と生体移植でテーブルを分離
- 死体移植:
T_ISHOKU_KIHON、T_DONORなど - 生体移植:
T_ISHOKU_KIHON_LIV、T_DONOR_LIVなど(サフィックス_LIV) - マスタテーブル: 全機能で共通利用
accountTbl、institutionMst、mcd_mstなど
4. セキュリティ層¶
graph LR
REQUEST[HTTPリクエスト] --> CSRF[CSRF検証]
CSRF --> AUTH[認証チェック]
AUTH --> ACL[権限チェック]
ACL --> CONTROLLER[コントローラ]
CONTROLLER --> LOG[アクセスログ]
- CSRF保護: トークンベースの保護(一部エンドポイント除外)
- セッション管理: DBベースのセッション、HTTPOnly Cookie
- フック処理:
hooks/配下で認証・認可・ログ記録を一元管理
5. レイヤー構造¶
graph TB
subgraph "プレゼンテーション層"
VIEW[Views<br/>HTML/JavaScript/CSS]
end
subgraph "アプリケーション層"
CTRL[Controllers<br/>ビジネスロジック]
HOOK[Hooks<br/>認証・認可・ログ]
end
subgraph "データアクセス層"
MODEL[Models<br/>CRUD操作]
end
subgraph "データ層"
DB[(Database<br/>MySQL)]
end
VIEW --> CTRL
CTRL --> HOOK
CTRL --> MODEL
MODEL --> DB
技術的な設計方針¶
コード規約¶
- 命名規則:
- クラス: PascalCase(例:
LivingDonorTransplant) - メソッド: camelCase(例:
searchJotId) - テーブル: UPPER_SNAKE_CASE(例:
T_ISHOKU_KIHON_LIV)
依存関係管理¶
- 外部ライブラリ: PDFLib(帳票生成)
- フロントエンド: jQuery、Bootstrap、Font Awesome
エラーハンドリング¶
- アプリケーションエラー: カスタムエラーページ(
/errors/*) - ログ管理: ファイルベース(
application/logs/)+ DBアクセスログ