問題タブ [code-structure]

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 投票する
0 に答える
396 参照

wpf - WPF チャート コンポーネント: コード構造と MVVM パターン

パレート図のようなグラフを表示する WPF コンポーネントをコーディングしています。正常に動作していますが、かなりがらくただと感じています。理由は次のとおりです。

  • 非常に多くのコンテナーを使用しています。単純なチャートの場合、おそらく約 50 個のコンテナーが構造化されています。

  • 余白 (ViewModel に格納されている) を使用して適切な場所に四角形を配置しました。

  • コンポーネントを適切な場所に配置し、それに応じてスケーリングするには、ViewModel 内のグラフィック コンポーネントのサイズを知る必要があります。

  • 2 つのレイヤーを使用してチャートをレンダリングしています。1 つはチャート用、もう 1 つはチャートのスケールを表示するためです。これはまったく良くないと思います

どのように見えるか

http://hpics.li/fd2b0bd (初心者のため画像を表示できません)

ビューモデル

一番上のオブジェクトはParetoChartVMで、SerieVM の ObservableCollection と AxisVM の別の 1 つ、Title とチャートの現在のサイズを含みます。

SerieVMは、ValuePointVMのOservableCollection で構成されます (グラフの四角形を表します)。

ValuePointVMには、Brush、数値、幅と高さ、および余白 (Thickness オブジェクト) が含まれています。

AxisVMには、ScaleVM のMinimumValue、MaximumValue、NumberOfScales、および ObservableCollection が含まれています。

ScaleVMには、Value、 ValuePercentage (上部に値が表示され、下部に最大値のパーセンテージが表示されます)、TopMargin および BottomMargin (両方とも Thickness オブジェクト) が含まれます。

意見

ビュー レイヤーには、ParetoChartV WPF コンポーネントのみが含まれます。このコンポーネントには ParetoChartVM のみが含まれ、彼の DataContext はこの ParetoChartVM に設定されます。

使い方

グラフ コンテナーのサイズが変更されるたびに、ParetoChartVM に通知します。これにより、すべての位置/幅/高さが再計算され、それらのプロパティのバインディングを使用してインターフェイスが更新されます。

これが XAML です (かなり大きいです)。

したがって、ObservableCollection ごとに、それらを格納および表示する ItemsControl を作成します。また、ItemsControl.ItemsPanel に Canvas を配置して、すべてのコンポーネントを必要な場所に Margins で配置する必要があります。これらのアイテムは ObservableCollection にも含まれているため、キャンバスを ItemsPanel として ItemsControl にも配置する必要があります。

私のコード構造に問題があると思いますか? 私はWPFとMVVMのパターンを始めているので、いくつか見たら教えてください。できるだけ詳しく説明してください。

(ドットネット フレームワーク バージョン 3.5 を使用しているため、コンテナーの SizeChanged イベントに対話性を使用できませんでした)

あなたの助けとあなたの時間をありがとう

編集(関連する問題)

私が抱えている副次的な問題は、テキストブロックを特定のポイントの中央に配置するために行ったコンバーターです (チャートの垂直の破線でスケール値を示すテキストを中央に配置します)。

これが私がやった方法です:

XAML で、Textblocks を次のように変更しました。

そのため、名前を付けて複数の値をコンバーターに渡します。

したがって、ストレスがかかると、このコンバーターはコンポーネントを狂わせ、コンバーターは1秒間に約10000回呼び出され、一見無限ループになることを除いて機能しています。その後、グラフのサイズは変更されません (ただし、ウィンドウ内の他のコンポーネントは引き続きサイズ変更に応答しています)。私が提供したスクリーンショットは、このコンバーターを使用しているものであることに注意してください。この問題のために使用を中止しました。

なぜこれが起こるのかについて考えがありますか?

編集n°2(サイドの問題について)

いくつかのテストを行ったところ、コンバーターの問題は、コンバーターへの ActualWidth パラメーターで発生するようです。Textblock は浮動小数点に問題があるようです。実際、変更していない幅が突然 ~8.08 から ~28.449 に変わります。次のスクリーンショットは、この値を示しています。

http://hpics.li/63af790

(左の値はコンバーターの呼び出し回数、右の値はパラメーターとして渡される実際の幅です)

ActualWidth 値は 28.44999999... と 28.45 の間で変化します。これにより、コンバーターが毎回トリガーされ、チャートが狂ってしまいます。

それを修正する方法はありますか?(私は幅が突然ジャンプする理由を理解しようとしています.

編集 n°3 (側面の問題について)

マージンがテキストブロックの幅を変更できるかどうかを確認しましたが、左マージンと上マージンのみが変更され、下マージンと右マージンは変更されません。xaml で、Margin から Canvas.Left および Canvas.Top へのバインディングを次のように変更しました。

その後、バグはなくなり、Textblock の幅が変更されなくなり、このバグが発生しました。問題は解決しましたが、まだ理由がわかりません。

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

assembly - 大きなアセンブリ コードの構造 (.asm/.inc ファイルを含めるための違い)

アセンブリで完全にコード化されたより大きなプロジェクトを開始しました。複数のサブルーチン、マクロ、メモリ テーブルなどがあります。コードを複数のファイルに分割するにはどうすればよいか考えています。目標は、より良い構造と読みやすさであることは明らかです。

現在、すべての定数定義 ( ) を含む .inc ファイルを使用しています.equが、多くのサブルーチンを処理するにはどうすればよいですか? それらを別のファイルに入れたい場合、.asm ファイルを使用する必要がありますか (実行可能コードが含まれているため)? より一般的なこと: .asm ファイルと .inc ファイルの違いは何ですか?特に、最終的に 1 つのメイン ファイルに含めることに関しては?

そして、ファイルを分割したら、複数の依存関係をどのように処理できますか (つまり、ファイル A にはファイル B が含まれ、ファイル B にはファイル C も含まれます)。どうやら私の現在の環境である Atmel Studio 6 は、二重包含を好まないようです。

0 投票する
3 に答える
55 参照

java - このコード構造に名前はありますか?

簡単なケースを次に示します。

これはクラス レベルのフィールドなので、匿名クラスと呼ぶのは適切ではないようです。ネストされたクラスに関する Oracle チュートリアルのページにある他の名前や説明はどれも当てはまらないようです。

「単一使用オブジェクト」に沿ったものだと思いますが、「匿名クラスという名前のクラスレベル」のようなことを言わずに説明することさえ困難です


Java と AWT に慣れていない人のために説明すると、マウス操作をリッスンするためのインターフェースを実装する操作のないメソッドを持つクラスのインスタンスを作成しています。複数のタイプのリスナー (ホイール、モーション、クリック) として追加できるように、実際のインスタンスが必要ですが、制御には同じオブジェクトを使用します。ただし、質問自体はAWT固有ではありません。

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

objective-c - アルファ値に基づいて PhysicsBody を作成する方法

次のようなシーンがあるとします。デバイスのフレームと同じサイズのシーンがあります。シーンには赤いボールがあり、「ワールド」全体を移動できます。この世界は黒と白のエリアで定義されており、ボールは白のエリアでのみ動くことができます。説明に役立つ図を次に示します。 シーンの写真

ユーザーがシーンの上に白い色で描いているかのように、黒い領域の一部を消去できます。これは、ボールを動かすことができる領域が常に変化していることを意味します。では、白と黒の領域の間のエッジに物理ボディを実装するにはどうすればよいでしょうか?

変更されるたびにphysicsBodyを再定義しようとしましたが、形状が十分に複雑になると、これは実行可能な解決策ではありません. 目に見えない「ボックス」の 2 次元配列を作成して、各ボックス内の領域の大部分が白か黒かを指定してみました。ボールが黒のボックスに触れた場合、ボールは押し戻されます。ただし、これには大量のレンダリングと配列の反復処理が必要でした。元の配列にはピクセルよりも少し大きなボックスが含まれていたので、これらのボックスを大きくして動きを少し滑らかにしようとしましたが、最終的にはボールの一部が白い領域で停止し、黒い領域内にあるように見えました。ユーザーは目に見えない障壁にぶつかっているように感じる可能性があるため、これは望ましくありませんでした。

この「破壊可能な地形」タイプのシーンを実装する他の方法を探してみましたが、見つけて試した解決策は、他のゲーム エンジンを使用することでした。さらに明確にするために、Objective-C と Apple の SpriteKit フレームワークを使用しています。コードでいっぱいの詳細なクラスを探しているのではなく、解決策につながる疑似コードまたは実装のアイデアを探しています。

ありがとうございました。

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

java - Eclipse フォーマッタの Google CodeStyle にバージョン警告が表示される

スタイル xml は以下から取得されます。

https://code.google.com/p/google-styleguide/source/browse/trunk/eclipse-java-google-style.xml

Eclipse Luna (バージョン 4.4.1) では、次の場所に移動します。

  1. 環境設定
  2. ジャワ
  3. コードスタイル
  4. フォーマッタ
  5. eclipse-java-google-style.xml をインポートします。

しかし、私はこのメッセージを受け取ります:

このプロファイルは、使用している Eclipse ビルドよりも新しい Eclipse ビルドで作成されています。一部の古い設定はデフォルト値にリセットされる可能性があり、新しい設定は無視されます。古いビルドから新しいビルドへのプロファイルのアップグレードは完全にサポートされていることに注意してください。

誰かが問題を知っていますか?現時点では、Eclipse Luna 4.4.1 が最新の Eclipse バージョンであるはずですが、これを解決するにはどうすればよいですか?

または別の質問: 誰かが他の優れた Java コーディング標準に準拠した format.xml を知っていますか?

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

configuration - incode 設定は大丈夫ですか?

次のような構成ストア クラスがいくつかあります。

利点:

  • IDE によって提供されるリファクタリングとナビゲーションのサポート。

短所:

  • よくわかりませんが、何か問題があるようです。

それが構成と呼ばれるべきかどうかさえわかりません。そのようなクラスを XML に置き換える必要がありますか? このような:

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

ios - iOS コードを構造化するには?

私は非常に複雑な設定をしており、コードを構築する方法についてアドバイスを求めています。私がやろうとしているのは、ユーザーの画像の 1 つを押してスワイプできるときの Twitter に似たものです。これは私が現時点で持っているものです:

  • UIViewControllerサーバーからデータを収集しUITableViewController、変数を介してサブクラスに渡すサブクラスtheData
  • このサブクラスは、ユーザーがテーブル ビューの一番下までスクロールして追加する(つまり、ページネーションを使用する)UITableViewControllerときにも、より多くのデータを収集します。theDataこのUITableViewControllerサブクラスはアプリ全体で再利用されるため、別のソースからのデータを渡すことができます。
  • ユーザーが をクリックすると、内部にがUITableViewCellあるUIWindowが作成されます。UIPageViewControllerウィンドウはUITableViewControllerをデリゲートとして にアクセスし、 をデリゲートからという変数にtheData渡します。theDataUIPageViewControllerpageData
  • の各ページUIPageViewControllerUIViewControllerpageData

次の段階は、ユーザーが の最後までスワイプするときにページネーションを行うことpageDataですUIPageViewController。しかし、私のコードは、UITableViewController. このコード構造を改善する方法について誰かアドバイスをください。

ありがとうございました

編集

最初のUIViewController箇条書きは、データをダウンロードするだけではありません (その中に他のビューがあります)。

UIWindowをカプセル化するためにを使用します。UIPageViewControllerこれは、 のフレームから拡大しUITableViewCell、全画面を「引き継ぐ」ため (ステータス バーを覆うため) です。

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

ios - コードを構造化する最良の方法

UIView内部の「通知」システムとして機能するサブクラスがあります。このシステムには、通知テキストを表示し、ビューの上から下にアニメーション化して戻るラベルがあります。これらの通知のキュー (アプリ内のどこからでも追加できる) を作成し、それらを 1 つずつ表示するシステムを作成する必要がありますが、どのように構成すればよいか疑問に思っています。

これらのキューを管理するシングルトンを使用する必要がありますUIViewか? またはUIViewControllerキューを持つ必要がありますか?または、他の何か?

ありがとう!

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

c - 読みやすさを優先して「あまり」使用せずに変数を明示的に宣言することをお勧めしますか?

したがって、これはもう 1 つの「優れた」プログラミング練習問題です。少し調べてみましたが、このようなものは、ほんの数語で定義するのが難しいことがよくあります.

質問に対して: 専門的な観点から、コードを合理化して短くする (必ずしも効率的であるとは限りません) か、インスタンス変数を明示的に定義してそれらを割り当ててすぐに返す方が良いプログラミング方法ですか? 例えば:

foobar上記から、が a を返すことがすぐにわかりますFILE *。したがって、このスタイルのプログラミングから、重要な情報をより迅速に抽出できます。これは、次のようなものと比較して当てはまります。

もちろん、これは同じことを達成します。ただし、同じ情報を見つけるには、より深く調べる必要があります。私は単純に見栄えが良いという理由で、後者のスタイルのプログラミングを好む傾向があります。このプログラムの実行方法の性質上、どちらを選択してもメモリが必要なため、どちらを使用してもすぐにパフォーマンスが向上するとは思えません。違いは、ユーザーまたはコンパイラがメモリを割り当てるかどうかです。

コードを短く簡潔にする別の例:

TL:DR 質問>> 何が行われているかを明示的に示した方が良いですか、それとも簡潔さと簡潔さを優先して、同じタスクを実行するが必ずしもパフォーマンスが向上しないコードを短くしても問題ありませんか?