問題タブ [class-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 投票する
2 に答える
167 参照

php - 別のファイルからファイル名を解決する

私は現在、次のことができます。

ファイル名と同様のことをしたいと思います(__FILE__ただし、動的に評価されます)。スーパークラスから、サブクラスがどのファイルにあるのか知りたいのですが。エレガントな方法でそれは可能ですか?

で何かできることは知っていますがget_included_files()、特にインスタンスが多数ある場合は、あまり効率的ではありません。

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

c++ - static const メンバー値とメンバー列挙型: どちらの方法が優れているか、その理由は?

何らかの定数値をクラスに関連付ける場合、同じ目的を達成する 2 つの方法があります。

クライアントの観点からは、構文的にも意味的にも同じように見えます。

純粋なスタイルの問題以外に、一方が他方よりも好ましい理由はありますか?

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

java - 大きな内部クラスとプライベート変数

私が何度か遭遇したことの 1 つは、ヘルパーの内部クラスが原因で過度に大きくなったサービス クラス (JBoss サービスなど) です。クラスを分割する良い方法をまだ見つけていません。これらのヘルパーは通常スレッドです。次に例を示します。

したがって、いくつかのヘルパーがあり、それらがまったく複雑な場合、クラス ファイル全体が非常に大きくなる可能性があります。クラスがサービスによって完全に所有されており、そのサービスを支援するためだけに存在することを明確にするという点で、私は内部クラスが好きです。クラスを分割して、親サービスを参照として渡すことを試みましたが、これはほとんど機能しますが、気に入らない点は次のとおりです。

  • パッケージ レベルのアクセサーを公開して、分割されたクラスが変数にアクセスできるようにすることになりますが、以前は、内部クラスが直接アクセスできるため、セッターをまったく公開していませんでした。
  • さらに、基になる変数ではなくアクセサーを常に呼び出しているため、話が少し長くなります。マイナーニット、付与。
  • 便利なメソッド (checkAssetIsValid() など) はパッケージ レベルで公開する必要があるため、ヘルパー クラスが呼び出せるようになりました。
  • さらに悪いことに、サービス実装クラスをヘルパー クラス コンストラクターに渡す必要があります。これは、サービスが実装するインターフェイスでこれらのヘルパー メソッドを公開したくないためです。これにより、単体テスト/モックの問題が発生する可能性があります。
  • さらに悪いことに、私がやりたかった同期は、外部の便利なメソッド (ポーラーの更新中の lockDownAssets() など) を介してリークされます。以前は、内部クラスはプライベート ロックにアクセスできました。

    要するに、クラスを分割すると、私が好むカプセル化の一部が失われます。ただし、それらをそのままにしておくと、いくつかの大きな Java ファイルが作成される可能性があります。私はまだこれに対処する良い方法を見つけていません。C++ には「友達」という概念がありましたが、私はこれを見逃したことはめったにありませんが、この場合は実際に役に立ちます。

    考え?

  • 0 投票する
    11 に答える
    88654 参照

    c# - クラスを使用するすべてのファイルにコード行を追加せずに、C# でクラス名のエイリアスを作成するにはどうすればよいですか?

    クラス名のエイリアスを作成したい。次の構文は完璧です。

    しかし、それはコンパイルされません。


    この例は、便宜上のみ提供されています。システム全体の設計を変更することを提案して、この特定の問題を解決しようとしないでください。この例の存在または欠如は、元の質問を変更しません。

    一部の既存のコードは、静的クラスの存在に依存しています。

    この配色は、Outlook 2003 の配色です。Outlook 2003 の配色を維持しながら、Outlook 2007 の配色を導入したい:

    しかし、コードが という静的クラスの存在に依存しているという事実にまだ直面していますColorScheme。私の最初の考えは、またはのいずれかColorSchemeから継承するクラスを作成することでした:Outlook2003Outlook2007

    ただし、静的クラスから継承することはできません。

    次に考えたのは、静的ColorSchemeクラスを作成することでしたがOutlook2003ColorSchemeOutlook2007ColorSchemeクラスを非静的にしました。次に、静的ColorSchemeクラスの静的変数は、「真の」配色のいずれかを指すことができます。

    しかし、そのためには、読み取り専用の静的な Color だけで構成されたクラスをオーバーライド可能なプロパティに変換する必要があり、そのColorSchemeクラスでは、含まれるオブジェクトに 30 の異なるプロパティ ゲッターをサンクする必要があります。

    それはタイピングしすぎです。

    だから私の次の考えは、クラスをエイリアスすることでした:

    しかし、それはコンパイルされません。

    静的クラスを別の名前にエイリアスするにはどうすればよいですか?


    更新:誰かが「C#ではこれを行うことはできません」という回答を追加してください。受け入れられた回答としてマークできます。同じ質問に対する回答が必要な人は、この質問、受け入れられた回答、および役立つ場合とそうでない場合があるいくつかの回避策を見つけることができます。

    この質問は締め切りたいと思います。

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

    c# - 他のクラスを参照する必要があるクラスの C# での適切な設計パターンは何ですか?

    C#.NET でビジネス上の問題に取り組んでいます。C と W という名前の 2 つのクラスがあり、異なるタイミングで個別にインスタンス化されます。

    クラス C のオブジェクトは、クラス W の 0 ... n 個のオブジェクトへの参照を含む必要があります。つまり、C オブジェクトは最大 n 個の W オブジェクトを含むことができます。

    各 W オブジェクトには、クラス C の 1 つのオブジェクトへの参照が含まれている必要があります。つまり、W オブジェクトは 1 つの C オブジェクトに含まれています。

    クラス C のオブジェクトは通常、最初にインスタンス化されます。後で、その W コンテンツが検出され、インスタンス化されます。この後の時点で、C オブジェクトと W オブジェクトを相互参照する必要があります。

    これに適した設計パターンは何ですか? 実際には 3 つまたは 4 つのクラスが関係するケースがありますが、簡単にするために 2 つのクラスについて話すことができます。

    私は次のような簡単なことを考えていました:

    これは今のところ機能しますが、すべての参照とその有効性を追跡するためにかなりの量のコードを作成する必要があると予測できます。コンテナーのみの浅い更新と、参照されるすべてのクラスの深い更新を行うコードを実装したいと考えています。他のアプローチはありますか?また、その利点は何ですか?

    11/3 に編集: 良い回答と良い議論をありがとう。それが私がやりたいことに最も近かったので、私は最終的にjopの答えを選びましたが、他の答えも役に立ちました。再度、感謝します!

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

    java - ネストされたJava列挙型定義 - static として宣言すると違いがありますか?

    私はインターフェースを持っています - これは例としてうまく工夫されたバージョンです:

    Charge列挙型を静的として定義した場合、これの実装の動作に違いはありますか-つまり、これには何らかの効果がありますか:

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

    c# - Webサービスを介したカスタムオブジェクトの名前/値ペアのシリアル化

    これは、データが強く入力されていない場合に、Webサービス呼び出しを介してデータをシリアル化する方法に関する非常に複雑な質問です。可能な限りレイアウトするようにします。

    サンプルストレージオブジェクト:

    使用例:

    Webサービスからの戻り値:

    私が欲しいもの:

    理由とその他のもの:

    まず、投稿の長さについては申し訳ありませんが、再現可能なコードも提供したいと思いました。

    PHPからWebサービスを利用しているので、この形式で使用したいと思います。簡単に行きたい:

    //これは重要です

    それが他の形式である場合、それを達成する方法はまったくありません。さらに、C#でサービスを利用している場合は、次のこともできるようにしたいと思います。

    //これは重要です

    残念ながら、これを実現する方法がわかりません。IXmlSerializerを実装したカスタムディクショナリを構築することで( StackOverflow:IXmlSerializerディクショナリを参照)、この方法で取得できましたが、WSDLスキーマが水から吹き飛ばされました。また、非常に複雑で、WinFormsTesterアプリケーションでひどい結果をもたらしました。

    これを達成する方法はありますか?どのタイプのオブジェクトを作成する必要がありますか?/強く型付けされたコレクションを作成する以外に/これを行う方法はありますか?明らかに、私がそれをこのように強くタイプした場合:

    そうすれば、完全に機能し、WSDLの問題は発生せず、PHPおよびC#(.OtherInfo.Hobbies)から簡単にアクセスできるようになります。

    ただし、リストが何であるかを事前に知る必要があり、データベースから変更できないという点で、NVPのポイントを完全に失うことになります。

    みんな、ありがとう!!これに対する何らかの解決策を考え出すことができるといいのですが。再度要件は次のとおりです。

    1. WSDLスキーマは壊れてはいけません
    2. 名前と値のペア(NVP)は、属性形式にシリアル化する必要があります
    3. PHPのNVPに名前で簡単にアクセスできる必要があります["趣味"]
    4. C#で簡単にアクセスできる(そしてプロキシジェネレーターと互換性がある)必要があります
    5. 簡単にシリアル化可能
    6. データを強く入力する必要はありません

    今、私はこれを行うためのより良い/異なる方法について/完全に/入力することを開いています。比較的「静的な」情報(Nameなど)と大量のデータを保存しています。もっと良い方法があれば、聞いてみたいです。

    0 投票する
    12 に答える
    824 参照

    c# - ac# クラスはそれ自体のインスタンスを生成する必要がありますか?

    CallRate 型を定義するクラスがあります。ファイルからデータを読み取って、クラスの複数のインスタンスを作成する機能を追加する必要があります。

    を返す静的メソッドをクラス CallRate に追加しましたList<CallRate>。クラスが独自のコンストラクターの 1 つを呼び出して、それ自体の新しいインスタンスを生成することは問題ありませんか? それは機能しますが、それが適切なことなのかどうか疑問に思っています。

    0 投票する
    14 に答える
    830 参照

    c# - コンストラクターで長い操作を行うのは悪い設計と見なされますか?

    ディレクトリ ツリーを比較するクラスを実装しています (C#)。最初に、クラスのコンストラクターで実際の比較を実装しました。このような:

    しかし、コンストラクターで長時間の操作を実行するのは「適切」ではありません。別の方法は、コンストラクターをプライベートにして、次のような静的メソッドを追加することです。

    どう思いますか?コンストラクターが「速い」ことを期待していますか? 2 番目の例の方が優れていますか、それともクラスの使用法が複雑になっているだけですか?

    ところで:

    正しい答えはないと思うので、好みと好みだけで、答えを受け入れたものとしてマークしません。

    編集:

    私の例を少し明確にするために。ディレクトリが異なるかどうかだけでなく、それらがどのように異なるか (どのファイル) にも興味があります。したがって、単純な int 戻り値では十分ではありません。cdragon76.myopenid.com による回答は、実際には私が望むものにかなり近いものです (+1)。

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

    c++ - 抽象基本クラスがインターフェイスの場合、派生クラス コンストラクターで基本クラス コンストラクターを呼び出す必要がありますか?

    派生クラスのコンストラクターで基本コンストラクターを呼び出す必要がありますか?