問題タブ [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.
javascript - コレクションアイテムは、それが含まれているコレクションについて知っています-これはにおいがしますか?
さて、これは奇妙な質問かもしれませんし、私は間違った方向に向かっているのかもしれませんが、ここに私の問題があります:
Tagオブジェクトのコレクションを保持するSearchFormオブジェクトがあります。ユーザーがTagオブジェクトをクリックすると、それ自体が強調表示され、イベントがトリガーされます。SearchFormクラスはこのイベントをリッスンし、それ自体を送信します。TagオブジェクトはSearchFormとは関係ありません。
ここまでは順調ですね。
これで、一部のタグはクリックされたときに他のタグをアクティブにする必要があります。各タグは、アクティブ化する必要のある他のタグを認識しています。ただし、そのためには、検索フォームが保持するタグのコレクション全体について知っている必要があります。
タグインスタンス(=コレクションアイテム)に他のすべてのタグ(=コレクション)の完全なリストへの参照がある場合、それは「悪い」でしょうか?
もちろん、このようなものは実行可能です:
Tag is clicked -> SearchForm is notified -> checks if the clicked tag must activate some others -> SearchForm activates the needed Tags itself
。
しかし、これは少し厄介に思えますか?
software-design - 現在推奨されているいくつかの優れた「ソフトウェア設計」の本/リソースは何ですか?
私は最近、いくつかのハイテク巨人の間でいくつかのフルタイムのポジションに応募しました、そしてこれは私が受け取ったフィードバックのいくつかの中にありました。
優れたコーディング慣行が一般的に何を伴うかは知っていますが、創造性だけでなく鋭い技術的焦点も組み合わせた大規模なソフトウェア設計についてはよくわかりません。
何をお勧めしますか?
user-interface - コントロールしすぎはダメです。でもいつ?
私は法律を読んだことを覚えています (正確には法律ではないかもしれません) が、ソフトウェア設計では、基本モードと拡張モードのオプションを実際にユーザーに与えずに多くの制御をユーザーに提供すると、裏目に出て、ユーザーが最終的に失敗することがあります。オプションが多すぎるため、そもそもオプションを使用しないでください。私はこれを正しく読みましたか?もしそうなら、誰かが私にもっと正式な情報源を教えてもらえますか?
python - モジュール方式でアプリケーションを設計するにはどうすればよいですか?
「モジュール方式でアプリケーションを設計する方法」についてのポインタ、提案、リンク、警告、アイデア、さらには逸話的な説明を探しています。このプロジェクトではPythonを使用しますが、OOPに基づく設計を実装するだけでよいのですが、アドバイスは必ずしもこの言語を参照する必要はありません。
これが私がどこから来たのか、そして私が何を達成しようとしているのかを理解するためのいくつかの文脈です...
私のプロジェクトは、Webサービスを利用し、次のようなさまざまな方法で結果を表示する小さなアプリケーションになります。
- 通話の結果だけを含む通知ポップアップ
- アプリケーションのメインウィンドウのタブで、取得した生データからグラフィックがプロットされます
- さまざまなサービスからの結果が積み重なるメッセージのバッファ(domandに表示)
アプリケーションは無料の(スピーチとしての)ソフトウェアとしてリリースされます。このため、他の開発者がメインアプリケーションの機能を拡張するプラグイン/モジュールを簡単に作成できるようにしたいと思います。コアコード。
この時点で、プラグインは基本的に、プロバイダー、データ操作(存在する場合)、およびデータがユーザーに提示される方法を定義することにより、開発者が新しいWebサービスをアクティブ化できるようにする必要があります。
私は強力なモジュラーアプローチを備えたdrupalを使用した開発の豊富な経験がありますが、それは非オブジェクト指向設計にも準拠しているため、Pythonの場合、drupal設計は最適なソリューションではない可能性があります。
これが重要な場合、コアはGNU/Linux用にネイティブに開発されます。
よろしくお願いします!
python - 完全な初心者のための設計原則?
私は約 1 年間プログラミングをしてきましたが、私が書いたものはすべて機能しています。初心者のプログラマーにちょっとしたガイダンスを提供できる、ソフトウェア設計に関する (無料の) 優れた本があるかどうか知りたいです。ソフトウェア設計に入る思考プロセスについて少し知っていれば、それほど多くの問題はないと思います。
java - Java 内部クラス反復子の問題
インナー使いに困っていIterator
ます。
次に、それを反復しようとします。
しかし、うまくいきません。(問題のある行のコメント付きコンパイラ エラーを参照してください)。ここで何が間違っていますか?
エンジニアリングの観点から、私の問題を解決する正しい方法はありますか? この形式のループがたくさんあります。
だから私はIterator
よりきれいになると決めました。これはやり過ぎですか、それとも別の方法がありますか?
c# - 定数フィールドと初期データの使用
既存のオフィス オートメーション アプリケーションを拡張するための新しいクラス図をいくつか設計しています。特別なケースでは、Entity1 で追加のフィールドを使用して何かを決定するか、Entity2 で追加のデータ行を使用してそれを決定するオプションがあります。最初のアプローチは、アプリケーションを新しいインストールに展開する際に初期データを挿入する必要がないため、より優れていると思いますが、BOSS は、現在のクラス図に変更を加えないため、2 番目のアプローチの方が優れていると主張しています (Entity1 と Entity2 は両方とも現在存在し、使用されています)。
どちらが本当に優れているのか疑問に思っています。私が正しい場合、どうすれば私のアプローチが優れていることを彼に納得させることができますか?
更新: 次のクラス ダイアグラムでは、SendingInformation は Entity1 で、LetterStatus は Entity2 です。
クラス図 http://www.freeimagehosting.net/uploads/dddc2e0f51.png
【画像が表示されない場合はこちらかこちらをクリックしてみてください】
java - 設計原則のバランス: 単体テスト
バナナグラムのシミュレーションを書いています。現在、私はGameMaster
ピースの共通コレクションを維持するクラスを持っています。メソッドは、そのdeal(Player)
プレーヤーに特定の数の駒を配ります。
このための単体テストを書きたいと思います。ただし、この時点ではゲッターがないため、オブジェクトのステータスを確認する方法がありません。
ゲッターを追加しないのはなぜですか? テストのためだけにパブリック インターフェイスにコードを追加したくありません。現時点では、これらの関数を公開する理由は他にありません。
ここで何をすればいいですか?とにかくゲッターを追加して、パブリック API を乱雑にしますか (または将来必要になることを期待しますか)? ユニットテストをやめますか?(悪い考えのように聞こえます。)
それとも、これは私のパブリック インターフェイスに欠陥があることを示していますか?
java - 最小限の API v. 利便性
アプリケーションの内部で使用されるインターフェイスを設計しようとしています。Google の例に従って、私は公開 API の乱雑さを減らすよう努めています。ただし、最小限のメソッドに関して定義されている便利なメソッドがいくつかあります。利便性と整理整頓のバランスをとるには、どのような要素を考慮する必要がありますか?
Google の例: HashBiMap
( doc ):
BiMap に getKeyForValue() メソッドがないのはなぜですか?
私たちはそれについて考えました (Doug Lea は半分冗談で teg()! という名前を付けることを提案しました)。しかし、実際には必要ありません。inverse().get() を呼び出すだけです。
Set
インターフェイスでの例:add()
とremove()
は最小限のメソッドですが、addAll()
とremoveAll()
は便宜上のものです。addAll()
の観点から実装できるadd()
ため、クライアントにSet
. ただし、クライアント コードはクリーンアップされます。
Utility
より便利なメソッドを含むクラスを作成することを検討しました。しかし、私は OOP から離れており、操作対象のオブジェクトをすべての呼び出しに引数として含める必要があります。私はそれがJavaのCollections
クラスの例に従っていると思いますが。
design-patterns - 複雑な制限のあるアクションの失敗を説明する方法
顧客がバウチャーを使用して購入の割引を受けることができるシステムを実装しています。特定の購入にバウチャーを使用できるかどうかは、いくつかの状況によって異なります。
例えば:
- 適切なバウチャー コード - コードは正しいですか?
- 有効範囲 - バウチャーはまだ有効ですか?
- バウチャーは購入の種類で使用できますか?
- 組み合わせ可能 - バウチャーを他のバウチャーと組み合わせることはできますか?
- もっとたくさん...
確認する必要がある、より複雑な制限もいくつかあります。1 つ以上の制限が満たされていない場合、お客様はバウチャーを使用できません。このバウチャーを使用できない理由を説明して、失敗したことを伝えたいと思います。例:
「有効期限が切れているため、このバウチャーはご利用いただけません。」
私の質問は次のとおりです。チェックをどのように実装しますか?
それぞれの制限を独自のクラスに実装し、それらを連鎖させて例外をスローしますか? (ここでの問題、複数の同一のデータベース クエリが実行される可能性があります) 1 つのメソッドですべての制限を実装しますか? (本当に、なぜ?) 一般に、アクションに複雑な制限が適用された場合に、失敗の詳細についてクライアントに通知する必要があるメカニズムをどのように実装しますか?
ありがとう、