問題タブ [api-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
71 参照

arrays - MenuTree構造について意見を求めます。配列と区切り文字のどちらのアプローチが優れていますか?

どちらが優れたAPIですか?文字列がインターンされているので、後者のアプローチの方が良いと思います。しかし、私は簡潔さを求めています。どちらが良いと思いますか?

[Task( "Assortment"、Author = "好教師"、MenuTree = "The> Quick> Brown> Megan")] public部分クラスForm1:MycForm、ITaskPlugin {}

またはthis(文字列をインターンできます):

[Task( "Assortment"、Author = "好教師"、MenuTree = new string [] {"The"、 "Quick"、 "Brown"、 "Megan"})] public部分クラスForm1:MycForm、ITaskPlugin {}

0 投票する
3 に答える
354 参照

actionscript-3 - 簡潔なライブラリを構築して複雑さを隠す

私は連動する部品 (サーバー、クライアント、ライブラリなど) を多数備えた製品を開発しています。そのうちの 1 つは、ユーザーが独自のクライアント側コード (Flickr API のようなもの) にリンクする小さなライブラリです。 Google マップ API)。そのライブラリを組み込むと、連動するすべてのビットが魔法のように接続されます。したがって、API の簡素化は主要かつ重要な目標です。

私がユーザーに公開する API には、合計 2 つのクラスと 7 つのパブリック メソッドがあります。簡単にピージー、レモン絞り。

しかし、そのシンプルさは注意深く作られた幻想です。私が配布しているライブラリは、実際には別のライブラリに依存しており、独自の 136 のクラス (および 1000 以上のパブリック メソッド) があります。ビルド プロセス中に、API コンシューマによる統合と展開を容易にするために、2 つのライブラリを 1 つの成果物にリンクします。

私が今直面している問題は、エンド ユーザー (自分のソフトウェアを統合して独自の機能を強化するアプリケーション開発者) に、不必要な複雑さの嵐に溺れて、余計な面倒なことに悩まされたくないということです。

外から見ると、ライブラリにはちょうど 2 つのパブリック クラスと、ちょうど 7 つのパブリック メソッドが含まれているように見えるはずです。

自分のプロジェクトでは、この種のことをどのように処理していますか? 私は、言語にとらわれないソリューションや、さまざまな言語、コンパイラ、ビルド ツールのさまざまな手法に興味があります。

私の特定のケースでは、SWC ライブラリ ファイルを使用してフラッシュ プラットフォーム (AIR/Flex/Actionscript) 用に開発しています。ビルド方法は Java プラットフォームに類似しており、すべてのクラスが同じ可視性を持つ zip コード モジュールにバンドルされています (Actionscript SWC ファイルは、概念的には Java JAR ファイルとほぼ同じです)。

.NET には、クラスとメソッドの「内部」修飾子がありませんか? それはまさに私が探しているものであり、SWC 境界間のクラスの可視性を隠すためのトリッキーなテクニックを誰かが知っているなら、ぜひ聞いてみたい.

0 投票する
6 に答える
3760 参照

c# - パブリック メソッドのカスタム コレクションとジェネリック コレクション

カスタム コレクションとジェネリック コレクションを公開するためのフレームワーク設計ガイドラインは何ですか? 例えば

VS

0 投票する
2 に答える
496 参照

c++ - バイナリ互換性を最大化しながら、複数の POD タイプをサポートするために公開 API に推奨される設計は何ですか?

私は現在、コンパイル済みのバイナリ/DLL (クロスプラットフォーム) を必要とする製品向けに、一般向けの C++ API を設計しています。私たちがサポートする任意の POD (該当する場合) をユーザーが使用できるようにする API を希望しますが、基本的な要件は最大限の柔軟性とバイナリ互換性です。私は CPLEX の API に少し似たようなことをしています (これはいくつかのインスピレーションの 1 つです)。しかし、型情報を指定する方法は、彼らが行った方法よりも優れている可能性があると考えています (IloInt、IloNum、IloAny、Ilo* に関して) Var など、リンクを参照(できれば) IloExtractable ブランチの場合) バイナリ互換性を台無しにすることはありません。私が間違っている?私は何かを考えていますが、それが何であるか思い出せません。または、それが機能する場合でも、ビジターまたはデコレーターのパターンのようなものに似ていると思いますが、タイプについては、誰かが私にこの件について教えてもらえますか? 私の目の前に、GoF によるデザイン パターンの本があります。

注: ここにある可能性のある構文エラーは、当面の問題の一部ではありません。

使用できないと思われるものの例とその理由:

おそらく..しかし、これは式ツリーで物事を複雑にする可能性があります。

今後の展開に影響しそうです。

罪のように醜く、多くの微妙な問題を引き起こす可能性があります。

編集: Mads Elvheim に応えて (そしてこのリンクを見つけた後)、テンプレートを自分の可能性から除外する必要がないことに気付きましたが、それが最善のアイデアであるかどうかはまだ確信が持てません - 少なくとも Constraints クラスについては(概念的には健全ですが)思ったほど明確ではないことを許してください。

API を使いやすくするために、bnf を使用して文法を定義しました (これは私にとってかなり新しい方法です)。これにより、式、制約、および制約と相互作用するその他のクラスの抽象構文ツリーが作成されました。他のクラスは Constraints とやり取りするため、いわば「ギリギリ」まで型情報をできるだけ多く渡すことは避けたいと思います.抽象化のレベルが欠けているように感じます。

CPLEX を研究していると、数値 (整数と実数) のドメイン、線形方程式の表現 (もちろん)、およびそれに応じて何が可能になるかに従って型をモデル化したという印象を受けます。

(どうやら私は新しいユーザーなので、複数のリンクを投稿することはできません。)

編集 2: 最初のステップとしてConstraintExpressionArgument、Constraint クラスと Expression クラスの間に a を挿入することにしました。これにより、操作する型を意識せずに式ツリー内の制約を識別できるようになります。

私が言及しなかったかもしれないもう 1 つの詳細は、Constraint クラスが単独では使用できない CPLEX とは異なり、私の Constraint クラスは現在使用可能なユーザー クラスですが、CPLEX と同様に、拡張の余地も残しておきたいということです (したがって、入力の問題)。 ..

とにかく、現時点では私は同等のものを持っています

0 投票する
4 に答える
13668 参照

java - Java の日付 API (java.util.Date、.Calendar) が混乱しているのはなぜですか?

ほとんどの人が痛感しているように、カレンダーの日付を処理するための Java API (具体的にはjava.util.Dateとのクラスjava.util.Calendar) はひどい混乱です。

私の頭の上から:

  • 日付は変更可能です
  • 日付は日付ではなくタイムスタンプを表します
  • 日付コンポーネント (日、月、年など) と日付を簡単に変換する方法がない
  • Calendar は扱いにくく、異なる暦体系を 1 つのクラスにまとめようとします

この投稿はそれを非常にうまくまとめており、JSR-310はこれらの問題についても説明しています。

今私の質問は:

これらのクラスはどのようにして Java SDK に組み込まれたのでしょうか? これらの問題のほとんどはかなり明らかで (特に Date は変更可能です)、回避するのは簡単なはずです。それで、それはどのように起こったのですか?時間的制約?それとも、問題は振り返ってみれば明らかですか?

これは厳密にはプログラミングの問題ではないことは理解していますが、API 設計がどのようにうまくいかないかを理解するのは興味深いことです。結局のところ、間違いは常に良い学習の機会です (私は興味があります)。

0 投票する
1 に答える
761 参照

multithreading - ライブラリ/APIがスレッドセーフかどうかを確認するための一般的なメソッド

明確に定義されたAPI(C ++およびJava)の形式で外部開発者からライブラリを受け取りました。ライブラリがスレッドセーフであるかどうかを確認するためのいくつかのテストは何でしょうか?

0 投票する
3 に答える
158 参照

c# - 学習する任意の属性を持つネットワーク デバイスをモデル化するための最適な API は?

デバイスのタイプに基づいてかなり異なる大量の属性を持つネットワーク デバイスをモデル化する新しい API を設計する必要があります。属性セットは完全に恣意的なものではありませんが、既知の属性の大きなセットです。とはいえ、新しいデバイスには新しい属性が付属しているため、状況が完全に修正されることはありません。

ネットワーク デバイス自体は常に出入りするため、これが API 設計の中心的な部分です。また、Observer パターンのいくつかのバリアントを介して属性/属性セットの更新を取得することをお勧めします。

注: ネットワーク管理について話しているわけではありませんが、そのように聞こえるかもしれません。とはいえ、これらのシステムの API は非常に適切であり、検討する価値があるかもしれません。

私の質問は、オープン ソースの世界で、私が学び、インスピレーションを得ることができる優れた API を知っていますか?

システムは Java ベースになるため、サンプルは Java (もちろん :))、C#、Scala、およびその他の同様の静的型付き言語など、近縁の言語からのものであることが望ましいです。

0 投票する
2 に答える
264 参照

c# - APIでLazy/Delay-loadingからEager-loadingに変換する好ましい方法は?

私はしばらくの間 API (一種の Web サービスをラップする) に取り組んできましたが、その機能はほぼ完成しています。

私は当初、この API を全体的に遅延/遅延ロードするように設計しました。これは、Web サービスの使用に固有のレイテンシーを考慮して、利用可能なデータの小さなサブセットのみに関心がある場合に完全に理にかなっています。ただし、API のコンシューマーにとってイージー ロードがはるかに簡単になるいくつかのユース ケースを考慮していませんでした。

ですから、私の質問は次のとおりです。主に遅延読み込みである API が、クラスの熱心に読み込まれたバージョンを取得するためのメカニズムをどのように公開することを望みますか?

私はキャストに傾いていますが、より冗長であればexplicit、のラインに沿ったものも自然に見えます。Eager.AsEager(SomeDelayLoadingObject)

0 投票する
9 に答える
1560 参照

java - 最小限の API v. 利便性

アプリケーションの内部で使用されるインターフェイスを設計しようとしています。Google の例に従って、私は公開 API の乱雑さを減らすよう努めています。ただし、最小限のメソッドに関して定義されている便利なメソッドがいくつかあります。利便性と整理整頓のバランスをとるには、どのような要素を考慮する必要がありますか?

Google の例: HashBiMap( doc ):

BiMap に getKeyForValue() メソッドがないのはなぜですか?

私たちはそれについて考えました (Doug Lea は半分冗談で teg()! という名前を付けることを提案しました)。しかし、実際には必要ありません。inverse().get() を呼び出すだけです。

Google コレクションに関するよくある質問

Setインターフェイスでの例:add()remove()は最小限のメソッドですが、addAll()removeAll()は便宜上のものです。addAll()の観点から実装できるadd()ため、クライアントにSet. ただし、クライアント コードはクリーンアップされます。

Utilityより便利なメソッドを含むクラスを作成することを検討しました。しかし、私は OOP から離れており、操作対象のオブジェクトをすべての呼び出しに引数として含める必要があります。私はそれがJavaのCollectionsクラスの例に従っていると思いますが。