ソフトウェア工学

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

6
メソッド名と関数名の「A」、「an」、「the」:あなたはどう思いますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私たちの多くは、このようなメソッド名を見たことがあります。 UploadTheFileToTheServerPlease CreateATemporaryFile WriteTheRecordToTheDatabase ResetTheSystemClock つまり、文法的にも正しい英語の文であり、純粋に散文のように読めるように余分な単語を含むメソッド名。個人的には、私はそのような「リテラル」メソッド名の大ファンではなく、できる限り明確でありながら、簡潔であることを好みます。私にとって、 "a"、 "an"、および "the"のような単語は、メソッド名では単純に不自然に見えるだけで、有用なものを追加することなく、メソッド名を不必要に長くします。前の例では、次のメソッド名を使用します。 UploadFileToServer CreateTemporaryFile WriteOutRecord ResetSystemClock 私の経験では、これはより長い名前を書き出す他のアプローチよりもはるかに一般的ですが、私は両方のスタイルを見て、これら2つのアプローチに対する他の人々の考えを知りたいと思っていました。 だから、あなたは「散文のように読めるメソッド名」キャンプか「悪い意味の外国語から英語への翻訳のように大声で読むメソッド名」キャンプにいますか?

8
いつパフォーマンスを気にする必要がありますか?
JavaのIRCチャンネル、SO、およびその他の場所で最も長い間、「コードの見た目とその読みやすさ/理解しやすさ、そして絶対に必要な場合は後でパフォーマンスについて心配する」という行に沿って何かを言われました。そのため、私は長い間、小さなデスクトップまたはWebアプリのパフォーマンスについてOCDを実際に使ったことがなく、明らかに非効率なものを削除していました。 ほとんどの応答は「スケーラビリティについてはどうですか?」です。これは正当なポイントですが、アプリが10,000行のファイルを解析するためだけに構築されている場合、1,000,000行のファイルを押し込む人のごく一部のコードを混乱させるべきですか? 私の主な質問は、非常に速く物事を行うが、アップグレードの可能な方法を破壊し、コードを過度に困難にし、とにかく次の開発者によって書き直しがちな巨大で複雑な獣のために、タスクを行う簡単だがやや非効率的な方法を交換すべきときですか?

5
プログラムのコメントにQ&Aサイトへのリンクを入れても大丈夫ですか?
かなりのコードベースでは、次のようなコメントを見ることができます。 // Workaround for defect 'xxx', (See bug 1434594 on Sun's bugparade) いくつか質問がありますが、それらはすべて関連しています。 プログラムのコメントにSO質問へのリンクを入れても大丈夫ですか? // We're now mapping from the "sorted-on column" to original indices. // // There's apparently no easy way to do this in Java, so we're // re-inventing a wheel. // // (see why here, in SO …
16 comments 

8
プログラミングの生産性を毎日どのように追跡できますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 前日よりも生産性が高いまたは低いソフトウェアを開発していることをどのように追跡できますか?

10
関数のオーバーロード?はいまたはいいえ[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私は静的に強く型付けされたコンパイル済み言語を開発しており、言語の機能として関数のオーバーロードを含めるかどうかの考えを再検討しています。主にC[++|#]バックグラウンドから来て、私は少し偏っていることに気づきました。 最も説得力のある引数何であるためと反対言語でのオーバーロード機能を含めては? 編集:反対意見を持っている人は誰もいませんか? Bertrand Meyer(1985/1986年にエッフェルの作成者)は、これをオーバーロードするメソッドを呼び出します:(ソース) オブジェクト指向言語のセマンティックパワーには何ももたらさないが、読みやすさを妨げ、全員のタスクを複雑にするバニティメカニズム 今、それらは抜本的な一般化ですが、彼は賢い人ですので、必要に応じてそれらをバックアップできると言っても安全だと思います。実際、ブラッドエイブラムス(CLSv1開発者の1人)は、.NETがメソッドのオーバーロードをサポートしてはならないと確信していました。(ソース)それはいくつかの強力なものです。誰もが彼の考えに光を当てることができ、彼の視点が25年後もまだ正当化されるかどうか?

8
大規模なプログラミングチームで働くのはどうですか?
私はいつも小さなプログラミングチームで働くことができて幸運だと感じてきました。私が取り組んできたのは、11人のプログラマーだと思います。何百人もの開発者がいるプロジェクトに取り組むのはどうですか?何千?スケールとは何ですか? 編集:すべての応答をありがとう!ポジティブなものはほとんどないようです: 巨大なコードベースで作業可能 より良い社内キャリア開発 虐待的な管理に対する従業員の保護(これは、大規模な+ veよりも小規模な-veの方が多い) 大規模なチームに他の利点はありますか?


16
ソフトウェア開発はエンジニアリングの分野ですか?
ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 ソフトウェア開発はエンジニアリングと見なされますか?いいえの場合、エンジニアリング分野としての資格を得るために欠けているものは何ですか?これに関連するのは、プログラマとソフトウェアエンジニアの違いに関するStack Overflowの質問です。 Carnigie Mellon大学には、CMMI標準を規定および維持するSoftware Engineering Instituteがあります。これは、開発をエンジニアリングに変えるものですか?

5
MVC:コントローラーは単一責任原則を破りますか?
単一責任原則は、「クラスには変更の理由が1つあるべきだ」と述べています。 MVCパターンでは、コントローラーの仕事は、ビューとモデルの間を仲介することです。GUIでユーザーが行ったアクションをレポートするためのビューのインターフェースを提供し(ビューの呼び出しを許可するcontroller.specificButtonPressed()など)、データを操作したり操作を呼び出すためにモデルの適切なメソッドを呼び出すことができます(例model.doSomething()) 。 この意味は: ビューにユーザーアクションを報告するための適切なインターフェイスを提供するために、コントローラーはGUIについて知る必要があります。 また、モデルの適切なメソッドを呼び出すことができるように、モデルのロジックについて知る必要があります。 つまり、GUIの変更とビジネスロジックの変更という2つの理由があります。 GUIが変更された場合(新しいボタンが追加された場合など)、コントローラーは、ユーザーがこのボタンを押したことをビューが報告できるように新しいメソッドを追加する必要がある場合があります。 また、モデルのビジネスロジックが変更された場合、モデルの正しいメソッドを呼び出すためにコントローラーを変更する必要があります。 そのため、Controllerには2つの変更可能な理由があります。SRPを壊しますか?

6
高品質のコードを促進および奨励するにはどうすればよいですか?
私は4人のチームの小さなアウトソーシング会社でiOS開発者として働いています。私と私と他の2人の開発者が入社する数年前に開始したプロジェクトに取り組んでいます。それ以前は、プロジェクトはほとんど1人で行われていました。 私がプロジェクトに取り組み始めたとき、それは完全な混乱でした。多くのコードの繰り返しがありました。同じ500のコードが、わずかなバリエーションで20の異なるファイルに対応しているのを見ました。さらに、それは正確に組織化されていませんでした:すべてのUI作成コードは、View Controllerでロジックと一緒に混合されました。 あちこちでリファクタリング、コードの冗長部分の排除、プロジェクトのファイル構造の改善などに最善を尽くしました。前の開発者はこれらすべてを本当に気にしていないか、経験がないと感じました。数か月の間、私は一人でかなり大きな機能に取り組んだことがありました。この機能の性質上、アプリ全体で多くのコードに触れる必要があったため、いくつかの改善を試みました。 他の開発者がプロ​​ジェクトに参加したとき、彼らは異なるコーディングスタイル(時には完全に異なるスタイル)を使用し、プロパティアクセサーなどの最新の言語機能を使用しないことに気付きました(これはObjective-Cの比較的新しい機能です)。フレームワークの類似の機能を使用する代わりに、独自の自転車を発明したり、他のプログラミング言語や学習したパターンをコードベースに転送したりすることもありました。多くの場合、悪い英語のためにメソッドや変数に適切な名前を付けることができません(Objective-Cは長い名前を作成する言語です)。 IDE用でない場合は、インデントや書式設定を一切行わずにすべてのコードを記述すると思うことがあります。 基本的に、私は彼らが書いたコードが嫌いです。フォーマット/構成が不適切で、プロジェクトの他の部分とは根本的に異なる場合があります。彼らがスパゲッティを私の作品に追加すると、とても気分が悪くなり、仕事の気分や生産性に影響します。 学習することや気にしないことはますます難しくなっているように感じます。彼らは彼らから求められていることをして、家に帰るだけです。私は機会があったときに彼らにいくつかのヒントを与えようとしました(例:彼らのPRにコメントしたり、GitHubでコミットします)。私はかつて、既存のコードの大部分のコーディングスタイルとフォーマットに従うようにきちんと要求しました(残念ながら、正式なコーディングスタイルのドキュメントはありません)。しかし、うまくいきませんでした... 「悪い企業文化」や「経験の浅い卒業生」などに焦点を合わせずにこの状況に対処し、実際に状況を改善し始めるにはどうすればよいでしょうか。


3
API Gateway(REST)+イベント駆動型マイクロサービス
API Gatewayパターンに従ってREST APIを介して機能を公開するマイクロサービスがたくさんあります。これらのマイクロサービスはSpring Bootアプリケーションなので、Spring AMQPを使用して、これらのマイクロサービス間でRPCスタイルの同期通信を実現しています。これまでのところ物事は順調に進んでいます。ただし、イベント駆動型のマイクロサービスアーキテクチャについて詳しく読んで、Spring Cloud Streamなどのプロジェクトを見ると、RPC同期アプローチで間違った方法で物事をしている可能性があると確信するようになります(特に、これをスケーリングする必要があるため)クライアントアプリケーションからの1秒あたり数百または数千のリクエストに応答するため)。 イベント駆動型アーキテクチャの背後にあるポイントを理解しています。私がよく理解していないのは、すべての要求に対する応答を期待するモデル(REST)の後ろに座っているときに、そのようなパターンを実際に使用する方法です。たとえば、APIゲートウェイをマイクロサービスとして使用し、ユーザーを保存および管理する別のマイクロサービスがあるGET /users/1場合、純粋にイベント駆動型のようにモデル化するにはどうすればよいですか?

4
ASP.NET Web APIソリューションでAngularアプリを配置する場所は?
私はグリーンフィールドアプリを開始しています。ASP.NET(4.6)とAngular 2を使用したいと思います。バックエンドについては、Visual Studioでプロジェクトを作成しましたが、Angularアプリをどこに配置するのか迷っています。私は本当にフロントエンドにnpmとnode-toolsを使用したいのですが、最終的には同じAzure App Serviceインスタンスでホストされ、Angularアプリdomain.com/とその下のapi domain.com/api/などがあります。 Visual Studioでアプリを分離するにはどうすればよいですか?Angularアプリは独自のプロジェクトに含めるべきですか?APIと同じプロジェクトにAngularアプリを使用する必要がありますか?nugetや他のVSツールを使いたくない場合でも?(フロントエンドの場合、VSは多かれ少なかれ見栄えのするコードエディターになります)。この組み合わせのベストプラクティスは見つかりませんでした。

11
IllegalStateExceptionまたはサイレントメソッド実行の方が良いですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 閉じた3年前。 play()メソッドとstop()メソッドを持つMediaPlayerクラスがあるとします。playメソッドが以前に呼び出されていない場合にstopメソッドを実装するときに使用する最適な戦略は何ですか。2つのオプションがあります。プレーヤーが適切な状態にないために例外をスローするか、stopメソッドの呼び出しを静かに無視します。 ある状況でメソッドが呼び出されることは想定されていないが、その実行がプログラム全般に害を及ぼさない場合の一般的なルールは何でしょうか?

3
DDDとCRQSを使用する場合、コマンドごとにイベントを1つだけにする必要がありますか?
構成より規約を使用してdddアプリケーションを設計する方法を探しています。 集約「クライアント」に「FillProfile」と定義されたコマンドがあるとします。論理的に「ProfileFilled」イベントを発生させます。 コマンドがイベントよりも多く発生する場合、またはコマンドが何らかのロジックに基づいて異なるイベントを発生する場合がありますか?または、これは常に1対1の関係です(1つのコマンドは常に何も発生させないか、特定のタイプの単一のイベントを発生させます)。 これが事実である場合、コマンドが常に同じイベントを発生させるため、その事実に基づいてコンベンションシステムを構築できるため、これを求めています。「RaiseEvent」が「EventRaised」になることを知っています...

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