コンテンツにスキップ

移行期の共存

@deprecated / @migration_target で新旧ドメインを並置。

GitHub でソースを見る · アプリで開く

System ビュー
System ビュー
migration/system.krs
// Demonstrates: @deprecated, @migration_target, @experimental annotations
// Also intentionally triggers a domain drift WARNING:
// domain "Order" appears in both LegacyMonolith and OrderService within the same system.
//
// This pattern models a system mid-migration where the same business domain
// is temporarily owned by two services. The warning signals that migration is incomplete.
system ECommercePlatform {
label "ECプラットフォーム(移行中)"
user Customer [human] {
label "購入者"
role "商品を購入する一般ユーザー"
}
// @deprecated: scheduled for decommission after migration completes
service LegacyMonolith @deprecated {
label "レガシーモノリス"
description "旧来のモノリシックアプリケーション。2026年Q3廃止予定"
domain Order {
label "受注(旧)"
usecase PlaceOrder { label "注文を受け付ける" }
usecase QueryOrder { label "注文状況を照会する" }
}
domain Catalog {
label "商品カタログ(旧)"
usecase SearchProducts { label "商品を検索する" }
}
}
// @migration_target: the new service that will take over from LegacyMonolith
service OrderService @migration_target {
label "注文サービス"
description "受注ドメインを切り出したマイクロサービス"
// Same domain id "Order" as in LegacyMonolith → triggers domain drift warning
domain Order {
label "受注(新)"
usecase PlaceOrder { label "注文を受け付ける" }
usecase CancelOrder { label "注文をキャンセルする" }
usecase QueryOrder { label "注文状況を照会する" }
}
}
// @experimental: new service, API not yet stable
service CatalogService @experimental {
label "商品カタログサービス"
description "商品カタログを切り出したマイクロサービス。APIは変更される可能性あり"
domain Catalog {
label "商品カタログ(新)"
usecase SearchProducts { label "商品を検索する" }
usecase UpdateProduct { label "商品情報を更新する" }
}
}
service Payment {
label "決済サービス"
description "クレジットカード決済処理"
}
Customer -> LegacyMonolith "購入する(旧フロー)"
Customer -> OrderService "購入する(新フロー)"
LegacyMonolith -> Payment "決済を処理する"
OrderService -> Payment "決済を処理する"
OrderService -> CatalogService "商品情報を取得する"
}

© 2026 Hiroki Kondo · Licensed under Apache-2.0