問題タブ [library-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 投票する
3 に答える
258 参照

c++ - C ++ 03ファイルストリームが文字列コンストラクターパラメーターを受け入れないのはなぜですか?

次のコードがコンパイルされ、コンパイルされないのはなぜC++11ですかC++03gccとの両方cl

ストリームがコンストラクターパラメーターとしてC++03受け入れられないのはなぜですか?この決定は何かに基づいたものですか、それとも偶然に起こったのですか?std::string

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

javascript - オブジェクト指向コードと MVC パターン - ページを初期化するときはどちらに従うべきか?

R: 1

このSOポストに記載されているように、それらは相互に排他的ではありません

これは、このより一般的なSO 投稿に関連する特定の質問です。

ただし、コントローラーはユーザーからのすべての呼び出しをルーティングすることを想定しています。これを行うには、要素を初期化し ( addEventListener を設定)、モデルを呼び出すようにします。

例:(私のコントロールオブジェクトから)

しかし、私のサイトが成長するにつれて、コントローラーが大きくなっています。

私ができることの1つは、初期化をそれぞれのモジュールに移動することです。たとえば、私のサインイン ロジックは ModelType というオブジェクトにあります。初期化はオブジェクト Control で行われます。

Control のサイズを小さくするには、初期化を ModelSignIn に移動します。

または、コントローラー オブジェクトを複数のオブジェクト (ControlPage1、ControlPage2 など) に分割することもできます。

どの方法が最適か、それとも他の方法が最適か?

初期化を相関オブジェクトに移動する利点の 1 つは、オブジェクトが自己完結型になり、他のアプリケーションにコピー ペーストできることです。欠点は、これが MVC パターンを壊しているように見えることです。

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

php - 成長するコントローラー クラスを処理するにはどうすればよいですか?

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

c++ - std 型が、アロケーターが異なるソースからの変換コンストラクター/代入を提供しないのはなぜですか

たとえば、なぜtemplate< typename Elem, typename Traits, typename Alloc > basic_string { ... }提供しないのか:

両方のアロケーターを尊重するような変換コンストラクターを実装することは、かなり簡単に思えます。現在の状況では、アロケーターが異なるだけで型間のインターフェイスを作成するのは非常に面倒です。

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

.net - .NET IoC:使いやすくするためのライブラリコンポーネントの事前設定

しばらく前に同様の質問がありましたが、IoC / DIのトピック全体と、私が達成しようとしていたことについての理解がはるかに少ないので、ここでもう一度説明します。

社内で一般的に使用するライブラリを構築しています。パブリックAPIの最も一般的に使用される部分は、すでにIoCに対応していますが、下位レベルの領域では、まだかなりの新機能が進行中であり、これを削除したいと思います(ただし、現時点では、実際よりも正式な理由でより多く使用されています)必要性)。

これ自体は簡単に実行できますが、もちろん、ライブラリを使用するたびに、すべてのコンポーネントを再度配線する必要があります。これはほとんど常に同じように見えるので、私は通常、これらのデフォルトの登録をAutofacモジュールにラップして、それで完了します。

(質問1:このモジュールはメインライブラリアセンブリに含まれるのでしょうか、それともAutofacがライブラリで使用される唯一のIoCコンテナである可能性が高い場合でも、スタンドアロンパッケージである必要がありますか?)

問題は、私が現在、IoCの目的を実際に理解している、またはIoCコンテナがどのように使用されているかは言うまでもなく、IoCコンテナが何をするのかを知っている唯一の開発者であるということです。そして、他のすべての人にそれらを伝えるのは悪い考えです。 Autofacパッケージを使用するか、貧乏人のDIを使用して12以上のオブジェクトのグラフを手動で作成することができます。(私はみんなを知っています-私はとにかく私の多くの小さなクラスすべてに夢中なので、彼らはそれを放っておいて、彼らが必要なものを自分で構築するでしょう。)

これを解決するために私が考えたのは、一般的に必要なタイプ(Autofacモジュールによって配線されたものと同じように見える)の事前構成されたオブジェクトをプルするService Locatorのようなものを追加することです。おそらく、軽量のIoCコンテナーによって内部的に配線されます。 。

Service Locatorはアンチパターンであり、どのような問題が発生するかを知っています。これをオブジェクト構成の(私の)手段として使用することは決してありませんが、IoC/SOLID障害の「ショートカット」としては実行可能でしょうか。 ?他にどのようなオプションがありますか?その場合、ライブラリにAutofacモジュールを含めて、「サービスロケーター」をそのフロントエンドとして機能させることも意味がありますか?

0 投票する
5 に答える
172 参照

c# - OOとライブラリの設計に関するいくつかの質問

Ok。OOのいくつかの側面とライブラリの設計に関していくつか質問があります。

  1. ライブラリは自給自足である必要がありますか?たとえば、外部の依存性注入フレームワークを使用できますか、それとも、より軽量な方法で独自に実装する必要がありますか?

  2. リスコフの置換原則は、メソッドまたはクラスの動作がわからないポリモーフィズムにどのように適合しますか?あなたはそれが期待通りに機能することを期待していますか?

  3. ソースコードの部分で、悪い習慣は、インターフェースを/interfacesそれらの実装から分離されたフォルダー(例えば)に保持しますか?

  4. where T : typeまた、実装だけでなく、インターフェイスのジェネリック型()を区切るのも悪い習慣ですか?(これは私はそうは思いませんが、それを確認するだけです)。

  5. オブジェクトの関係が「できる」と「ある」の両方であり、メソッドなどのデフォルトの実装が必要ない場合、インターフェースは抽象クラスよりも有利ですか?

それでおしまい。お時間をいただきありがとうございます=)

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

c++ - std::count(_if) が size_t ではなく iterator::difference_type を返すのはなぜですか?

重複の可能性:
C++ 標準アルゴリズム「count」が size_t ではなく ptrdiff_t を返すのはなぜですか?

標準 C++ にはアルゴリズムstd::count/があります。std::count_if

効果: 範囲 [first,last) 内の反復子 i の数を返します。これには、次の対応する条件が適用されます: *i == value, pred(*i) != false.

difference_typeis iterator's difference_type、これは負になる可能性がありますが、count値 >= 0 のみを返すことができます。たとえば、なぜdifference_typeそうではないのでしょうか?size_t

0 投票する
0 に答える
1406 参照

c++ - なぜ「Unknown.h」ではなく「Unknwn.h」なのですか? ミスプリントですか?

Microsoft の COM ヘッダー ファイルの名前がUnknwn.hではなく になっているのはUnknown.hなぜですか? それは誤植ですか、それともそのような命名には客観的な理由がありますか?

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

c - C でスタティック ライブラリのインターフェイスを設計する方法

私は C の経験豊富なプログラマーではありませんが、仕事でこの言語を使用して、SunOS と Win32 の両方でコンパイルされる静的ライブラリを構築する必要があります。このライブラリには、いくつかのソース ファイルとそれに対応するヘッダー (たとえばa.c、 、b.ca.hおよびb.h) しかありません。プロジェクトは両方のプラットフォームでコンパイルされ、ライブラリmylib.aが生成されます。

私の問題は、実装された関数mylib.aを他のプロジェクトに公開する方法です。両方を追加するa.hb.h、マクロの再定義エラーが発生するためです。

編集:マクロの再定義エラーは、コンパイルコマンドへのマクロ定義(私のヘッダーとは関係ありません)が原因であることがわかり、解決されました:)それでも、ソースファイルとヘッダーファイルの整理についてアドバイスが欲しいです。

私の疑問は、変更a.hb.hて外部で使用するか、またはこのライブラリのインターフェイスを宣言するために特別にヘッダー ファイルを作成する必要があるかどうかです (たとえばmylib.h)。元のヘッダーを過度に複雑にしたくはありませんが、別のヘッダーを同期させておく必要はありません...経験豊富なCプログラマーから、パターン、各アプローチの利点、および他に方法があるかどうかについて聞きたいですオプション。

前もって感謝します。

編集:十分な情報を提供していないようです。以下のスキーマは、ファイルがどのように構成されているかを示しています。各コード ファイルにはヘッダーのみが含まれ、各ヘッダーにはガード条件があり、各ヘッダーには共通ヘッダーが含まれ、この共通ヘッダーにはすべてのヘッダーが含まれます。

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

javascript - 依存関係のない JavaScript onLoad

私は、ユーザーがロード時にコードを実行できるようにする必要がある JavaScript ライブラリに取り組んでいます。もちろん、私はwindow.onload、および$(function() {});jQuery などに精通しています。しかし、私は別のライブラリに依存したくありません。また、この特定の関数を (もちろん、残りのライブラリと共に) クロスブラウザにしたいと考えています。

それで、別のライブラリのロード機能をオーバーライドせずに関数にアタッチする受け入れられた方法はありonloadますか(または、私の後に別のライブラリが含まれている場合は私のものを上書きします)?