ソフトウェア工学

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

3
検証チェック付きの制御フローのスタイル
私はこのようなコードをたくさん書いていることに気づきました。 int myFunction(Person* person) { int personIsValid = !(person==NULL); if (personIsValid) { // do some stuff; might be lengthy int myresult = whatever; return myResult; } else { return -1; } } 特に複数のチェックが関係する場合は、かなり面倒になります。そのような場合、次のような代替スタイルを試しました。 int netWorth(Person* person) { if (Person==NULL) { return -1; } if (!(person->isAlive)) { return -1; } int …

4
メディエーターvsオブザーバー?
誰かが、Observerとの違いについての標準的な答えと、Mediatorあるパターンを他のパターンよりも使用する必要がある場合の要約を私に提供できますか? 私が必要となる状況の種類が不明だObserverとどのような種類が必要になりますMediator

6
「メッセージパッシング」システムと「イベントベース」システムのメリット
私の質問は、いくぶん教育されていない視点から来ています。 「メッセージパッシング」システムと「イベントベース」システムの相対的なメリットは何ですか。 なぜ一方が他方を選択するのですか?彼らの長所と短所は何ですか? 「理論的に」だけでなく、「実際に」も知りたいです。 編集: 特定の問題: 小規模なサービスとして動作するプラグ可能なコンポーネントのシステムを構築したい(それぞれが小さなタスクを実行したり、情報を提供したりする)。 サービスは次のことができます。 1つのサービスの出力が別のサービスへの入力の1つとして機能できるように階層化される 前の文で述べたように、特定の入出力関係がなくても1つのサービスを別のサービスに含めることができるように、包含階層があります。 システムの目標は、別のシステムの低レベルイベントの単一のフローを高レベルの情報と機能に変換し、さらに単一のイベントを提供する他のシステムへのチャネルを提供することです。 これで十分でない場合、詳細を提供できます。 もう少し見て回った後。これとこれはおそらく、より良い私の状況を説明しています。 これは私の状況に適しているようです:http : //akka.io/

11
サーバーは、受け入れるものを「寛容」にし、「障害のある入力を静かに破棄する」必要がありますか?
私は、今ではこの格言が間違いであることに誰もが同意するという印象を受けていました。しかし、私は最近、「寛大な」コメントが137回(今日現在)支持されているこの回答を見ました。 私の意見では、ブラウザが受け入れるものに対する寛大さが、HTMLや他のいくつかのWeb標準が数年前にあった完全な混乱の直接の原因であり、ごく最近その混乱から適切に結晶化し始めました。私はそれを見る方法、あなたが受け入れるものの中に寛大されますこれにつながります。 格言の2番目の部分は、「仕様で要求されていない限り、エラーメッセージを返さずにエラーのある入力を静かに破棄する」ことです。何かが静かに失敗したときに頭を壁にぶつけたプログラマーは、私の言っていることを知っているでしょう。 だから、私はこれについて完全に間違っていますか?私のプログラムは、受け入れるものに寛容で、静かにエラーを飲み込むべきですか?または、これが意味するものを誤って解釈していますか? 元の質問は「プログラム」でしたが、それについてはみんなの意見を取り入れています。プログラムが寛大であることは理にかなっています。しかし、私が本当に意味したのはAPIです。人々ではなく、他のプログラムに公開されるインターフェースです。HTTPはその一例です。プロトコルは、他のプログラムのみが使用するインターフェースです。「If-Modified-Since」のようなヘッダーに入る日付を直接提供することはありません。 したがって、問題は次のとおりです。標準を実装しているサーバーは寛大で、標準で実際に必要なものに加えて、いくつかの他の形式の日付を許可する必要がありますか?「寛大になる」というのは、ヒューマンインターフェースではなく、この状況に当てはまると思われます。 サーバーが寛大な場合、それは全体的な改善のように思えるかもしれませんが、実際には、寛容に依存するクライアント実装につながるため、わずかに異なる方法で寛大な別のサーバーで動作することに失敗すると思います。 だから、いくつかのAPIを公開するサーバーは寛大である必要がありますか、それとも非常に悪い考えですか? 次に、ユーザー入力の緩やかな処理について説明します。YouTrack(バグ追跡ソフトウェア)を検討してください。Markdownを連想させる言語をテキスト入力に使用します。「寛大」であることを除いて。たとえば、書く - foo - bar - baz でない箇条書きリストを作成するための文書化の方法、そしてまだそれが働きました。その結果、内部バグトラッカー全体で多く使用されることになりました。次のバージョンが登場し、この寛大な機能はわずかに異なる動作を開始し、この(非)機能を(誤って)使用したリストの束を壊します。箇条書きリストを作成する文書化された方法は、もちろん機能します。 だから、私のソフトウェアは、それが受け入れるユーザー入力に寛容でなければなりませんか?

6
ヌルポインターとヌルオブジェクトパターン
帰属:これは関連するP.SEの質問から生まれました 私のバックグラウンドはC / C ++ですが、Javaでかなりの仕事をしており、現在C#をコーディングしています。私のCのバックグラウンドのために、渡されたポインターと返されたポインターのチェックは間接的ですが、私はそれが私の視点にバイアスをかけることを認めています。 私は最近、オブジェクトが常に返されるという考え方のNull Object Patternの言及を見ました。通常の場合は、予想されるデータが設定されたオブジェクトを返し、エラーの場合は、nullポインターの代わりに空のオブジェクトを返します。呼び出し元の関数には常にアクセスするオブジェクトがあるため、NULLアクセスメモリ違反を回避するという前提があります。 それでは、Null Object Patternを使用する場合とNullチェックを行う場合の長所と短所は何ですか? NOPを使用すると、よりクリーンな呼び出しコードを見ることができますが、それ以外の場合には発生しない隠れた障害がどこで発生するかを確認することもできます。サイレントミスが野生に逃げるのではなく、開発中にアプリケーションをハードに失敗させます(別名例外)。 Null Object Patternには、nullチェックを実行しないのと同様の問題はありませんか? 私が扱ったオブジェクトの多くは、独自のオブジェクトまたはコンテナを保持しています。メインオブジェクトのすべてのコンテナに独自の空のオブジェクトがあることを保証するために、特別なケースが必要になるようです。ネストの複数の層でこれがwithいように思える。

4
WTFPLの名前を変更する必要がありますか?
GitHubで公開した個人プロジェクトでWTFPLを使用しています。 現在、ライセンスを逐語的に使用していますが、3行目を残してはいけないという疑いがあります。 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> そこに、代わりにサムの代わりに私の名前を使用する必要があります。 しかし、ライセンスはこれについて非常に混乱しています。 WTFPLサイトの半分はWTFPL自体に関するものであるため、著作権表示は、ライセンスを使用しているプロジェクトではなく、ライセンステキスト自体の著作権を参照していると考えました。 ただし、このサイトには次のようにも書かれています。 誰でもこのライセンス文書の逐語的または修正されたコピーをコピーおよび配布することが許可されており、名前が変更されている限り、それを変更することは許可されています。 したがって、名前を「WTFPL」から「WTFPL-Domenic」のような名前に変更する必要がありますか?
27 licensing 

3
WebStormにはRubyMineにはない機能が含まれていますか?
少量のルビーを実行していますが、大量のhtml5 / javascriptを実行しているため、Rubymineの購入を検討しています。 私が取り組んでいる純粋なhtml5 / jsベースのフレームワーク/アプリがたくさんあるので、Webstormを取得するつもりでしたが、WebStorm / PhpStorm / RubymineなどはすべてIDEAフレームワークに基づいており、とにかく、各フレームワークにはWebStormの機能が含まれていました。いくつかの機能はすぐに使用できましたが、プラグインを介して追加できました。 WebStormについて私が興味を持っている主な機能は次のとおりです。 IDEからのJSユニットテスト UI内のJS Lint / Hintカバレッジ DOM / JSリファクタリング/ Intellisense Coffeescriptのサポート SVN / Git統合 FTPとリモート同期(ただし、残りほど重要ではありません) それで、上記を与えられて、Rubymineは上記の機能も提供するでしょうか?多くの重複する機能を備えた2つのIDEを使用するよりも、両方を実行できる1つのIDEを使用する方が望ましいためです。 Webstorm内にのみあり、他のIDEにはない特定の機能はありますか?
27 javascript  ide  ruby 

9
シングルトンパターンの代替
シングルトンパターンに関するさまざまな意見を読みました。一部の人は、すべてのコストで回避する必要があると主張し、他の人は、特定の状況で役立つ可能性があると主張しています。 シングルトンを使用する1つの状況は、特定のクラスAのオブジェクトを作成するためにファクトリー(たとえば、タイプFのオブジェクトf)が必要な場合です。ファクトリーは、いくつかの構成パラメーターを使用して一度作成され、その後、タイプAがインスタンス化されます。したがって、Aをインスタンス化するコードのすべての部分は、シングルトンfをフェッチし、新しいインスタンスを作成します。たとえば、 F& f = F::instance(); boost::shared_ptr<A> a = f.createA(); 一般的な私のシナリオは 最適化の理由(複数のファクトリオブジェクトは必要ありません)または共通の状態を共有するためにクラスのインスタンスが1つだけ必要です(たとえば、ファクトリはAのインスタンスをいくつ作成できるかを知っています) コードのさまざまな場所でFのこのインスタンスfにアクセスする方法が必要です。 このパターンが良いか悪いかについての議論には興味がありませんが、シングルトンの使用を避けたい場合、他にどのようなパターンを使用できますか? 私が持っていたアイデアは、(1)レジストリからファクトリオブジェクトを取得するか、(2)プログラムの起動中のある時点でファクトリを作成し、パラメータとしてファクトリを渡すことでした。 ソリューション(1)では、レジストリ自体がシングルトンであるため、シングルトンを使用しないという問題を工場からレジストリに移行しました。 (2)の場合、ファクトリオブジェクトの元となる初期ソース(オブジェクト)が必要なので、別のシングルトン(ファクトリインスタンスを提供するオブジェクト)に再びフォールバックするのではないかと心配しています。このシングルトンのチェーンをたどると、他のすべてのシングルトン を直接または間接的に管理する1つのシングルトン(アプリケーション全体)に問題を減らすことができます。 この最後のオプション(他のすべての一意のオブジェクトを作成し、他のすべてのシングルトンを適切な場所に注入する1つの初期シングルトンを使用)は、許容できる解決策でしょうか?これは、シングルトンを使用しないことを勧めるときに暗黙的に提案される解決策ですか、それとも他の解決策は何ですか? 編集 私の質問の要点は一部の人によって誤解されていると思うので、ここにいくつかの情報があります。ここで説明するように、シングルトンという言葉 は、(a)単一インスタンスオブジェクトを持つクラスと、(b)そのようなオブジェクトの作成とアクセスに使用されるデザインパターンを示すことができます。 物事を明確にするために、(a)には ユニークオブジェクト、(b)にはシングルトンパターンという用語を使用します。だから、私はシングルトンパターンと依存性注入が何であるかを知っています(最近、私は作業中のコードからシングルトンパターンのインスタンスを削除するためにDIを多用しています)。 私のポイントは、オブジェクトグラフ全体がmainメソッドのスタックにある単一のオブジェクトからインスタンス化されない限り、シングルトンパターンを通じていくつかの一意のオブジェクトに常にアクセスする必要があるということです。 私の質問は、完全なオブジェクトグラフの作成と配線をメインメソッドに依存させること(たとえば、パターン自体を使用しない強力なDIフレームワークを使用すること)が、シングルトンパターンを使用しない唯一のソリューションかどうか です。

3
WADLを使用してRESTful APIを記述する必要がありますか?
適切にRESTfulなアプローチを広範に使用するプロジェクトに着手しようとしています。つまり、HATEOASを使用し、クライアントによる一般的な調査を可能にする方法でリソースを提供します。 クライアントアプリケーションをさまざまな言語で自動的に生成できるように、エンドポイントの説明を確実に提供したいと思います。SOAPベースのWebサービスにはWSDLを使用できること、およびRESTで使用されているHTTP動詞の定義を強化するWSDL2があるようです。しかし、その有用性をめぐって多くの記事が行き来しています。 したがって、外部コードジェネレーターがWebアプリケーション用のクライアントを迅速に構築できるようにWADLを使用する必要がありますか、それとも期待されるより良い標準がありますか?


7
ArgumentNullExceptionのスローはどのように役立ちますか?
メソッドがあるとしましょう: public void DoSomething(ISomeInterface someObject) { if(someObject == null) throw new ArgumentNullException("someObject"); someObject.DoThisOrThat(); } を投げることArgumentNullExceptionは「正しい」と信じるように訓練されていますが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」エラーはバグがあることを意味します。 どうして? 参照をキャッシュsomeObjectして後で使用する場合は、渡されたときに無効性をチェックし、早期に失敗する方が良いことを知っています。ただし、次の行でそれを間接参照している場合、なぜチェックを行うことになっていますか?何らかの方法で例外をスローします。 編集: それはちょうど私に起こりました...逆参照されたnullの恐怖は、あなたをチェックしないC ++のような言語に由来しますか?
27 c#  null 

7
気分を害することなくどのようにコーディングしますか?
つまり、何年も取り組んでいて、それに精通している開発者と共有するコードベースでどのように開発しますか? 私は誰かの足の指を踏みつけたくありませんが、コードのホワイトスペースの方法やSVNへのチェックインの頻度(あまりにも頻繁に)について、私は物事のやり方についてそれほど微妙な不満はありません。そのため、これらのことは簡単に変更できますが、一般的にはより良いチーム開発者になりたいです。 質問する以外に何をすべきかはわかりませんが、おそらく皆さんは私が実践できる考えを持っているかもしれません。 更新 話すべきスタイルガイドはありません。コードベースの共有に慣れていないだけです。誰もが独自の小さなサイロ化されたコード世界を持っています。 これはperlショップですが、これらはどの言語にも当てはまると思います 更新2 後にCEOになったCTOは完全な誇大妄想であり、これらの不満の主な原因でした。Macを使用しているか、Emacsを使用しているか、2つではなく4つのタブスペースを使用しているか、特定の方法で服を着ているかどうか、彼が好きなことを正確に行わなかった場合、あなたは劣っていました。それは私が修正しようとした恐ろしい状況でしたが、私にとって唯一の正しい答えは去ることでした。 これは職場でのいじめの一例であると確信しており、その後、職場環境での微妙ないじめや不適切な行動が何であるかをよりよく認識しています。 このような状況への回答を探している開発者には、すぐに離れてください。悪いチーム状況から抜け出すためにチームワークすることはできません。
27 teamwork 

14
プログラミング言語を組み合わせることは可能ですか?
私はしばらくプログラミングをしており、いくつかの初歩的なプログラムを書きました。そして、学び続けたいと思っています。次は何を学べばいいのか分からないところまで来たので、私自身の好奇心について質問したいと思います。 簡単に言えば、質問は、複数のプログラミング言語を1つの結果に結合できるかどうかです。たとえば、このコードは可能ですか? <html> cout << "Hello world!"; </html> または import java.util.Scanner; cout << "Insert a number from 1 to 10"; Scanner n = new Scanner(System.in); System.out.println("The value you entered was" +n.newLine()); これはばかげた質問のように感じますが、それが可能かどうかわからないので、私はそれを尋ねています。で、この私の上記の例が不可能な場合は、質問私は、彼はhtmlコードにPythonコードを使用している気づき、彼が何をしましたか?

6
コメントを書くための初心者向けガイド?
開発者の発芽を目的とした、コードコメントの作成に関する決定的なガイドはありますか? 理想的には、コメントをいつ使用するべきか(使用すべきではない)、およびコメントに何を含めるべきかについて説明します。 この答え: 何をしているのかをコメントしないでください。 WHATは、それをサポートする変数名を適切に選択した、クリーンで読みやすいシンプルなコードによって処理されます。コメントは、コード自体では表示できない(または表示が難しい)コードの上位レベルの構造を示します。 近づきますが、経験の浅いプログラマーにとっては少し簡潔です(いくつかの例とコーナーケースでの拡張は素晴らしいと思います)。 更新:ここでの回答に加えて、別の質問に対するこの回答は非常に関連性が高いと思います。

2
DDD-アグリゲートルートのリポジトリはアグリゲートの保存を処理しますか?
既存のアプリケーションのグリーンフィールドモジュールにDDDのようなアプローチを使用しています。アーキテクチャが原因で100%DDDではありませんが、いくつかのDDDの概念を使用しようとしています。:2つのエンティティからなる-私は(私はまだDDDについて学んだ私はそれが適切な用語だと思う)有界コンテキストを持っているConversationとMessage。メッセージは会話なしでは存在せず、システム内のすべてのメッセージは会話の一部であるため、会話がルートです。 私が持っているConversationRepository、データベース内の会話を見つける(それは本当に多くのゲートウェイのように、私は用語「リポジトリ」を使用しますが)クラスを。会話を見つけると、(ファクトリを介して)その会話のメッセージのリストも作成します(プロパティとして公開されます)。これはMessageRepository、会話が取得されたときにのみ存在するため、本格的なクラスは必要ないと思われるため、物事を処理する正しい方法のようです。 ただし、メッセージの保存に関しては、メッセージの集約ルートであるため、これはConversationRepositoryの責任ですか?つまり、ConversationRepositoryで、たとえばAddMessageMessageをパラメーターとして受け取り、データベースに保存するというメソッドが必要ですか?または、メッセージを検索/保存するための別のリポジトリを用意する必要がありますか?論理的なことは、エンティティごとに1つのリポジトリのようですが、「コンテキストごとに1つのリポジトリ」も聞いたことがあります。

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