優れたAPIが優れている理由は何ですか?「1つのことをして、それをうまくやる」というマントラに従うことは良い兆候であり、存在することは問題領域への良いマッピングであることが重要であると思いますが、素晴らしいAPIには何が共通していますか?
優れたAPIが優れている理由は何ですか?「1つのことをして、それをうまくやる」というマントラに従うことは良い兆候であり、存在することは問題領域への良いマッピングであることが重要であると思いますが、素晴らしいAPIには何が共通していますか?
回答:
APIのためだけに新しい語彙を追加しないように注意する必要があります。私のお気に入りのAPIは、私がすでに理解している語彙で物事を説明します。それらの線に沿って:
私はすでに半ダースの抽象化層について考えなければなりません。余分なレイヤーについて考えさせないでください。私の最終目標に価値を加えないほど多くの新しいことを学ばないでください。たとえば、動作が異なる独自の特別なファイルクラスを使用することは避けてください。言語のファイルタイプは、一般的に受け入れられている方法よりも自分の方法が優れていると考えるだけです。少なくともインターフェイスでは、良くも悪くも、一般に受け入れられている方法を守ります。
たとえば、MVCフレームワークの「モデル」部分がデータベースのフロントエンドであるという事実を隠そうとしないでください。「データベース」を取り巻くよく知られた語彙を活用してください。外部キーとは何かを知っています。行と列が何であるかを知っています。これらの用語で私に話してください。
具体的なアイデアを扱うことに似ています。ファイルやデータベース、またはデータベース内の行を扱っているという事実を隠さないでください。私はこれらのことを知っています。リストのようなコンテナを扱っている場合、一般的な操作のアルゴリズムの複雑さを知る必要がある可能性が十分にあります。「リンクリスト」または「配列」を指定するだけで、これを大幅に簡素化できます。膨大な数のアイデアが突然あなたのやっていることに関係するようになり、それは突然意味をなします。問題に適用するための豊富で便利な用語集がすでにあるときに学ばなければならない独自のアイデアを作成しないでください。
APIを使用して任意の種類の画像ファイルを開く場合、PNGとGIFとJPGについてあまり考慮する必要はありません。あなたは私のためにそれをするでしょう。コアコンピテンシーであり、私のものではありません。あなたは私のためにこれを行うための魔法を持っていることを漠然と理解しています。
便利なAPIには次のものがあります。
X
がAPIの他の部分で設定されている規則とはまったく異なることを発見したくありません。この質問は、NetBeansチームのJaroslav Tulachによる「実用的なAPIデザイン:Javaフレームワークアーキテクトの告白」で取り上げられています。