1つのFeatureとはなにか
Package by Featureにおける「1つのfeature」とはなにか?
(その抽象度における)利用者視点での価値単位や認知単位、と言えるのではないか?mrsekut.icon
どの抽象度で見るかで「feature」が指すものは変わるはず
そのため、PBFではディレクトリが深くなるたびに、「feature」として指したいものが変わる
あるいは、featureにも抽象度がある、とも言える
また、「利用者視点のfeature」と「内部のfeature」は対応しない
N階層のfeatureは、N+1階層のfeatureを組み合わせることで構成できる
「N階層のfeatureを作りたい」という要求に応えるための価値単位がN+1階層でのfeature
/miyamonz-projects/子要素は親要素のために作る
具体的に考える
feature/の直下(第1階層)は、そのプログラムのユーザが必要とする価値単位と揃える
Cosenseなら、第1階層にnoteが存在し、
その下にeditor、
更にその下にcarretやline
が存在するというイメージ
/miyamonz/featureという単位で分ける基準
目的と手段
#WIP
参考程度に、『アジャイルな見積りと計画づくり』 p.29の本の中の「フィーチャ」の定義
見積もりの本なので、PBFとはぜんぜん違う粒度かも知れないが、参考までに
「フィーチャ」という言葉を本書では、ソフトウェアの機能、特性や特徴、性能目標、見た目や使い勝手など、いわゆる「売り文句」などを総称する言葉として使っている
フィーチャは要求仕様、機能要件、大機能、ユースケースといった言葉が指すものとよく似ている
しかし、これらとフィーチャとの決定的な違いは、フィーチャはユーザーにとってのソフトウェアの価値を表現したものであり、ユーザーに直接価値を提供するものだということだ
フィーチャとはユーザーにとっての価値なので、フィーチャには性能目標やセキュリティといったいわゆる非機能要件も含まれる
たとえば、ワープロのアプリケーションであれば、文章校正機能はフィーチャである
業務システムのバックエンドサーバーであれば、1 分間あたりの最大処理能力はフィーチャだ
コンパイラならば最新の言語仕様に完全準拠していることがフィ ーチャである
Web アプリケーションならば、ストレスなくアプリケーションを使えるユーザーインターフェイスはフィーチャになる
一方、プリンターに赤インクを装填できることは機能であって、フィ ーチャではない
この場合は「フルカラーで印刷できること」がフィーチャである
この塩梅、むずいよねmrsekut.icon
オンラインショッピングのサイトに商品選択画面、注文確認画面、支払画面、注文完了画面があった場合、各画面はそれぞれ機能ではあるがフィーチャではない
ショッピングサイトのフィーチャは「欲しい商品を注文できること」である
ソフトウェアを使う側の視点から記述している、という点が重要である
/miyamonz-projects/Featureってなんなんだ、あるいは用語の定義を再整理する#6211f431385a92000029804b
/miyamonz-projects/単一であるものをfeatureとして、複数存在し得るものはfeatureにしない
実践してみて、生じている問題
/mrsekut-b/ComponentをPBFする時に、関心で分けるか、ユースケースで分けるか
PBFの置き方の問題
featureとしてディレクトリを分けた時に、
magazineのディレクトリの中に、itemに関するものが含まれる、という状況が生じる
magazineという機能が消えれば、このitemの機能も消えるべきなので、合っている気もする
しかしEntityから見れば、変なディレクトリに入っていることになる
/mrsekut-book-4048930656/284
/miyamonz-projects/現状miyamonzのフォルダ構成に関するルール、考え