問題タブ [interface-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.
android - Androidアプリケーションのタブとホーム画面?
私が取り組んでいるAndroidアプリケーションがあり、それが実行するさまざまな機能を分離するためにタブを使用して実装されています。
上記の記事では、タブを使用してTwitterアプリケーションを実装する代わりに、タブの制限のいくつかのためにホーム画面とツールバーを使用することにした方法について説明しています。
アプリケーションに3つのタブ(または3つのホーム画面アイコン)だけが必要な場合は、時間をかけてアプリケーションをホーム画面レイアウトに変換するか、ホーム画面とタブを純粋に比較する価値があります。好み?
(出典:blogspot.com)
ホーム画面の例
(出典:simplydroid.com)
タブの例
c++ - 「外部使用」のために任意のクラスタイプのフィールドを専用にする
私のコンテナは、その要素に関する少しの情報を格納する必要があります。通常、これは要素とは別に保存します。ただし、要素構造型のフィールドを外部で使用するために専用にすることで、ユーザーがメモリを節約できるようにしたいと思います。例えば:
ここでの考え方は、要素のコンテナ以外からフィールドにアクセスしてはならないということです。コンテナは(のように)コピーを格納するため、複数のコンテナにstd::vector
任意の値を追加しても問題はありません。x
可能であれば、次の要件を満たすインターフェイスをどのように設計しますか?
- 完全にオプションである必要があります。つまり、指定されたタイプがそのようなフィールドを提供するかどうかを自動的に判断できるはずであり、コンテナは利用可能な場合にのみそれを使用します。
- 理想的には、コンパイラとの互換性を最大限に高める必要があるため、型の特性などに依存しないでください。
- 使いやすいはずです。つまり、タイプに対してこの最適化を有効にすることができ、有効にしたい場合は
MyStuff
、25行ではなく3行のコードで実行できます。一方、内部の複雑さは問題ではありません。 - 誤検知を完全に除外することが望ましい。つまり、フィールドをチェック
foo_bar
すると、まったく関係のない理由でそのようなフィールドが存在する可能性がわずかにあります(そして、ダックタイピングは単にC ++用ではないと思います)。タイプが私のライブラリからマーカークラスを継承しているかどうかを確認するのがより良い方法ProvidesExternalUseField
です。これは偶然ではないからです。
編集
Boost.Intrusiveについては知っていますが、私が欲しいのは何か違うことです。そのようにして、単一のchar
フィールドを持つフッククラスを作成すると、多くの場合、メモリを節約するために使用することはできません。継承されたタイプにint
最初のフィールドがある場合、char
フィールドは4バイトに埋め込まれます。つまり、このような外部使用フィールドを「スクイーズ」できるようにするには、タイプ内部の複雑な知識が必要になることがよくありますが、継承は実際にはそれを提供しません。
ここで、のサイズはMyStuff
8バイトではなく12バイトになります。
python - Python API の設計: Fluent インターフェイスまたは引数
私は、Protovis API を Python に単純に移植して遊んでいます。
Javascript での単純な棒グラフの例を考えてみましょう。
この流れるようなインターフェイス スタイルの API を使い続けるか、代わりに名前付きパラメーターを使用するかを検討しています。名前付きパラメーターを使用すると、次のように記述できます。
推奨される Python スタイルはありますか?
c# - 混乱しないように C# jQuery API を設計するにはどうすればよいですか?
C# 用の jquery クローンを作成しています。現在、すべてのメソッドが拡張メソッドになるようにセットアップしているので、IEnumerable<HtmlNode>
既にHtmlAgilityPack
. 状態を保存せずに逃げることができると思っていました...しかし、jQueryには2つのメソッドが.andSelf
あり.end
、最近一致した要素を内部スタックから「ポップ」することに気付きました。列挙型ではなく SharpQuery オブジェクトで常に動作するようにクラスを変更すると、この機能を模倣できますが、まだ問題があります。
JavaScript では Html ドキュメントが自動的に提供されますが、C# で作業する場合は明示的に読み込む必要があり、必要に応じて複数のドキュメントを使用できます。$('xxx')
呼び出すと、本質的に新しい jQuery オブジェクトを作成し、空のスタックで新たに開始しているように見えます。C# では、Web からドキュメントをリロード/再取得したくないため、これを行いたくありません。代わりに、SharpQuery オブジェクトまたは HtmlNodes のリストに一度ロードします (開始するには DocumentNode が必要です)。
jQueryのドキュメントでは、彼らはこの例を示しています
()
演算子をオーバーロードできないため、初期化メソッドはありません。sq.Find()
代わりに、ドキュメントのルートで動作し、本質的に同じことから始めます。sq.Find()
しかし、人々は1 行で書き込もうとし、その後sq.Find()
どこかで書き込もうとし、(当然のことながら) ドキュメントのルートで再び動作することを期待します... しかし、私が状態を維持している場合、あなたは最初の呼び出しの後にコンテキストを変更しただけです。
では、API をどのように設計すればよいでしょうか? すべてのクエリがスタックをリセットする別のメソッドを追加するInit
必要がありますか (しかし、それから強制的に開始するにはどうすればよいでしょうか?)、またはReset()
、行の最後に呼び出さなければならない a を追加しますか? 代わりにオーバーロードして、[]
それから始めるように伝えますか? 「忘れてください、とにかく誰も状態保存関数を使用していません」と言いますか?
基本的に、その jQuery の例を C# でどのように記述しますか?
sq["ul.first"].Find(".foo") ...
落とし穴:[]
プロパティを悪用します。sq.Init("ul.first").Find(".foo") ...
落とし穴: 奇妙な「初期化」メカニズムを追加しない限り、プログラマーに Init を開始することを実際に強制するものは何もありません。ユーザーは最初から試してみて.Find
も、期待した結果が得られない可能性があります。また、Init
前者Find
もスタックをリセットすることを除いて、とにかくほとんど同じです。sq.Find("ul.first").Find(".foo") ... .ClearStack()
欠点: プログラマーがスタックをクリアするのを忘れる可能性があります。できません。
end()
実装されていません。2 つの異なるオブジェクトを使用します。
おそらくHtmlDocument
、すべてのクエリを開始するベースとして使用すると、その後のすべてのメソッドSharpQuery
が連鎖可能なオブジェクトを返します。このように、 はHtmlDocument
常に初期状態を維持しますが、SharpQuery
オブジェクトは異なる状態になる場合があります。これは残念ながら、たくさんのものを 2 回 (HtmlDocument に対して 1 回、SharpQuery オブジェクトに対して 1 回) 実装する必要があることを意味します。new SharpQuery(sq).Find("ul.first").Find(".foo") ...
コンストラクターはドキュメントへの参照をコピーしますが、スタックをリセットします。
c++ - インターフェイスの残りの部分と一貫性を保つために、常に単一のレコードが含まれることを知っているベクトルを返しますか?
私は小さなアドレス帳アプリケーションを書いていますが、データ ソース/バックエンドのインターフェイスに関して設計上のジレンマがあります。
データ ソース クラスの次の抽象基本クラスがあります。
以下は私のレコード構造体で、tmy レコード セットはこれらのオブジェクトの STL ベクトルに対する typedef です。
私の質問は、DataSource::getContact() メソッドと DataSource::getAllContacts() メソッドに使用される戻り値の型と、クエリに基づいてレコードを取得する、まもなく追加される検索メソッドに関するものです。
一意の ID で検索しているため、DataSource::getContact() は 0 個または 1 個のレコードを返します。DataSource::getAllContacts() は 0 個以上の連絡先を返します。今後の検索方法では、0 個以上の連絡先が返されます。
私が今持っているように、 getContact() メソッドは auto_ptr を Contact に返しています。なぜなら、それらが複数になることは決してないことが確実にわかっている場合、ContactRecordSet を返すのは無駄に思え、レコードがない場合は NULL を返すことができるからです。そのIDを持っています。
インターフェイスの一貫性を保つために、 getContact() が ContactRecordSet も返す方がよいでしょうか?
私の一部は、単一のオブジェクトに対してそのようなデータ構造を返すという考えに苛立ちますが、一方で、より一貫性があり、そのIDの値が見つかったかどうかをチェックするためのセマンティクスは、全体的な抽象化とより一致しているように見えます設計 (返されたレコードセットの長さをチェックするか、NULL の auto_ptr をチェックします)。
皆さんはどう思いますか?
(注 - 私はおそらく単純なアドレス帳アプリケーションのために過度に設計していることを認識していますが、異なるバックエンド (フラットファイル、SQL など...) を簡単に交換できるようにしたいと考えています。目標は、優れたモジュール設計と関心の分離を実践することです。)
アップデート
反対の観点から見て、複数のレコード メソッドが auto_ptrs を ContactRecordSet objectcs に返すようにすることができると思います。そうすれば、a)常にオブジェクトへのポインターを取得するという点で一貫性があり、b)レコード セットが空の場合に std::vector を返すオーバーヘッドがなく、NULL ポインターを返すだけです。
c# - インターフェイスを使用する際のベストプラクティス
インターフェイスを設計するとき、私は何度も同じ状況に遭遇し続けます。この状況では、インターフェイスを使用する特定の実装では、インターフェイスに特定のパラメータが必要ですが、他の実装では必要ありません。
- インターフェイスを設計する際のベストプラクティスは何ですか?
- インターフェイスを実装するが、すべてのパラメーターを使用しない特定の実装があっても大丈夫ですか?
または、これらの状況では、パラメーターのリスト(いくつかの構造)を取り込んで、各実装でそれに応じてそのリストを処理する必要がありますか?
asp.net - 特定の実装を意味するインターフェースの利点は何でしょうか?
私はこれを見ています:
したがって、ページはこのインターフェイスを実装し、最終的に次のようになります。
私が知る限り、このインターフェースは、プログラマーがからの応答を保存して、RaiseCallbackEvent
後でへの呼び出しから返されることを考えなければならないことを単に保証しGetCallbackResult
ます。
あなたはすでにこれを行う2つの方法を実装して考えなければならないので、私はこのテクニックの本当の利点を見ることができません。
あなたの考え-このアプローチの有効な利点はありますか、それとも単にコードの臭いですか?
c# - 列挙をインターフェースIDのようなものに置き換える方法は?
次のインターフェースを検討してください。
ContentType 列挙は冗長だと思います。列挙型の代わりにインターフェイス識別子のようなものを使用する方法はありますか?
インターフェースの設計に関するコメントは非常に高く評価されます。
.net - インターフェース定義のオーバーライド
次のインターフェースを持っているとしましょう:
IReponse
問題は、インターフェースにセッターを持たせたいということです:
- なぜそれが許可されていないのですか?
- もしそうしたら、どんな問題が発生する可能性がありますか
new bool KeepAlive { get; set; }
。
アップデート:
他の質問を読んだところ、プロパティが変更されるとは予想されていないと書かれています。私は同意しない。Socket.Connected
物件を例にとってみましょう。ゲッターしかありませんが、変更できます。読み取り専用プロパティが言うことは、プロパティは実装内からのみ変更できるということです。
javascript - 大規模な JavaScript アプリケーションを開発するためのベスト プラクティス
Java/C++ の経験が豊富なため、品質を落とさずに多少大きな JavaScript アプリケーションを開発できるのではないかと考えています。
以下に関するヒントをいただければ幸いです。
- 開発環境
- デバッグ手法
- 単体テスト
- プロファイリング
- 計装
- システムデザイン
- インターフェイス設計
- コード設計
また、 JavaScript PC EmulatorやJavaScript Game Engineなどのプロジェクトがこれらの問題をどのように処理したかにも興味があります。