話は twitter で FizzBuzz アンケートを取ったことに遡る。
UseCase がわからない...
— Yuki Anzai (@yanzm) 2019年2月15日
FizzBuzz で
「3の倍数のときは fizz が返る」
「5の倍数のときは buzz が返る」
「3の倍数かつ5の倍数のときは fizzbuzz が返る」
「3の倍数でも5の倍数でもないときはそのままの数字が返る」
これは
なぜこんなアンケートを取ったかというと、DroidKaigi 2019 のあるセッションで「これが UseCase だ」と言っていたものを自分はそうは思わなかった(domain layer のロジックだと思った)からである。
このUseCaseわからないツイートをする元になったのが https://t.co/xgNeH0vDdv このセッションで言ってた UseCase が UseCase なのかわからなくて、もしよかったらご意見聞かせてほしいです!
— Yuki Anzai (@yanzm) 2019年2月15日
いろんな人の意見を聞けてとてもよかった。
DDD本でアプリケーション層はめっちゃ薄くするんやで(意訳)と言っているのを思い出しました。
— Yuki Anzai (@yanzm) 2019年2月16日
このアンケートを起点としたやりとりの中でユースケース図の話があり、
個人的な解釈ですが、これはEntityのロジック(ドメイン知識で)、UseCaseは「FizzBuzzの入力値に対して出力を得る」みたいな感じで理解してます。
— 松岡@DDDブログ書いてます (@little_hand_s) 2019年2月16日
ユースケース図の吹き出しで出てくるぐらいの粒度のものがその名の通り1UseCaseというイメージです。 https://t.co/a8AB9z5gap
ユースケース図、およびユースケースについて理解を深めたかったで「ユースケース駆動開発実践ガイド」を読んでみた。
読んだ結果の理解は
ユースケースの理解を深めるべくユースケース駆動開発実践ガイドを読んでみた。
— Yuki Anzai (@yanzm) 2019年2月23日
ユースケースの詳しい話は最初なんだけど念の為最後まで読んだ。
(Springの実装例はいまいち賛同できなかったが)
「この本でのユースケースとは何か」から、こないだのFizzBuzzのやつについて思ったことを書いてみる pic.twitter.com/x6OXZkrq9m
この本だと、そもそも
— Yuki Anzai (@yanzm) 2019年2月23日
「3の倍数のときは fizz が返る」
「5の倍数のときは buzz が返る」
「3の倍数かつ5の倍数のときは fizzbuzz が返る」
「3の倍数でも5の倍数でもないときはそのままの数字が返る」
は「要求」である
要求にはいろいろなタイプがある(機能、データ、性能、容量、テストなどなど)。
— Yuki Anzai (@yanzm) 2019年2月23日
要求がそのまま個別のユースケースになるわけではない。
本では「個別の要求に対して、少なくとも一つのテストケースを作成しなさい」と言っている。
つまり、この4つの要求に対して個別のテストは必要である。
この本では「ユースケースにはユーザーとシステムとの対話が記述されています。」とある。
— Yuki Anzai (@yanzm) 2019年2月23日
この4つの要求にはユーザーが出てこないし、システムがなにをどうユーザーに提供するのかも不明なのでユースケースを記述することはできない。
例えばユーザーの入力に対するFizzBuzzを表示するWebサービスを考えているとするなら
— Yuki Anzai (@yanzm) 2019年2月23日
ユースケース記述は
基本コース:
ユーザーは数字を入力してボタンを押す。システムは数字に対応するFizzBuzzを画面に表示する。
代替コース:
数字ではない文字: システムは数字を入力するようメッセージを表示する
のようになって(ここでの FizzBuzz は本でのドメインオブジェクト)、4つの要求は FizzBuzz に関連する機能要求のように思えた。
— Yuki Anzai (@yanzm) 2019年2月23日
終わり。
「ユースケースはユーザーとシステムとの対話である」
この本が言うユースケースが何かはよくわかった。
— Yuki Anzai (@yanzm) 2019年2月23日
このユースケースは一般の人の認識でいういわゆるシナリオ的なやつだ。
これと CleanArchitecture の UseCase が同じとは思えない。
いったい、CleanArchitecture の UseCase は何なんだ...
(UseCase って名前がよくないのでは...)
CleanArchitecture は DDD を参考にしているだろうけど、CA がイコール DDD ではない、というのと同じように
— Yuki Anzai (@yanzm) 2019年2月23日
CA の UseCase は Ivar Jacobson のユースケースを基にしているけど、CA の UseCase がイコール Ivar のユースケースであるとは思えないんですよね。
なので名前がミスリーディングだなと
現状、私は Clearn Architecture の UseCase は 依存方向を規定するたの構成レイヤーの一つと理解している。
0 件のコメント:
コメントを投稿