2009-02-23 3 views
5

非常に柔軟性が高く、簡単なことを単純化しないように設計されている、恐ろしく強調されたAPIの場合、まあまあまあまあです。それにもかかわらず、簡単な共通タスクを達成するために8つの異なるクラスを使用し、20行の定型文を書くことを要求するAPIの不足はないようです。特定のAPIが強化されているかどうかについては、これが曖昧なものではないため、名前については言及しません。Overengineered APIの動機づけ?

これらの恐ろしく強調されたAPIの根本的な原因は何だと思いますか? APIデザイナーがそのような怪物を作り出せないようにするためには、何が必要だと思いますか?

編集:IMHOでは、再利用可能なコードを作成することさえ本当に良い答えです。なぜなら、APIの使い方がばかげて大量の定型文が必要な場合、再利用のメリットが疑問になるからです。

+0

「特定のAPIが強化されているかどうかについては、あまり知られていないため、名前は言及しません」また、「私が尋ねることがあれば、あなたが見たAPIの最悪の例は何ですか?」 –

+0

私は同じコメントをするつもりだった。奇妙な種類。 –

+0

2番目の考えでは、それは不自由でした。削除されました。 – dsimcha

答えて

0

私は、何か問題を過度に思ってしまうことを防ぐことはできないと思います。それは問題解決に内在しています。 XPのような方法論はそれを落とそうとしますが、それになると誰もが "私はこれをより汎用的にすると、それを再利用することができます。"

1

"時期尚早な最適化はすべての悪の根源です。"本能的に、効率と賢さのようなプログラマのため
--Donクヌースそれでも

、それは非常に、非常に魅力的です。

+0

これは実際には無関係です...... – Pacerier

1

第2のシステム効果?

2

すべての悪の根源は、 a)スマートで経験豊か。b)十分に適切である。

+0

c)時間がかかっています。 d)そして時間がない他の人々に十分に配慮しないでください。 e)物事を簡単にするのに時間を費やさない。 – Pacerier

8

これは、多くの場合、いわゆるSecond System Effectの結果であると信じています。デザイナーは、「バージョン1」デザインの最初のカットから学んだ教訓を引き継ぎ、次のバージョンを非常に柔軟にして、それがより強調され、理解しにくくなるようにします。

フレッドブルックスの本The Mythical Man-Monthがこの用語を導入し、それについて詳しく述べています。

2

これらはオーバーエンジニアリングのケースか抽象化が不十分なケースかどうかはわかりません。 Windowsのapiはこれの主要な例です。

以前はいつもプリントとプレビューエンジンを書くのにかなりの時間を費やしていました。私はスクリーンに物を表示し、プリンタに出力するのに必要なウィンドウAPIをデコードする必要がありました。"私は座標(1,1)から(8,1)までの1ポイント幅の赤い線を描画したいと思います。たとえば、次のように考えてみましょう。 - インチで表​​します。

同等のウィンドウAPIは、多くの刺激的なコード行を含む...ブラシを作成し、デバイスコンテキストに選択し、開始点を設定し、インチからピクセルへの変換を処理し、エンドポイントに描画します私の抽象化されたAPIは単一の呼び出しです: dpLine(documentHandle、x1、y1、x2、y2、width、color); //ここで、x1、x2、y1、y2はインチ単位で表します。

この場合、gdi apiのウィンドウが低すぎると思います。彼らがやったことには正当な理由があると確信していますが、それを使用する可能性の高いプログラマーにとって適切なインターフェースを作るための時間とエネルギーはありませんでした。おそらく、怪獣の理由はおそらくちょうど期限です。APIは技術的に正確です。それはプログラマが必要とするものを行うことを可能にする。それはそれを発送するのに十分です。しかし、それを使用可能にするためにサードパーティの抽象化が必要であるのは非常に低いレベルです。 IMOのように、あなたはOSに低レベルで複雑なAPIを提供する議論をすることができますが、サードパーティのツールはそれほど複雑ではありません。

-Don

0

私はPythonが第2のシステムの影響に苦しんだと思います。バージョン2.xでは、2つのタイプのクラスと異なるセマンティクスが存在します。

ほとんどの場合、Python 3.0がこの問題を解決することを願っています。

+1

間違いがあると気づくだけでなく、下位互換性を破壊したくないということは、それが第2のシステム効果だとは思わない。 –

関連する問題