【小説】漆黒のリファクタリング 〜深淵なる整理整頓〜第2章:漆黒の指導

(第1章はこちら↓)

「まずは、汝の実装の根底にある闇を理解せねばならん……」

翌日の朝、九十九アキトは会議室のホワイトボードの前に立っていた。横には天野リコ、そして真剣な面持ちで座る緋色カナタ。

「あの、闇神さ……九十九さん」緋色が恐る恐る質問する。「トランザクション分けた方が、処理は速くなりますよね?」

「ふむ」九十九は腕を組む。「確かに個々の処理は早くなる。されど……」

「それじゃダメなの!」天野が遮る。「まず、注文処理に必要な責任の範囲を考えましょう」

天野はホワイトボードにペンを走らせる。


注文処理の責任範囲

  1. 在庫の確認・確保

  2. 注文情報の保存

  3. 支払い処理の実行

現状の問題

  • 在庫確認と確保が分離

  • 処理が複数のトランザクションに分散

  • ドメインロジックが散らばっている


「むむ……」緋色は首を傾げる。「でも、テストは通ってましたよ?」

その時、九十九が眼鏡を光らせる。 「テストに潜む闇をお見せしよう」

// 緋色の実装したテスト
@Test
fun `在庫があれば注文できる`() {
    // 在庫を用意
    stockRepository.save(Stock("ITEM1", 10))
    
    // 注文実行
    orderService.processOrder("USER1", listOf(
        CartItem("ITEM1", 5)
    ))
    
    // 確認
    val order = orderRepository.findLatest()
    assertNotNull(order)
}

このテスト、何が足りない?」天野が問いかける。

「えっと……」緋色が考え込む。

「我が漆黒の目が全てを見通す」九十九が声を上げる。「同時性の闇が、このテストには欠けているのだ」

「そう」天野が頷く。「同時に注文が来た時のテストをしていないのよ」

緋色の目が開かれる。「あ……!」

「しかし」九十九が続ける。「まずは、混沌を整理せねばならぬ」

天野はホワイトボードに新しい設計を描き始めた。

// 改善案の方針
class Order {
    // 注文ドメインの核となるクラス
    // ビジネスロジックをここに集約
}

class OrderProcessor {
    // トランザクション管理とユースケースの分離
    // 永続化の責務を持つ
}

「ドメインとユースケース?」緋色が不思議そうに首を傾げる。

「然り」九十九が答える。「混沌を秩序に変える、漆黒の術よ」

「もう!」天野が突っ込む。「要するに、注文に関するルールはOrderクラスに、実際の処理の流れはOrderProcessorに、ってことよ」

その時、霧島が現れた。

「いやぁ、僕からすれば、これはDDDのAggregateパターンの良い例だと思うんだけど……」

「誰も聞いてないわよ!」天野が突っ込む。

桜井も会議室を覗き込み、にっこりと笑う。 「でも、緋色くん、少しずつ理解できてきてるみたいね」

確かに、緋色の目は輝きを増していた。散らばっていた実装が、少しずつ形を成していく過程が見えてきたのだ。

「よし!」緋色が突然立ち上がる。「じゃあ、こうすれば……」

// 緋色の新しい案
class Order private constructor(
    val id: String,
    val userId: String,
    private val items: List<OrderItem>
) {
    companion object {
        fun create(userId: String, items: List<CartItem>): Order {
            // ここでバリデーション!🔥
            require(items.isNotEmpty()) { "注文は空っぽダメっす!" }
            return Order(
                id = generateOrderId(),
                userId = userId,
                items = items.map { OrderItem.fromCartItem(it) }
            )
        }
    }
}

「ほう……」九十九が感心したように見つめる。

「いいじゃない」天野も小さく微笑む。「コンストラクタをprivateにして、ファクトリーメソッドで生成するの、よく考えてるわ」

「えへへ」緋色が照れくさそうに頭を掻く。「闇神……じゃなくて、九十九さんのコード、こっそり参考にしてたんすよ」

「ふふ、我が漆黒の知見が受け継がれし時……」

「もう!」天野が突っ込みながらも、満足げな表情。「じゃあ、次はトランザクション管理を考えましょう」

「はい!」緋色の声に力が入る。

// git commit -m "refactor: Introduce domain model
//
// 🔥闇と光の導きの下、新たなる実装の道を発見せし時……
// って私が言わせた訳じゃないわよ!(天野より)
// 漆黒の血が騒ぐのだ(九十九より)
// 二人とも格好いいっす!(緋色より)"

会議室の窓から差し込む光が、ホワイトボードに新しく描かれた設計図を照らしていた。 混沌から秩序へ。その第一歩を、若き炎は確かに踏み出していた——。

#漆黒のプルリクエスト
#漆黒のリファクタリング
#小説
#短編小説
#ライトノベル
#ラノベ
#小説同人誌
#技術同人誌
#プログラマー
#リファクタリング
 

いいなと思ったら応援しよう!