2

ライブラリやAPIをうまく設計する方法についていくつか読んでいて、GoogleTechTalksでのJoshuaBlochのすばらしい講演に出くわしました。今、私はプロのAPI開発者にはほど遠いですが、同じものの大幅に縮小されたバージョンであるにもかかわらず、一連のクラス/関数のプログラミングは似ていると思います-アクションの明確な分離、使いやすさと楽しい使用、クリーンなコードの奨励、など。

私は広く使用されているオープンソースのJavaコードをいくつか調べていて、このアイデアを思いつきました(新しいことは何もありませんが、明快にそれを提示するだけです...)

擬似コード(またはBASICの方言) の例を見てみましょう。

1. new label
2. set name 'hello world'
3. set color 'blue'
4. show 'topmost'
5. on click hide

Javaコードに触発されて、次のようなことができるようにしたいと思います。

1. Label l = new Label()
2.          .setName('Hello World')
3.          .setColor('blue')
4.          .show(zindex.top);
5. l.onClick = l.hide() ;

私の質問はこれです:
他の誰かがこのような擬似コードから始まるAPIを設計しますか?

小さなものにいいアイデアですか?それぞれがおそらく10個のメソッドを持つ最大10個のクラスを言います。各メソッドは、その中に5〜6行以内のコードを記述します。これは明らかに、設計するクラスのサイズを示すための大まかな数値のセットです。完全なAPIに近いものではなく、趣味のプロジェクトだけではありません。小さなことを実行するが、それをうまく実行するプロフェッショナルパッケージです

このアプローチに重大な欠点を見つけた人はいますか?

本当のメリットの1つは、最初にユースケースを書き留める必要があることだと思います。

もう1つは、名詞と動詞が単純なままであり、最終製品がMultiPhraseAbstractParadigmDesignPatternImplementor症候群を回避できるようにすることです:-D

4

4 に答える 4

3

これは、流暢なインターフェイスと呼ばれるかなり一般的なデザインパターンです。関数型言語では一般的であり、他の場所でも人気が高まっています。私は最初にSchemeでそれを見ました。

これは非常に便利で読みやすいイディオムですが、実際には1回の関数呼び出しで複数の変数を初期化したい場合があることを忘れないでください。たとえば、データの組み合わせに応じて設定する必要のある内部状態がある場合や、デフォルト値の設定と上書きにコストがかかる場合です。したがって、すべての「パターン」と同様に、慎重に、そして先見の明を持って使用してください。

于 2010-01-22T19:52:51.320 に答える
1

Jqueryはまさにこれを行います。http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-released-the-15-new-features-you-must-know/から:

jQuery('<div/>', {  
    id: 'foo',  
    css: {  
        fontWeight: 700,  
        color: 'green'  
    },  
    click: function(){  
        alert('Foo has been clicked!');  
    }  
}); 

または1.4より前の場合:

jQuery('<div/>')  
   .attr('id', 'foo')  
   .css({  
       fontWeight: 700,  
       color: 'green'  
   })  
   .click(function(){  
       alert('Foo has been clicked!');  
   });  

コードでWPFを生成するC#でも同様のことを行いました。

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
于 2010-01-22T20:46:10.380 に答える
0

はい、これはjQueryの設計方法です。このようなメソッドをチェーンできるように、常に自分自身を返すことになります。

于 2010-01-22T19:42:22.330 に答える
0

私は空のクラスとメソッドから始める傾向があります。それは本当にトップダウンとボトムアップの設計の問題です。

でも、私は巨大なホワイトボードのスケッチが本当に好きです。

于 2010-01-22T19:45:14.173 に答える