問題タブ [code-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.
oop - クラスが長すぎるのはいつですか?
関数が長すぎるのはいつですか?この質問のサブセットだと思います。
クラスが長すぎると判断するためのいくつかの良い指標は何ですか?
外部の請負業者とのプロジェクトの一連のコード受け入れガイドラインを改訂していますが、これまではカバーしていませんでしたが、将来はカバーする必要があることに気付きました。
c++ - C++: ユーティリティ クラスの設計方法は?
しかし、静的メソッド、ヘッダー、クラス、またはその他のメソッドを使用する必要があるかどうかはわかりません。
ベストプラクティスは何ですか?しかし、ユーティリティ クラスのインスタンスは必要ありません。
次のような機能を追加したい:
c# - LINQコードの設計
プロジェクトでlinqコードを設計するための提案は何ですか?特に、大きくて複雑な統合言語クエリのコード設計に興味がありますか?
たとえば、巨大なlinqのものをたくさん書く必要があることを知っています。おそらく、コードの一部に重複部分がある場合とそうでない場合があり、次のことが必要です。
コードを簡単にサポートできるようにします。つまり、何かを変更する必要がある場合です。-あなたは一つのことを変えています、多くはありません
コードを読みやすくします。つまり、何かを見つける必要がある場合は、これを簡単に行うことができます。
あなたはあなたの例、多分あなたの練習を使うことができます。たぶん、あなたがどこでも見たいくつかのパターン-何でも。
linqとは、任意のlinq、linqからsql、linqからオブジェクト、linqからxmlなどを意味します。
Tnx
c# - ビジネス ロジックの分離
プロパティとメソッドが定義された顧客クラスがあります。現在、顧客に関連するあらゆるタイプのタスクのメソッドが含まれています。たとえば、メソッド「InsertOrUpdateCustomer」が含まれています。このメソッドは、新しい顧客レコードをデータベースに挿入するか、既存の顧客レコードの編集を容易にします。
このクラスには、顧客フィールドのいくつかの検証メソッドも含まれています。
それは良い方法ではないと思います。私はこのようにそれをいくらか壊したい:
このインターフェイスを別のクラスに実装したい、たとえば顧客:
私は知りたいです:
新しい顧客を挿入または更新するためのメソッドをどこに追加しますか? 別のクラスを作成するか、上記のクラスにメソッドを追加する必要がありますか?
上記の方法で古い単一クラスを壊すことは有益ですか? 上記のコードでインターフェイスにはどのような利点がありますか?
検証メソッドを削除し、代わりに検証フレームワークを使用したいと考えています。検証を行う別のクラス「CustomerValidations」を作成する必要がありますか、それとも上記のクラス自体を使用する必要がありますか?
c# - 列挙型の代わりに文字列を使用していますか?
列挙型ではなく、比較のために文字列を使用するのが一般的な場所ですか?
wcf - WCF サービスで多くのパラメーターを防止していますか?
基本的にOracleストアドプロシージャのラッパーであるWebサービスに取り組んでおり、現在11個のパラメーターがあります。引数が11個あるわけではありませんが、良いアーキテクチャを維持するためには、少なくともいくつかの引数を配置する構造が必要だと思います. すべてのパラメーターを渡す必要がありますが、コードの可読性はこのような長い呼び出しに影響を受けます。
このサービスは、クライアント アプリケーションがサード パーティの会社から正常にダウンロードしたことを報告することで、(クライアントとサード パーティの両方で) 請求を追跡できるようにします。
つまり、3Guid
秒、5int
秒、an int[]
、a double[]
、および astring
です。2 つの配列は並列です。
何かを変更すると、バックエンド サービスは .Net 4.0 WCF サービスになりますが、要求を行うアプリケーションは .Net 2.0 Windows フォーム アプリケーションになります。
どのような種類のビジネス関係をオブジェクトに結合することを保証しますか? これがSOAPを使用して転送されていることを知る最適な方法は何ですか?
c++ - わずかに異なる (ロギング/非ロギング) 機能を効率的に維持する
グラフでコミュニティを検出するためのアルゴリズムがいくつかあり、それらを視覚化したいと考えています。このビジュアライゼーションでは、これらのアルゴリズムを実行してログに記録する間、これらのアルゴリズムを「ハイジャック」する必要があります。具体的には、std::vector<graph_partition>
これらのアルゴリズムへの引数として a への参照を渡し、アルゴリズムが進行するにつれてそのベクトルに追加することを意味します。
したがって、各アルゴリズム (通常は単なる関数) に、 の引数と&std::vector<graph_partition>
、ログ記録用の 1 ~ 2 行のコードを追加する必要があります。
ただし、常にログを記録したい/必要があるとは限らないため、これをインテリジェントな方法で行うことは自明ではありません。私は考えました:
- 各アルゴリズムの個別のロギング バージョンを作成する:ここでの問題は、ロギング機能と非ロギング機能の 95% が同じであるため、何度も繰り返すことになることです。私のコードは繰り返しが発生しないようにモジュール化する必要があると言えますが、実際には、小さな些細な関数がたくさんない限り、自分自身を繰り返さなければなりません。
- ログに記録するかどうかを決定する条件付き引数を持つ単一の関数があります
&std::vector<graph_partition>
: 問題は、使用したくない場合に何を渡すかです。また、条件を継続的に評価することによる (おそらくごくわずかな) ランタイム ヒット。 - いくつかのマクロの魔法: マクロは少し悪質で、できれば避けたいものです。
- デフォルトでログに記録し、不要な場合は破棄します。便利ですが、ランタイムとスペースの両方の点で無駄です。
これらに関するアイデアや考えをいただければ幸いです。
java - 複数の If-else または enum - どちらが望ましいか、またその理由は?
元のコードは次のとおりです。
これは私がそれを変更した方法です:
enums
コードはより長く、コードほど明確ではないかもif-else
しれませんが、その方が良いと思います.なぜ私が間違っているのか(または間違っていないのか)教えてもらえますか?
UPD - ソース コードをより問題に特化したものに変更しました。質問を言い換えます: if-else の代わりに enum を使用することに懸念はありますか?
c# - ブロックガロアを使用していますか?
次の件についてご意見をお聞かせください。
1つの特定の目的を達成するためのメソッドがあると想像してください。しかし、そのためには、ローカルスコープのオブジェクトの重要な数のサポートが必要であり、それらの多くはを実装していますIDisposable
。
MSコーディング標準IDisposable
では、メソッドのスコープを「存続」する必要のないローカルオブジェクトを使用する場合(たとえば、返されることも、より長く存続する状態情報に割り当てられることもありませんobject
)、構成を使用する必要がありますusing
。
using
問題は、状況によっては、ネストされたブロックの「地獄」を取得できることです。
使用しているオブジェクトの一部が共通ベースから派生している場合、またはを実装する共通interface
を実装している場合は、どういうわけかこれを軽減できますIDisposable
。もちろん、これには、オブジェクトの真のタイプが必要なときはいつでも、前述のオブジェクトをキャストする必要があるという犠牲が伴います。キャストの量が手に負えない限り、これは実行可能である場合があります。
もう1つのオプションは、ブロックを使用せず、using
ブロックを直接実装することtry-catch
です。これは次のようになります。
面白いことに、VSCodeAnalyzerはこのコードに「間違った」というフラグを立てます。すべての可能な実行パスが、スコープ外になる前にすべての使い捨てオブジェクトが破棄されることを保証するわけではないことを通知します。私の意見では決して起こらないはずのオブジェクトが破棄中にスローされた場合にのみ発生することがわかります。発生した場合、通常は何かが本当に混乱しているという兆候があり、おそらくあなたと同じくらい速く優雅に終了する方が良いでしょうアプリ全体からできます。
ですから、問題は、どのアプローチがより好きかということです。ブロックの数に関係なく、ネストされたブロックを使用することが常に望ましいですusing
か、または特定の制限を超えると、try-catch
ブロックを使用する方が良いですか?
c# - IVR システムの apsx ページでデータベース接続を開く/閉じる
私は現在 IVR システムを開発しています。私の質問は、基本的なアーキテクチャの開発側とデータベース接続の開閉に関するものです。以下のコードからわかるように、page_load で接続を開き、変数を渡し、接続を閉じています。私の問題は、ページの読み込み中に変数が設定されず、呼び出しが入ったときに変数が設定されるという事実にあります。これは Boolean ParseXML セクションにあります。ページの読み込み中に接続を開き、変数が収集された後に変数を渡し、最後に接続を閉じるための最良の方法を知る必要があります。そして、これを行う最も重要な方法は、いくつかの異なる方法を試しましたが、成功しませんでした.
私の最初の思考プロセスとアプローチは、データベース接続コードを分割し、それらをページ ライフ サイクルのさまざまな部分に配置することです。しかし、正確にどこに置くかについては、まったく成功していません。
ブール解析は、テキスト ファイルに書き込みます。しかし、データベースにも書き込みたいです。