ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

9
変数をnullチェックするよりも優先的にオプションを使用するのはなぜですか?
2つのコード例を取り上げます。 if(optional.isPresent()) { //do your thing } if(variable != null) { //do your thing } 私の知る限り、最も明らかな違いは、オプションでは追加のオブジェクトを作成する必要があるということです。 ただし、多くの人がオプションを急速に採用し始めています。オプションを使用する場合とnullチェックを使用する場合の利点は何ですか?
25 java  java8 

6
APIリクエストはMVCのどこに配置すればよいですか?
MVCパターンを使用してWebアプリケーションを構築しています。この種のアーキテクチャに従うと、データベースとのやり取りに使用されるすべてのメソッドがモデルに実装されていることがわかります。 しかし、Web上で他の人に公開されているサービスを呼び出さなければならない場合はどうなりますか?たとえば、ページのフォロワーをすべて取得するためにFacebook APIにアクセスしたいので、これらのメソッドをどこに配置しますか? このモジュールはプレゼンテーション専用であり、コントローラーを使用してデータを取得することはできませんが、モデルは通常データベースとの対話専用であるため、ビューは明らかに良いアイデアではありません。 それで、それについてのヒントを教えていただけますか?そして、MVCアーキテクチャについて間違いを犯していないかどうか教えてください。
25 mvc  api 

2
Githubプロセスでのプロジェクトの分岐
Githubには、私が主に好きで使いたいプロジェクトがあります。私が望んでいる/必要なものに意味をなさない、異なる方法で/削除したいことがいくつかあります。また、いくつかのことも追加したいと思います。 私はそれを理解しているので、プロジェクトを分岐する必要があり、必要な変更を加えて、分岐に戻すことができます。そこから元のプロジェクトからの変更をフォークに時々取り込みたいので、最新のバグ修正/機能を入手します。 私はそれがどのように動作するはずだと思うかについて、オフベースですか?元のプロジェクトからの変更をどのように取り入れますか?

8
IFステートメントでの複数の条件の単体テスト
次のようなコードの塊があります。 function bool PassesBusinessRules() { bool meetsBusinessRules = false; if (PassesBusinessRule1 && PassesBusinessRule2 && PassesBusinessRule3) { meetsBusinessRules= true; } return meetsBusinessRules; } この特定の機能には、4つのユニットテストがあるはずです。ifステートメントの各条件をテストし、falseを返すことを確認するには3つ。そして、関数がtrueを返すことを確認する別のテスト。 質問:代わりに、実際には10個の単体テストが必要ですか?考えられる各障害パスをチェックする9つ。IE: 偽偽偽 False False True False True False など、可能な組み合わせごとに。 それはやり過ぎだと思いますが、私のチームの他のメンバーの一部はそうではありません。私が見る方法は、BusinessRule1が失敗した場合、常にfalseを返す必要があり、最初にチェックされたか最後にチェックされたかは関係ありません。

5
x86アセンブリに関する正規の本はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 アセンブリに関する本はたくさんあります。ただし、彼らは通常、MIPSやARMなど、気にしないISAを扱います。これらのアーキテクチャは扱いません。私がそれらを学ぼうとする理由はありません。 しかし、x86アセンブリブックは...存在しないようです。 たとえば、Windows Portable Executableファイルを生成するトイコンパイラをビルドしようとしているとします。 ベストプラクティス、設計方法論、およびx86アセンブリに関するその他の有用な情報を説明するための事実上の標準である本はありますか?その本はそれを特別なものにしていますか?
25 learning  books  assembly  x86 

4
オープン/クローズド原則を明確にする
私がそれを説明したように、オープン/クローズされた原則は、一度書かれたコードは修正されるべきではないと述べています(バグ修正を除く)。しかし、ビジネスルールが変更された場合、それらの変更を実装するコードを変更すべきではありませんか?私はそれが私には意味をなさないので、私は原理がどのようにかについて何かを理解していないと思う。

7
これらの本を読む正しい順序は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私はジュニアC#開発者で、自宅で学び、今では最初の仕事を得ました:) これらの本を買いたいです。しかし、これらの本を読む正しい順序は何ですか? 完全なコード:ソフトウェア構築の実践的なハンドブック Clean Code:A Handbook of Agile Software Craftsmanship 実用的なプログラマー
25 c#  learning  books 

5
アルゴリズムの「エッジ」ケースをどのように識別しますか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 基本的に、最悪または最良のケースである可能性のあるもの、およびそれらを取得する前に発生する可能性のある他の「エッジ」ケースをどのようにして見つけるのですか?


1
定数クラスを作成するためのベストプラクティスを提案する
この質問は、Software Engineering Stack Exchangeで回答できるため、Code Review Stack Exchangeから移行されました。 5年前に移行され ました。 定数クラスの宣言については、私のチームメンバーの間で議論があります。定数変数を以下のような別のクラスに移動しています。 public class Constants { public const string StateId = "ST"; public const string CountryId = "CI"; } 私のチームメンバーの何人かは、オーバーライドオプションを回避するためにクラスを封印済みとして宣言することを提案しました。また、定数クラスのインスタンス作成を回避するために静的としてマークすることを提案する人もいます。 ただし、将来の必要に応じて読み取り専用変数を初期化するのに役立つため、静的コンストラクターでSealedとして使用することを好みます。これに関するアドバイスをお願いします。
25 c#  class 

8
API要求/応答で空の文字列、nullを使用するか、空のプロパティを削除します
スキーマレスJSON形式のように、APIを介してオブジェクトを転送する場合、存在しない文字列プロパティを返す理想的な方法は何ですか?下記のリンクの例のように、これを行うためのさまざまな方法があることを知っています。 nullを避ける nullを返す 空のプロパティを削除 私は過去にnullを使用したことがあると確信していますが、nullを使用する正当な理由はありません。データベースを処理するときにnullを使用するのは簡単なようです。しかし、データベースは実装の詳細のようで、APIの反対側の関係者には関係ありません。たとえば、おそらく値を持つプロパティ(null以外)のみを保存するスキーマレスデータストアを使用します。 コードの観点から見ると、文字列関数を1つの型string(null以外)のみで動作するように制限すると、証明が容易になります。nullを避けることもOptionオブジェクトを持つ理由です。したがって、要求/応答を生成するコードがnullを使用しない場合、APIの反対側のコードもnullの使用を強制されないでしょう。 nullの使用を避ける簡単な方法として、空の文字列を使用するというアイデアが好きです。空の文字列に対してnullを使用することについて聞いた1つの議論は、空の文字列はプロパティが存在することを意味するということです。私は違いを理解していますが、それが単なる実装の詳細なのか、nullまたは空の文字列を使用して実際の違いが生じるのかどうかも疑問に思います。また、空の文字列は空の配列に似ているのだろうかと思います。 それでは、これらの懸念に対処する最善の方法はどれですか?転送されるオブジェクトの形式(スキーマ/スキーマレス)に依存しますか?

9
地図で広告掲載順序の問題を伝える方法は?
データベースから一連のタプルを取得して、マップに入れています。データベースクエリは高価です。 マップ内の要素の明らかな自然な順序付けはありませんが、それでも挿入順序は重要です。マップの並べ替えは重い操作になるため、クエリ結果が既に希望どおりに並べ替えられている場合は、それを避ける必要があります。したがって、クエリ結果をに保存LinkedHashMapし、DAOメソッドからマップを返します。 public LinkedHashMap<Key, Value> fetchData() processDataマップ上で何らかの処理を行うメソッドがあります。いくつかの値を変更し、いくつかの新しいキー/値を追加します。次のように定義されます public void processData(LinkedHashMap<Key, Value> data) {...} ただし、いくつかのリンター(ソナーなど)は、「データ」のタイプは「LinkedHashMap」(squid S1319)の実装ではなく、「Map」などのインターフェースであるべきだと文句を言います。 だから基本的には私が持っているべきだと言っている public void processData(Map<Key, Value> data) {...} しかし、メソッドのシグネチャには、マップの順序が重要であると言うようにしたい-それはアルゴリズムにとって重要であるprocessData-したがって、私のメソッドはランダムなマップだけに渡されない。 を使用したくないのはSortedMap、(のjavadocからjava.util.SortedMap)「キーの自然な順序に従って、またはソートされたマップ作成時に通常提供されるComparatorによって順序付けられる」ためです。 私のキーには自然な順序がありません。コンパレータを作成して何もしないのは冗長です。 そして、putキーの重複などを回避するために活用するために、それがマップであることを依然として望んでdataいますList<Map.Entry<Key, Value>>。 それで、私のメソッドはすでにソートされたマップを必要としていると言うにはどうすればいいですか 残念なことに、java.util.LinkedMapインターフェースはありません。そうでなければ、私はそれを使用していました。
24 java  code-quality  map 

6
親ポインターへの循環参照はいつ受け入れられますか?
このStack Overflowの質問は、ポインターを介して親を参照している子に関するものです。 最初は、デザインがひどいアイデアであるというコメントは非常に重要でした。 私はこれがおそらく最善のアイデアではないことを理解しています。一般的な経験則から、「これをしないでください!」 ただし、このようなことを行う必要がある場合、どのような条件が存在するのか疑問に思います。ここでのこの質問と関連する回答/コメントは、グラフでもこのようなことをしないことを示唆しています。
24 design 

5
Javaでは、プライベートヘルパーはパブリックメソッドの上または下に移動する必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 同僚と私は、Javaクラスでのメソッドの順序に関して反対のプラクティスを持っていることに気付きました。私たちの1人は、主要なパブリックメソッドでクラスを開始し、その後、プライベートヘルパーをすべて配置します。もう一方は、パブリックメソッドが最後にあることを確認します。 明らかに、これは単なるスタイルの問題であり、正しい答えはありません。しかし、この問題が単にYooks対Zooksの戦いであり、どちらか一方を勝手に選ぶだけであると判断する前に、おそらく標準Javaスタイルガイドの推奨事項があるのか​​、あるアプローチが他のアプローチより優れている実用的な理由があるのではないかと思っていました。

3
単体テストでの循環的な依存関係との闘い
私はTDDを使って、Bit Vectorのような単純なものを開発することで、TDDを実践しようとしています。私はたまたまSwiftを使用していますが、これは言語に依存しない質問です。 My BitVectorは、struct単一のを格納し、そのUInt64上にコレクションのように扱うことができるAPIを提供します。詳細はさほど重要ではありませんが、非常に簡単です。上位57ビットはストレージビットであり、下位6ビットは「カウント」ビットであり、格納された値を実際に格納するストレージビットの数を示します。 これまでのところ、非常にシンプルな機能がいくつかあります。 空のビットベクトルを構築する初期化子 countタイプのプロパティInt isEmptyタイプのプロパティBool 等号演算子(==)。注意:これは、JavaのObject.equals()ような参照等価演算子ではなく、==Javaのような値等価演算子です。 私は周期的な依存関係の束に直面しています: イニシャライザをテストする単体テストでは、新しく構築されたを確認する必要がありBitVectorます。次の3つの方法のいずれかで実行できます。 チェック bv.count == 0 チェック bv.isEmpty == true それを確認します bv == knownEmptyBitVector 方法1は依存count、方法2は依存isEmpty(それ自体が依存しているcountため、使用する意味はありません)、方法3は依存してい==ます。いずれにしても、初期化子を単独でテストすることはできません。 のテストはcount何かを操作する必要があり、必然的に私のイニシャライザーをテストします の実装は、にisEmpty依存していますcount の実装はに==依存していcountます。 BitVector(aとしてUInt64)既存のビットパターンからを構築するプライベートAPIを導入することにより、この問題を部分的に解決することができました。これにより、他のイニシャライザーをテストせずに値を初期化できたので、「ブートストラップ」することができました。 ユニットテストが本当にユニットテストであるためには、たくさんのハックをしていることに気付きます。 この種の問題をどのように正確に回避しますか?

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