問題タブ [software-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.
wireshark - Wireshark のようなアプリケーションはどのように機能しますか?
Wireshark がどのように機能するのか疑問に思っています。特定のマシンのすべてのポートでトラフィックをリッスンできるアプリケーションの設計はどのようなものでしょうか? そのようなアプリケーションが生成するのはどのような種類のオーバーヘッドですか? トラフィックを監視するアプリを作成するには、どのような方法がよいでしょうか?
ありがとう
software-design - 適切なツールを選択する際に助けが必要
AI言語でテスト環境をセットアップしたクライアントがいます。基本的に、いくつかの事前定義されたテスト ケースを実行し、結果をログ ファイル (カンマ区切りの txt ファイル) として保存します。私の仕事は、報告システムを特定して提案することであり、これらのオプションを念頭に置いています。
1. ログを MSSQL にインポートし、MSSQL が使用するレポート (SSRS) を使用するか
、2. ログを MySQL にインポートし、PHP を使用してカスタム レポートを作成します。
オプション 2 を使用する方がよいと考えています。この理由は、ログに一貫性がなく、通常は DB が受け入れない予期しないワイルド文字が含まれているためです。そのため、データベースにロードする前にいくつかのスクリプトを php で書くことができます。
これがあなたの問題である場合、誰かが提案してもらえますか?
c# - Scrabbleのゲーム実装のための柔軟で拡張可能なボーナスシステムの設計
自分のバージョンのScrabbleを実装しているとしましょう。私は現在、Board
たくさんのを含むクラスを持っていますSquares
。次に、aはaとaSquare
で構成されます。ボーナスの実装は、実際にはScrabbleの通常のボーナスですが、ゲームにスパイスを加えるために、新しいツイストボーナスを追加しようとする可能性があります。ここでの柔軟性が最も重要です。IBonus
Piece
しばらく考えた後、IBonus
実装が機能するためには、全体Board
とその現在の位置を知る必要があるという結論に達しました(で、Board
それがどこにあるかを知っているので、同じ部分にある部分をチェックできますボーナスとして正方形)。これは、基本的に多くの情報を知る必要があるのと同じくらいひどいことになります。
Board
したがって、私の素朴な実装は、 as引数をIBonus.calculate()
メソッドに渡すIBonus.calculate(Board board, Point position)
ことです。
また、循環参照を作成しているようです。それとも私は間違っていますか?
私はこのアプローチが特に好きではないので、他の可能なアプローチを探しています。calculate
具体的なクラスの代わりにインターフェイスを受け入れることができることはわかっていますcalculate(IBoard board)
が、IMOは最初のケースよりも優れているわけではありません。
私は、現在の実装に集中しすぎて、少なくともこの問題の解決策に適合する可能性のあるまったく異なる設計を考えることができないのではないかと心配しています。たぶん、ゲーム全体を再構築して、他の場所にボーナスを置くことができるので、この計算が容易になりますか?多分私はそれらをBoard
?私は確かにそこにこの問題への他のアプローチがあることを願っています!
ありがとう
database-design - MongoDB を使用した Twitter ライクなアプリ
私は、古典的な「フォロー」メカニズム (Twitter や Web 上の他の多くのアプリで使用されているメカニズム) を使用するアプリを作成しています。私はMongoDBを使用しています。ただし、私のシステムには違いがあります。ユーザーはユーザーのグループをフォローできます。つまり、グループをフォローすると、そのグループのメンバーであるすべてのユーザーを自動的にフォローすることになります。もちろん、ユーザーは複数のグループに所属できます。
これは私が思いついたものです:
- ユーザー Aがユーザー B をフォローすると、ユーザー B
following
の ID がユーザー A のドキュメントの埋め込み配列 ( と呼ばれる) に追加されます。 - フォローを解除するために、フォローしているユーザーのIDを
following
配列から削除します グループも同じように機能します。ユーザー Aがグループ X をフォローすると、グループ X
following
の ID が配列に追加されます。(実際に追加するDBRef
ので、接続先がユーザーかグループかがわかります。)ユーザー Aがグループ Xをフォローしているかどうかを確認する必要がある場合、ユーザー Aの次の配列でグループの ID を検索するだけです。
- ユーザー Aがユーザー Bをフォローしているかどうかを確認する必要がある場合、状況は少し複雑になります。各ユーザーのドキュメントには、ユーザーが属するすべてのグループをリストする埋め込み配列があります。そこで、
$or
条件を使用して、ユーザー A がユーザー B を直接フォローしているか、グループ経由でフォローしているかを確認します。このような:db.users.find({'$or':{'following.ref.$id':$user_id,'following.ref.$ref','users'},{'following.ref.$id':{'$in':$group_ids},'following.ref.$ref':'groups'}}})
これは問題なく機能しますが、いくつか問題があると思います。たとえば、ページネーションを含む特定のユーザーのフォロワーのリストを表示するにはどうすればよいですか? 埋め込みドキュメントで skip() と limit() を使用できません。
デザインを変更してuserfollow
コレクションを使用することで、埋め込みfollowing
ドキュメントと同じことを行うことができます。私が試したこのアプローチの問題点は、$or
以前に使用した条件では、同じユーザーを含む 2 つのグループをフォローしているユーザーが 2 回リストされることです。これを回避するには、実際に行ったグループまたは MapReduce を使用できますが、これは機能しますが、物事を単純にするためにこれを避けたいと思います。たぶん、私は箱から出して考える必要があるだけです。または、両方の試みで間違ったアプローチをとったのかもしれません。誰かがすでに同様のことをしなければならず、より良い解決策を思いつきましたか?
(これは実際には、私のこの古い質問のフォローアップです。新しい状況をよりよく説明するために、新しい質問を投稿することにしました。問題にならないことを願っています。)
performance - 科学計算におけるメッシュデータのメモリレイアウト
私は有限要素システムを開発しています。いつものように、シミュレーションはメッシュノードのセットで構成され、それぞれがプロパティのセット(フローティングポイント)を持ちます。たとえば、時間内に変化するいくつかの材料プロパティ、座標、または物理量などです。
次の2つの極端なアプローチを採用できます。
プロパティごと:プロパティごとに1つの配列を維持します。
double* x, *y, *z, *e_field, *b_field, *conductivity;
エントリ単位:各配列が構造体である単一の配列を維持します
struct { double x, y, z, e_field, b_field, conductivity; } *meshnodedata;
これらの間で、座標x、y、zにのみ2番目のアプローチを適用し、残りのプロパティに最初のアプローチを使用するように、混合することができます。シミュレーションが各メッシュノードに対して維持するプロパティが多いほど、混合する可能性があります。
一方では、プログラムのパフォーマンスとコードの保守性に関して、これらのアプローチ(およびそれらの組み合わせ)のどれが科学計算に最適であるかという古典的な質問があります。一方で、異なるアプローチ間の移行が容易になるようにコードを実装するにはどうすればよいのでしょうか。さらに、プログラムのさまざまな部分のさまざまなメモリレイアウト間で移行することも解決策になる可能性があります。
要点を言えば:
- これらの異なるアプローチでのあなたの経験は何でしたか?
- これらの違いはどれほど重要でしたか?
- これら2つのレイアウト間での移行の経験を積んでいますか?
.net - ソフトウェアを捨てることはありませんか?
ソフトウェアを捨てるのはよくありませんか?
ジョエルは、企業は決してソフトウェアを捨てるべきではないと結論付けています。
私は良い小さなプログラマーになり、このルールに従うようにしています。私は、1 人の男性が運営する 5 年前のプロジェクトに参加しました。アンチパターンでいっぱいで、一般的に設計が貧弱です。問題のほとんどは、インライン動的 SQL を使用したデータ層に起因します。
- 長所: ユーザーはこのアプリの動作に慣れており、バグにも慣れています。要件は構築されていますが、ユーザーがアプリケーションの全体的な信頼性に疑問を抱く原因となっている根本的な問題がいくつかあります。
- 短所: アンチパターン、激しいカップリング、インライン SQL、不可能なデータ層。
要件を再収集し、オブジェクト指向、デザイン パターン、および最新の .NET 手法を使用してこのアプリを作成することができました。管理可能でチーム化可能。
小規模なアプリケーションで、このような問題がある場合、Joel のアドバイスに従うべきでしょうか?
この質問は主観的であるために投げ捨てられるかもしれませんが、これはプログラマーとしての私の仕事にとって非常に重要であることがわかりました.
.net - サードパーティライブラリの異なるバージョンのユーティリティの設計
私はそのような解決策が適用されるプロジェクトを継承しました:
サードパーティライブラリには5つのバージョンがあります。また、対応するバージョンのサードパーティライブラリ用のユーティリティを備えたソリューションには5つのプロジェクトがあります。
ソリューション内の非常に多くのユーティリティクラスには、サードパーティライブラリのすべてのバージョンで同じコードがあります。重複の問題はこのようにして解決されます。すべてのプロジェクトで同じである必要があるコードファイルは、いくつかの共通フォルダーに保存され、すべてのプロジェクトへのリンクとして追加されます。
リンクを使用してコードを共有することが最善のアプローチだとは思いません。それが悪いアプローチであるかどうかを教えてください。そうである場合は、そのようなコードの重複を解決する正しい方法を教えてください。
前もって感謝します。
software-design - ソフトウェア設計/アーキテクチャについて学ぶための良い本は何ですか?
コーディング方法について説明している本ではなく、ソフトウェアのより高度な構成について説明しています。
design-patterns - デザインパターン ?どうすればそれらを理解できますか
こんにちは、私はソフトウェア エンジニアです。3年生の学生で、「ソフトウェアデザイン」コースでデザインパターンを取っています。問題は、それらのものを手に入れるのが本当に難しいことです.これらの概念を理解するための簡単なガイドやビデオを知っていますか?! 私の専攻は試験が来週で、早めに準備する必要があります。それらを理解するための最も簡単な参考文献を教えていただければ幸いです
design-patterns - データベース モデルのモデル化は、複雑で大規模なエンタープライズ アプリケーションを設計するための適切なアプローチですか?
私たちは、一から設計しなければならない巨大なサービス指向の多層アプリケーションに取り組んでいます。次に、プログラミングを開始し、最初のブロックを組み立てる必要があります。
問題は、どこから始めるかです。より明確なビューを提供する永続的なデータ モデルを設計することから始めるべきだと提案する人もいます。これは良いアプローチですか?
Suirtimed の編集
ここにはアジャイル文化はあまりありません。これは、WCF、SQL Server、Entity Framework (ドメイン オブジェクトの POCO ジェネレーターを使用)、ASP MVC、および Workflow Foundation を使用する SOA スタイルのプロジェクトです。私たちは 4 人の開発者で構成されるチームです。かなり熟練した(しかし専門家ではない)。