この方法で API またはライブラリ コードを設計している人はいますか?
-
22-09-2019 - |
質問
ライブラリや API を適切に設計する方法についていくつか読んでいたところ、Google Tech Talks での Joshua Bloch の素晴らしい講演に出会いました。現在、私はプロの 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 つ それはそれですか 最初にユースケースを書き留める必要がある.
もう一つは、 名詞と動詞はシンプルなままにする, 、最終製品が危険を回避できるようにします。 マルチフレーズ抽象パラダイムデザインパターン実装者 症候群:-D
解決
このはA 流れるようなインターフェイスに呼ばれるかなり一般的なデザインパターンです。これは、関数型言語では一般的だと他の場所で人気を集めています。スキームで、私は最初ののこぎりそれをます。
これは非常に便利で読みやすいイディオムですが、多くの場合、あなたが実際に1つの関数呼び出しで複数の変数を初期化したいん回があることを覚えておいてください。データの組み合わせに応じて設定されなければならない内部状態があるとき、またはデフォルト値を設定して上書きする場合、例えば、高価です。だから、すべての「パターン」と同様に、慎重かつ先見で使用します。
他のヒント
JQuery はまさにこれを行います。から http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-published-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()
}
}
};
はい、これはjQueryのは設計されて、それは常にあなたがこのような連鎖法をできること自体を返して終了する方法である。
私は、空のクラスやメソッドを開始する傾向があります。ボトムアップ設計対トップダウンのその本当に疑問ます。
私は本当にかかわらず、巨大なホワイトボードスケッチを好むます。