9

カプセル化、依存性注入最小知識の原則、そしてあなたはそれを必要としないことによって、「1つのことをする」という部分を理解することができます。しかし、2番目の部分「うまくやる」をどのように理解できますか?

与えられた例は、同じYAGNIの記事で与えられた完全性の概念でした:

たとえば、アイテムの追加、アイテムの削除、またはアイテムの変更を可能にする機能の中で、完全性を使用して「アイテムの名前変更」を推奨することもできます。

しかし、私はそのような推論がフィーチャークリープに簡単に悪用され、「1つのことをする」部分に違反する可能性があることを発見しました。

したがって、機能を確認するためのリトマス試験とは、「うまくいく」カテゴリ(したがって、関数/クラス/プログラムに含める)または他の「1つのことを行う」カテゴリ(したがって、除外する)に属します。 ?

最初の部分である「1つのことを行う」は、UNIXのlsコマンドを介して、出力をフォーマットするための過剰な数のフラグが含まれていることの反例として最もよく理解されます。これは、別の外部プログラムに完全に委任されているはずです。しかし、2番目の部分が「うまくやる」のを見る良い例はありません。

それ以上の機能を削除すると「うまくいかない」という良い例は何ですか?

4

5 に答える 5

1

このアドバイスの全体的な目的は、量より質を優先させることです。

1つのものの概念は主観的であり、粒度に依存します。スプレッドシートアプリケーションが印刷もできる場合、それは複数のことを実行すると思いますか、それともその一部ですか?

重要なのは、新しい機能を追加するためにスクランブルをかける前に、すべての機能とアプリケーション自体が完了し、顧客を喜ばせることを確認する必要があるということです。

于 2011-03-30T06:53:42.677 に答える
1

あなたの質問は、フィーチャークリープの根本的に有機的な性質を指摘していると思います。その性質を理解することで、より大きな質問について瞑想することができます。

庭のように考えてください。たとえば、菊など、1つのものを植えてうまく植えると、単に種を植えるだけでは終わりません。実際、土壌の手入れが行き届いていること、その地域が十分に保護されていること、季節が正しいことなどを確認する必要があります。

あなたの菊(あなたの1つのもの)が成長するにつれて、他の競争力のある植物も成長します-いくつかは除草する必要があり、他の植物は実際に元の1つのものを補完する可能性があります。実際、これらの他の生物は、場合によっては、あなたの1つのものの生存に不可欠であることがわかるかもしれません。

YAGNの機能と同様に、どの雑草が機能のクリープを表し、どの雑草が重要で補完的な機能を表すかを判断するには、少し注意が必要です。

とにかく、それをうまくやったということは、あなたの菊が心のこもった、健康で、時間通りであることを単に意味します。:-)

于 2011-04-02T19:25:39.980 に答える
1

「DoItWell」は、集合関数の完全性(例では、名前の変更、作成と削除)よりも、関数の実装の品質に関するものだと思います。

Do It Wellは、さまざまな方法で、いくつかの考え方で現れます。

「特別な」入力に応じた動作。例、いくつかの整数の平均を計算する:

int mean(int[] values) { ... }

配列の要素がゼロの場合、これは何をしますか?アイテムの合計がMAX_INTを超える場合は?

パフォーマンス特性。データ量が増えるにつれて、動作に十分な注意が払われていますか?

依存関係の失敗。実装が他のモジュールまたはインフラストラクチャに依存している場合、これらが失敗するとどうなりますか。例:ファイルシステムがいっぱい、データベースがダウンしていますか?

フィーチャークリープ自体に関しては、ここで緊張を特定するのは正しいと思います。検討するかもしれないことの1つは、完全に書き直さなくても機能を簡単に追加できることは明らかであれば、すべての機能を実装する必要はないということです。

于 2011-04-04T13:13:48.460 に答える
0

添付ファイルを追加する機能のない電子メールプログラムが良い例だと思います。

于 2011-03-29T22:00:16.337 に答える
0

これは奇妙な例のように聞こえるかもしれませんが、複雑な例ではありますが、dropboxは良い例だと思います。

あなたが言ったように、単純化への献身と機能の欠如によって、同様の競合するアプリの群れを打ち負かすことができましたが、「1つのことをする」という原則に違反します。apを使用すると、どこからでもアクセスできるフォルダにドキュメントを保存できます。これが限界です。彼らはコアの問題にドリルダウンし、90%以上のケースで完全に機能する方法でそれを解決しました。

厳格で迅速なルールを適用するのは難しいですが、ユースケースの約90%に対応し、「フリンジ要件」を無視することが、このルールに固執するための最良の方法だと思います。

lsの使用の90%以上は引数がないか、おそらく最も人気のあるものの2つまたは3つだと思います。「うまくやる」という原則は、lsが多数のオプションで行うように、パワーユーザーやフリンジケースに対応するのではなく、大多数のユーザーが必要とするものに焦点を当てる必要があります。

これがdropboxが成功する理由であり、優れたアプリケーション設計の例として非常によく合意されている理由です。

于 2011-03-29T22:06:04.730 に答える