タグ付けされた質問 「java」

Javaは、元はSun Microsystemsによって開発された、プラットフォームに依存しない高レベルのオブジェクト指向プログラミング言語です。Javaは現在、2010年にSunを購入したOracleが所有しています。

4
コンストラクターでの正当な「実際の作業」
私はデザインに取り組んでいますが、引き続き障害にぶつかっています。私は特定のクラス(ModelDef)を持っています。これは、本質的にXMLスキーマを解析することで構築された複雑なノードツリーの所有者です(DOMを考えてください)。優れた設計原則(SOLID)に従い、結果のシステムを簡単にテストできるようにします。DIを使用してModelDefのコンストラクターに依存関係を渡すつもりです(テスト中に必要に応じてこれらを簡単に交換できます)。 しかし、私が苦労しているのは、ノードツリーの作成です。このツリーは、個別にテストする必要のない単純な「値」オブジェクトで完全に構成されます。(ただし、これらのオブジェクトの作成を支援するために、Abstract FactoryをModelDefに渡すことができます。) しかし、私は、コンストラクターが実際の作業を行うべきではないことを読み続けています(例:Flaw:Constructor does Real Work)。「実際の作業」とは、後でテストのためにスタブアウトする可能性のある重い依存オブジェクトを構築することを意味する場合、これは私にとって完全に理にかなっています。(これらはDI経由で渡される必要があります。) しかし、このノードツリーなどの軽量の値オブジェクトはどうでしょうか。ツリーはどこかに作成する必要がありますよね?ModelDefのコンストラクター(buildNodeTree()メソッドなどを使用)を使用しないのはなぜですか? ModelDefの外でノードツリーを作成してから(コンストラクターDIを介して)渡したいとは思いません。スキーマを解析してノードツリーを作成するには、かなりの量の複雑なコードが必要です。 。私はそれを「グルー」コードに委ねたくありません(これは比較的簡単なはずで、おそらく直接テストされません)。 ノードツリーを作成するためのコードを別の「ビルダー」オブジェクトに入れることを考えましたが、実際にはビルダーパターン(テレスコープの排除に関心があると思われる)と一致しないため、「ビルダー」と呼ぶことをためらいます。コンストラクター)。ただし、別の名前(NodeTreeConstructorなど)を呼び出したとしても、ModelDefコンストラクターがノードツリーを構築するのを避けるために、ちょっとしたハックのように感じます。どこかに構築する必要があります。なぜそれを所有しようとしているオブジェクトではないのですか?

4
文字列を連結して1回呼び出すよりも、println()を頻繁に呼び出すのはどれほど悪いでしょうか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Code Review Stack Exchangeから移行されました。 5年前に移行され ました。 コンソールへの出力はコストのかかる操作であることは知っています。コードを読みやすくするために、長いテキスト文字列を引数として使用するのではなく、関数を呼び出してテキストを2回出力する方がよい場合があります。 たとえば、どれだけ効率が悪いのか System.out.println("Good morning."); System.out.println("Please enter your name"); 対 System.out.println("Good morning.\nPlease enter your name"); 例では、違いは1回の呼び出しのみprintln()ですが、それ以上の場合はどうなりますか? 関連するメモでは、印刷するテキストが長い場合、ソースコードを表示しているときにテキストの印刷に関連するステートメントが奇妙に見えることがあります。テキスト自体を短くすることができないと仮定すると、何ができますか?これは、複数のprintln()呼び出しが行われる場合ですか?誰かがコード行を80文字(IIRC)を超えてはならないと言っていたので、どうしますか System.out.println("Good morning everyone. I am here today to present you with a very, very lengthy sentence in order to prove a point about how it …
23 java  c++  performance  c  io 

6
ネストされたコメントの問題を解決する方法
1つの言語だけでなく、コメントをネストできないように見えます。この問題の良い解決策はありますか?C / C ++およびJavaでの1つの回避策は、単一行コメントのみを使用することですが、より大きなブロックをコメントアウトすることは不可能になります。私はこのようなものに直面しています: </li><!-- <li><!-- Save --> そのため、コメントを手動で確認して編集する必要があります。多くの言語でこれをどのように扱うべきかアドバイスをいただけますか?私にはわからないが、多分、Pythonにコメント'''を含めることができるかもしれない方法でこれを解決できるの#でしょうか?`
23 java  c++  python  c  comments 

7
複雑すぎる方法を避ける-循環的な複雑さ
Cyclomatic Complexityを削減するためにこの方法をどのように実行するかわからない。ソナーは13を報告しますが、10が予想されます。しかし、この方法をそのままにしておいても、ソナーのルールに従う方法に挑戦するだけでは何の害もありません。どんな考えでも大歓迎です。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { …

5
保存せずに新しいオブジェクトを作成するのは悪い習慣ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 オブジェクトへの参照を保存せずにJavaコードで作成されたオブジェクトを見てきました。たとえば、Eclipseプラグインで、次のように作成されたSWTシェルを見ました。 new Shell(); この新しいShellオブジェクトは変数に格納されませんが、ウィンドウが破棄されるまで参照されたままになります。ウィンドウが閉じられると、デフォルトで[信じる?]が発生します。 参照を保存せずにこのようなオブジェクトを作成するのは悪い習慣ですか?または、ライブラリの設計が不十分でしたか?参照の必要はないが、オブジェクトの「副作用」のみが必要な場合はどうなりますか?とにかく参照を保存する必要がありますか? 更新: 確かに、私の上記の例は貧弱です。このように作成されたUI要素を見てきましたが、Shellインスタンスでopenメソッドを呼び出す必要があるため、このようなSWTシェルの作成はおそらく無意味です。Java並行性チュートリアルの次のような、aixが提供するより良い例があります。 (new HelloThread()).start(); このプラクティスは多くのコンテキストで見られるため、疑問が残ります。それは良い習慣ですか?
23 java 

11
銀行の世界でコード設計の努力または怠lazを選択する
私は素晴らしい投資銀行で2年間働いてきました。 私は、最適化されたコードを作成し、適応された優れたデザインパターン、ソリッド原則、デメテルの法則を尊重し、あらゆる種類のコードの重複を回避することを望んで、いくつかの技術プロジェクトを作りました 本番環境での配信=>バグがゼロの場合、すべてが期待どおりに行われています。 しかし、大部分の開発者は、すべてのコードが読解には複雑すぎることを正確にするために来ました。たとえば、「ifおよびinstanceofをいくつか作成し、ポリモーフィズムを忘れて、緊急の生産バグを修正するのが非常に簡単になるようにします」。私は答えることを好まなかった...... これらの開発者はまったく好奇心がないことを知っており、優れた設計を理解する努力を拒否しています(たとえば、90%の開発者は戦略パターンとは何かを知りません。 )、私のプロジェクトマネージャーは、私は本当に間違ったやり方であり、世銀の世界にとって理想主義すぎると言った。 私に何をアドバイスしますか?本当に良いコードの欲求を維持するか、そうである開発者の大多数に私を適応させるならば、私によると、私による開発者の仕事のすべての美しさである設計コードによって本当に面白くないです。 それとも逆に、基本的なオブジェクト指向の原則とベストプラクティスを習得して、自分のコードに適応する必要がありますか?

4
Javaのパフォーマンスを大幅に向上させる方法は?
LMAXのチームは、1ミリ秒未満のレイテンシで100k TPSを実行する方法についてプレゼンテーションを行いました。彼らは、ブログ、テクニカルペーパー(PDF)、およびソースコード自体を使用して、そのプレゼンテーションをバックアップしています。 最近、Martin Fowler氏は、公開LMAXアーキテクチャ上の優れた論文を、チームがパフォーマンスに大きさの別の注文を上がるために取ったステップのいくつかを、彼らは今、毎秒600万件の注文を処理することができることを言及し、ハイライト。 これまで、ビジネスロジックプロセッサの速度の鍵は、すべてをメモリ内で順番に実行することであると説明してきました。これを実行するだけで(本当に愚かではありません)、開発者は10K TPSを処理できるコードを作成できます。 その後、優れたコードの単純な要素に集中することで、これを100K TPSの範囲に引き上げることができることがわかりました。これには、適切にコード化されたコードと小さなメソッドが必要です-基本的に、これによりHotspotは最適化のより良い仕事をすることができ、実行中のコードをより効率的にキャッシュすることができます。 もう1桁上るには、もう少し賢くなりました。LMAXチームがそこにたどり着くのに役立つとわかったことがいくつかあります。1つは、キャッシュに対応し、ゴミに注意するように設計されたJavaコレクションのカスタム実装を記述することでした。 その最高レベルのパフォーマンスに到達する別の手法は、パフォーマンステストに注意を払うことです。私は長い間、人々がパフォーマンスを改善するためのテクニックについて多くのことを話していることに気づきましたが、実際に違いを生むのはそれをテストすることです ファウラーは、発見されたいくつかの事柄があると述べましたが、彼はいくつかだけに言及しました。 このようなレベルのパフォーマンスを達成するのに役立つ他のアーキテクチャ、ライブラリ、テクニック、または「もの」はありますか?

9
Java / C ++にパワー演算子がないのはなぜですか?
そのような演算子がありますが**、Pythonでは、なぜJavaとC ++にも演算子がないのかと思っていました。 演算子のオーバーロードを使用してC ++で定義するクラスに簡単に作成できます(Javaでもこのようなことが可能だと思います)が、int、doubleなどのプリミティブ型について話すときは、ライブラリを使用する必要がありますのような関数Math.power(通常、両方をdoubleにキャストする必要があります)。 だから-なぜプリミティブ型にそのような演算子を定義しないのですか?
23 java  c++  python 

2
命名規則:最終フィールド(静的ではない)
今日はfinal、Javaクラスのフィールドの命名について同僚と話し合いました。 彼の意見finalでは、フィールドはインスタンスの作成後に値が変化しないため、定数と見なされる必要があります。 これにより、finalフィールドに次の命名規則が適用されます。 public class Foo { private static final String BLA_BLA = "bla"; private final String BAR_BATZ; ... } 私の意見では、static finalフィールドのみが定数と見なされるべきですが、フィールドfinalは通常のcamelCase命名規則に従うべきです。 public class Foo { private static final String BLA = "bla"; private final String barBatz; ... } 彼は私よりもはるかに経験豊富なプログラマーであり、私は彼の意見に同意し、彼を非常に優れた開発者と見なしているため、今は少し不確かです。 これに関する入力はありますか?
23 java  naming  final 

5
別の一般的な言語は、Java / Java EEと同様の複雑さを管理しながら、ファクトリパターンを使用する必要をどのように回避しますか?
ファクトリー・パターン(または少なくともの使用FactoryFactory..)は、次のような多くのジョークのお尻です。 RequestProcessorFactoryFactory.RequestProcessorFactoryのような詳細で「創造的な」名前の他に、Java / C ++でプログラミングする必要があり、Abstract_factory_patternのユースケースがある場合、ファクトリパターンに根本的な問題はありますか? 他の一般的な言語(RubyやScalaなど)を使用して、同様の複雑さを管理する必要はありませんか? 私が尋ねる理由は、Java / Java EEエコシステムのコンテキストで言及されている工場の批判がほとんど見られますが、他の言語/フレームワークがそれらをどのように解決するかについては説明しません。

1
大きなプロジェクトを分割してマルチモジュールMavenプロジェクトを作成する
私は依存関係管理にMavenを使用しているSpring-MVCアプリケーションに取り組んでいます。プロジェクトが大きいので、プロジェクトをいくつかの部分に分割することを考えています。いくつか疑問がありましたが、ここで答えが得られることを願っています。 現在、ROOT.warサーバー上のApache Tomcatのように単一のWARファイルをデプロイしています。プロジェクトが大きいので、通知とメール、サードパーティサービス、PUSH(Cometd)、REST APIなどのようなwebappの部分があります。現在、それらはすべてクラブであり、互いに依存しています。たとえば、通知はユーザーに合わせて調整されるため、Notificationオブジェクトもオブジェクトに依存しPersonます。 大きなプロジェクトを分割する主な目的は、バグ修正、機能の追加、テストなどのために個々のモジュールで作業できるようにすることです。そして、満足したら、このモジュールのみをアプリケーション全体ではなくサーバー上で置き換えることができます。これは可能ですか? 前述したように、オブジェクト間に依存関係とマッピングがあります。これらは異なるサブモジュール間でどのように管理されますか、またはインポートステートメントだけが他のプロジェクトを含むように変更されますか? 私が言ったように、意図は個々のモジュールに取り組み、それらを展開できるようにすることです(できればホット)。現在、として単一のWARファイルのみがありますROOT.war。分割により複数のwarファイルが作成され、URLで参照されますdomain-name.com/module_name/some_mappingか? 現在ドキュメントを確認していますが、これはMavenが提供するマルチモジュールで達成したい主な目的であり、これが実現可能かどうかを知りたいと思っています。さらに情報が必要な場合は、お知らせください。 現在、私は次のように春から親POMを使用しています: <parent> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>1.1.3.RELEASE</version> <relativePath /> </parent>


5
成功するとtrue / false vs voidを返し、失敗すると例外をスローする関数
ファイルをアップロードする関数であるAPIを作成しています。ファイルが正しくアップロードされた場合、この関数は何も/ voidを返さず、何らかの問題が発生したときに例外をスローします。 なぜ偽りではなく例外なのか?例外の内部で、失敗の理由(接続なし、ファイル名の欠落、パスワードの誤り、ファイルの説明の欠落など)を指定できるためです。カスタム例外を作成したかった(APIユーザーがすべてのエラーを処理するのに役立つ列挙型を使用)。 これは良い習慣ですか、それともオブジェクトを返す方が良いですか(内部にブール値、オプションのエラーメッセージ、エラーの列挙を含む)?

7
「Set」にはGetメソッドが必要ですか?
このC#クラスを作成しましょう(Javaでもほぼ同じです)。 public class MyClass { public string A {get; set;} public string B {get; set;} public override bool Equals(object obj) { var item = obj as MyClass; if (item == null || this.A == null || item.A == null) { return false; } return this.A.equals(item.A); } public override int GetHashCode() …

4
単体テストとTDDを使用して、主にデータベースCRUD操作に依存するアプリをテストするにはどうすればよいですか?
仕事中、私のプロジェクトの1つは主に外部クライアントから渡されたデータを取得し、データベースに保持することです。JPAを使用するJavaエンタープライズアプリであり、ほとんどのロジックはCRUD操作を中心に展開します。 バグの大部分は、何らかの形でJPAに関係しています。 例1:[保存]ボタンを2回クリックすると、JPAは同じエンティティをデータベースに2回挿入しようとし、主キー違反が発生する場合があります。 例2:データベースからエンティティを取得し、編集して、そのデータを更新しようとします。JPAは、古いインスタンスを更新する代わりに、新しいインスタンスを作成しようとする場合があります。 多くの場合、ソリューションはJPAアノテーションを追加/削除/変更する必要があります。また、DAOロジックの変更に関係する場合もあります。 単体テストとTDDを使用してコードに自信を持たせる方法がわかりません。ユニットテストとTDDの適合性が悪いのか、問題に近づいているのかがわかりません。 単体テストは、実行時にしかこれらの問題を発見できず、問題を再現するためにアプリサーバーに展開する必要があるため、不適切なように見えます。通常、データベースは関与する必要がありますが、これは単体テストの定義の外側にあると考えられます。これらは統合テストです。 TDDは、展開とテストのフィードバックループが非常に遅いため、非常に非生産的であるため、不適切なように思われます。deploy + testフィードバックループには3分以上かかります。これは、作成中のコードに関するテストを具体的に実行した場合にのみ発生します。すべての統合テストを実行するには、30分以上かかります。 この型の外側にはコードがあり、できる限りいつでも単体テストを行っています。しかし、バグの大部分と最大のタイムシンクは、常にJPAまたはデータベースに関係しています。 同様の別の質問がありますが、アドバイスに従えば、コードの最も不安定な部分(JPA)をラップし、それ以外のすべてをテストします。私の質問の文脈では、私は同じ悪い状況にいるでしょう。JPAをラップした後の次のステップは何ですか?IMOその質問は(おそらく)私の質問に答えるためのステップですが、それに対する答えではありません。
22 java  unit-testing  tdd  jpa 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.