2009-06-04 5 views
12

私は単純なことを単純化しない、より強力なAPIを使って作業することを軽視します。それにもかかわらず、私はオープンソースライブラリ用のAPIを設計しています。私は大規模なトラップに陥っていると感じ始めています。私は本当に確かに言うことができません、もちろん、私はダーンの事を書いたので、それがどのように動作するかは、誰よりも明らかです。あなたのAPIが強化されているかもしれないという開発者の視点からの警告兆候は何ですか?APIはいつ強化されますか?

+0

これらは関連性があるようです:http://stackoverflow.com/questions/469161/how-do-you-define-a-good-or-bad-api http://stackoverflow.com/questions/750112/overengineering -how-to-avoid-it –

答えて

19

「あなたのAPIがoverengineeredされるかもしれないことを開発者の視点からいくつかの警告サインは何ですか?」

使用しないケースがあります。

あなたはシナリオ「これを行うには、」シンプルを介して実行することができない場合は、念頭に置いて、特定のユースケースで便利なAPIを設計していません。

ご使用のドキュメントは、そのユースケースである必要があります。直接のユースケースに対応していない

特長は、おそらくオーバーエンジニアリングされています。

+2

+1 - 私のコメントと同じ意味ですが、より速いです。 – dkretz

1

二即座に思い浮かぶ自問する(関連)質問:

  • は、複数の方法で行うことができることはありますか?
  • APIの残りの部分で表現できるメソッド/プロパティがAPIにありますか?

自体に過剰性能の兆候はなく、APIが、それはまだ可能性がほど単純ではありません間違いなく記号もっと答えることは難しく、およびない:

  • は、あなたが他のメソッド/プロパティにありますそれは、(他の二つの質問に基づいて)あなたが導入されたよりも多くを除去することが可能になるだろう導入することができます
+0

しかし、それは人間的なインターフェイスを排除するでしょう(Fowlerの記述どおり)。ヒューマン!=過激化。 –

2

ドキュメントと例を確認するときは、自分自身との関係でAPIを議論言い回しの割合は、信頼できるユースケースへの適用を議論言い回しの割合をcmpared。

2

S.Lottが述べたように、ユースケース。彼らはあなたのAPIが何のために向けられるべきなのかを決定します。非常に明確で具体的な目標(functionally coherent)を完成させるようにAPIを設計する場合は、使いやすく理解しやすいAPIまたはAPIを使用することになります。

APIを設計するには、ユーザーインターフェイスを設計する必要があります。 UIのほとんどすべての概念は、KISSの原則やKaizenといったAPIによって受け入れられます。

は、私はそれらのUIコンセプトにリンクしたいが、彼らは私が1つの以上のハイパーリンクを投稿させませんので、私は新しいユーザーです。良い例があります:StackOverflow、私たちが投稿する前に私たちに知らせてください;)。

11

あなたは、彼がこのようなものの多くをカバーしています...ジョシュア・ブロックによってGoogleの技術の話How To Design A Good API and Why it Mattersをチェックアウトする必要があります。

+3

+1、これもリンクされていました。スライドも利用できます:http://lcsd05.cs.tamu.edu/slides/keynote.pdf – none

+3

ここでは、ビデオとスライドを一緒に見ることができます。同じブラウザビューに埋め込まれています。http://www.infoq.com/presentations/effective-api-design – none

+0

正直なところ、ブロッホが作成したAPIの多くは、過剰に設計されたimhoです。それにもかかわらず、そのビデオの中には良いテイクアウェイポイントがあります。 – Pacerier

1

誰もそれを理解できないほど賢い時。共通API呼び出しのスタックトレースは、全体の事を確認するには、画面をスクロールする必要があります

+1

私はそれを書いていない限り;) –

1

多くの機能を備えた大規模なAPIを使用しているときには、より精査して簡単な操作の構成になることが心配です。プリミティブに対する合成メカニズムの比率が高いAPIは、通常、優れた設計です。

(APIの設計は、言語設計と非常に類似しており、ここで私は、本質的にそれを簡素化し、不必要な追加のルーチンをレンダリングする組成機構を含む、Schemeの哲学—をespousing代わりのAPIに複数のルーチンを重ねています。)

5

私は非常に便利であり、過去に私が助けてくれたトリックは、あなたがコードを書く前、途中、後で書くことです。

他の人が使用するAPIを設計するときは、通常、コードを書く前に設計を文書化します。もし私が設計を工学していたら、デザインスペックは通常、葛藤とナンセンスでいっぱいです。

コーディング中に、私は通常、クラス定義と関数本体をスタブし、それらのためにdoxygenコメントを書き始めます。コメントでは、使用例、サンプルコード、およびインターフェイスの前提があります。このフェーズでは、あまりにも多くの実際のコードが書き込まれる前に、クラスインタフェースは通常、複数回の再設計を経ました。私は、サンプルコードを書くのが難しいときに私は工学的だったと知っています。私はインターフェイスを説明するのが苦労します。あなたのAPIの使い方を説明しようとすると、多くの悪いデザインアイデアが公開され、排除されます。

コーディング後、私はコメントのサンプルコードを、私の単体テストからコピーされた実際のコンパイル済みコードと置き換え、さらにインターフェイスの動作を文書化します。エンジニアリングのもう一つの兆候は、ユニットテストがインターフェイスの変更に追いつけないときです。可動部品が多すぎるし、指数関数的な割合で同じことと単体テストの成長を行うには余りにも多くの方法があるからです。

+0

良い点ですが、読みにくいです。いくつかの段落区切りが役に立ちます。 –

+0

改ページで改訂されました。ありがとう。 –

0

(1)基盤技術を使用するよりも、より鈍い、より複雑で、効率が低く、予測可能性が低く、 (2)は、安全性、スケーラビリティ、またはクロスプラットフォームの自由。

0

私の経験では、プロジェクトが完了するまで数ヶ月間プロジェクトが終了したときを知ることができます。

関連する問題