ソフトウェア工学

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

2
サブパッケージで定義されたインターフェースの実装はアンチパターンですか?
私が以下を持っているとしましょう: package me.my.pkg; public interface Something { /* ... couple of methods go here ... */ } そして: package me.my; import me.my.pkg.Something; public class SomeClass implements Something { /* ... implementation of Something goes here ... */ /* ... some more method implementations go here too ... */ } つまり、インターフェースを実装するクラスは、実装するインターフェースよりもパッケージ階層のルートの近くにありますが、どちらも同じパッケージ階層に属しています。 …

7
インスタンスを1つだけ持つクラスを作成するのは悪い考えですか?
一度だけインスタンス化されるクラスを作成するのは悪いコーディングの実践/設計ですか? 私はいくつかの変数と関数をクラスの下でグループ化して「見栄え」を良くするために(より良い説明がないため)いくつかの変数と関数を持っていますが、それらは単にグローバル変数とグローバル関数にすることができます。 (ところで、私はJavaScript、AngularJS、Express、MongoDBを使用しています。)

1
Pythonでプライベートメソッドを使用する場合
私はクラスを持っていますが、その中のすべてのメソッドはプライベートでなければなりません(フォーム__init__とは別__str__です)。すべてのメソッドを二重下線で表す必要がありますか、それとも悪い習慣と見なされますか?
9 python  class 


7
resxファイルに代わるものは何ですか
私はWindowsアプリケーションを開発していて、ラベル、ラジオボタン、ボタン、チェックボックス、グリッドの列ヘッダーのすべてのテキストを1か所に保存したいと考えています。クラスファイル、xmlファイル、データベーステーブル、リソースファイルを使用してみました。 クラスファイルがこれらすべてのテキストを保存するための最良の方法であることがわかりましたが、別の方法があることを知りたいですか?クラスファイルを使用している場合、テキストが変更された場合はプロジェクトを再コンパイルする必要があります。 リソースファイルは、大量のデータに対して適切に機能しますか?辞書や変数へのデータの保存はどうですか?

1
サービスバス上のメッセージの図解
複数のアプリケーションがサービスバスを介して通信する方法を明確に示す方法を探しています。私がこれまでに思いついた最高のものはシーケンス図ですが、私は本当にそれが好きではありません。シーケンス図は必然的にある種のシーケンスに関連しますが、それは私が本当に望んでいることではありません。さらに、すべてのサービスがサービスバスと通信し、シーケンス図が各サービスを別々の列に配置するため、サービスの数が増えると、矢印が重なってしまいます。 例えば、与えられた4つのサービスFOO、BAR、BAZ、とQUX: FOOタイプpublishおよびregenのメッセージを公開します。 BARタイプrequeueのメッセージをパブリッシュします。 BAZタイプがpublish、regen、およびrequeueのメッセージをサブスクライブし、タイプがtransmitのメッセージをパブリッシュします。 QUXタイプが送信のメッセージをサブスクライブします。 どのサービスでも、いつでもどのメッセージタイプでも公開できます(暗黙のシーケンスはありません)。 この情報を明確かつ明確に表すには、どのような図を使用する必要がありますか? これが私がこれまでに思いついた最高のものです:

5
開発サーバーとローカル開発
私がこれまでに取り組んだ2つのプロジェクトでは、チームは開発サーバーよりもローカル開発環境を好みます。 あるプロジェクトリーダーは、インターネット接続を必要としないため、ローカルの方が優れていると述べました。しかし、これは開発時に想定されているようです。 通常どちらが良いですか?

3
関数型プログラミングで条件付きブランチを取り除くにはどうすればよいですか?
実行時間の長いswitchケースまたはif-else-if構文は、適用可能な場合はどこでも、ポリモーフィズムを使用してOOPで回避されます。 値を突き合わせて分岐する代わりに、分岐はクラスレベル自体で行われます。 関数型プログラミングのパラダイム、特にClojureで同様のアプローチをどのように適用できますか?

1
オブジェクト指向コードを機能コードにリファクタリングするために使用できるいくつかのテクニックは何ですか?
JavaScriptとHTML5キャンバスを使用してゲームの一部を開発するのに約20〜40時間費やしました。私が始めたとき、私は何をしているのか全く分かりませんでした。したがって、これは概念実証として始まり、現在は順調に進んでいますが、自動テストはありません。ゲームは複雑になり始めており、自動化されたテストの恩恵を受けることができますが、コードがグローバル状態の変化に依存しているため、実行するのは難しいようです。 JavaScript用の関数型プログラミングライブラリであるUnderscore.jsを使用して、すべてをリファクタリングしたいと思います。私の一部は、関数型プログラミングスタイルとテストを使用して、ゼロから始めるべきだと思っています。しかし、命令型コードを宣言型コードにリファクタリングすることは、より優れた学習体験であり、現在の機能の状態に到達するためのより安全な方法になると思います。 問題は、コードを最終的にどのように見せたいかはわかっていますが、現在のコードをそれに変換する方法がわかりません。私はここの何人かの人々がリファクタリングの本とレガシーコードで効果的に働くことのいくつかのヒントを私に与えることを望んでいます。 たとえば、最初のステップとして、私はグローバルステートの「禁止」について考えています。グローバル変数を使用するすべての関数を取り、代わりにパラメーターとして渡します。 次のステップは、ミューテーションを「禁止」し、常に新しいオブジェクトを返すことです。 任意のアドバイスをいただければ幸いです。これまでにOOコードを取得して、Functionalコードにリファクタリングしたことがありません。

2
別のアプリケーションのGUI /機能を「コピー」できますか
私は、同様の目的を果たす別のアプリケーションに大きく基づいているアプリを作成しています。実際に売るつもりはありませんが、売っても合法かどうか迷っています。 私は他のアプリケーションからグラフィックスを借用していませんが、非常によく似た配色、実質的に同じ機能(いくつかを追加しましたが、それほど重要ではありません)、および非常によく似たインターフェイスレイアウトがあります。明らかに、私はコードを借用していません(それはObjective-Cで書かれていて、Javaで書かれた鉱山です)。 繰り返しますが、実際には販売するつもりはありません。仮説で疑問に思っていました。それが著作権で保護されているコードだけなのか、それとも実際にデザインされたのかはわかりません。

1
「通常の順序」と「名前による呼び出し」は同じものですか?
私は「コンピュータプログラムの構造と解釈」という本を研究しており、セクション1.1.5手続き適用の代替モデルでは、筆者は通常の順序と適用順序の概念を説明しています。 今すぐ、私はコースを取っていコーセラが呼ばれるスカラ座での関数プログラミングの原則をと(本が先に引用してずっと彼もちろんベース)教授マーティン・オーダーズキーが説明の名の下に同じ概念コール名ずつとcall-値渡し。 彼のコースでは、教授Odersky著は、私は私の図書館の本に相談して置換モデルは、ラムダ計算に基づいていると言う関数型プログラミングもののラムダ計算に入門をし、22ページに、著者はApplicativeのため、通常の注文として用語を定義し。興味深いことに、彼の定義では、通常の順序はAlgolの名前による呼び出しと同様に、適用順序はPascalの値による呼び出しと同様であると述べています。 彼の説明で「に似ている」という言葉の使用は、私を疑わせたものです。したがって、私の質問: これら2つの用語は同等ですか、それとも微妙な違いがありますか? 意味を間違える危険を冒すことなく、どちらか一方を交換して使用できますか? 同じことを指すために異なる用語の存在を正当化する理由について、あなたが知っている理由はありますか?

5
レガシープロジェクトで警告に対処する方法
膨大な数の警告を生成するC ++プロジェクトに取り組んでいます。ほとんどの警告は、コードの作成後に表示されました。 当初、プロジェクトはVisual C ++ 8を使用し、間もなく9に切り替えましたが、生成された警告にほとんど違いがありません。警告は修正されるか沈黙されたので、そのとき警告はありませんでした。 次に、64ビットターゲットが追加されました。これは、主に型の不適切な使用(unsignedvsなどsize_t)のために、大量の警告を生成しました。コードが目的に沿って機能した後は、誰もそれらを修正するために悩んだり時間をかけたりすることはありませんでした。 次に、GCCを使用する他のプラットフォームのサポート(4.5および4.6、最初は4.4)が追加されました。GCCはよりうるさいので、より多くの警告を生成しました。再び、誰もそれらを修正するために悩んだり、時間をかけたりしませんでした。これは、GCCが4.5まで特定のコードの警告を沈黙させるプラグマを持っていなかったという事実によってさらに複雑になり、ドキュメントによると、それはまだ必要なものではありません。 その間、いくつかの非推奨の警告がポップアップしました。 これで、何千もの警告を生成するプロジェクトができました。また.cpp、さまざまなコンパイラーによってファイルが数回コンパイルされ、ヘッダーの警告が何度も出力されるため、どのくらいの数の場所であるかさえわかりません。 そのようなものをクリーンアップするためのベストプラクティスはありますか?それともそれを扱った少なくともいくつかの肯定的な経験ですか?

2
REST APIをビジネスレイヤーとして使用できますか?
PHP Codeigniter MVCデザインパターンを使用しています そして私はある種の特定のビジネスプロセスを備えたこのプロジェクトを持っていました 私のアプリケーションでは、2つの既存のREST APIを扱います。 グーグル トレロ ビジネスロジックレイヤー(BBL)として機能するREST APIを作成するというアイデアを思いつきました 次に、モデルに直接アクセスして、ビジネスルールを作成するために必要なデータをフェッチします。 RESTクライアントを使用してBLLと通信するコントローラー、 パフォーマンスの悪いアプローチですか? データアクセスレイヤー(DAL)とビジネスロジックレイヤー(BLL)の2つのモデルのレイヤーを作成する方が良いですか?

4
いくつかの大きなライブラリまたは多くの小さなライブラリ?
数か月の間に、現在すべてのプロジェクトに組み込んでいるゲーム開発のための小さなフレームワークを作成しました。 フレームワークは、SFML、LUA、JSONcpp、およびその他のライブラリに依存しています。オーディオ、グラフィック、ネットワーキング、スレッディングを扱います。いくつかの便利なファイルシステムユーティリティとLUAラッピング機能があります。また、文字列解析ヘルパーや数学ユーティリティなど、多くの便利な「ランダム」ユーティリティメソッドがあります。 私のプロジェクトのほとんどはこれらの機能をすべて使用していますが、すべてを使用しているわけではありません。 ファイルシステムとネットワーク機能のみを使用する自動アップデーターがあります ネットワーク機能のないゲームを持っています JSONcppを必要としないプロジェクトがあります これらの文字列/数学ユーティリティのみが必要なプロジェクトがあります つまり、SFML / LUA / JSON共有ライブラリは、たとえ使用されていなくても、すべてのプロジェクトに含める必要があります。プロジェクト(非圧縮)のサイズはこのように10MB以上で、そのほとんどは未使用です。 代替策は、フレームワークを多くの小さなライブラリに分割することです。これは、はるかに効果的でエレガントになると思いますが、より多くのDLLファイルとプロジェクトを維持する必要があります。 フレームワークを多数の小さなライブラリに分割する必要があります。 グラフィックス スレッディング ネットワーキング ファイルシステム 小さいユーティリティ JSONcpp utils LUA utils これは最良の解決策ですか?

6
コード保守に関するポリシーと実践
私は大学を出たばかりで、この会社で約8か月間働いていますが、開発者の称号を与えられましたが、ほとんどの時間は他の人のコードの修正とデバッグに費やされていました。 なぜ元の開発者が自分のコードを修正する責任がないのか、いつも疑問に思っています。元の開発者が存在しない場合、他の開発者が仕事を引き継ぐ必要があることを理解していますが、開発者が会社の従業員としてまだ働いている場合はどうなりますか? 新しい開発者が学習する機会と見なすことは有益であると主張する人もいるでしょうが、私はそれに同意しますが、コードの問題/問題の複雑さが非常に急な場合はどうでしょうか。私の場合、彼らが修正するように彼らに割り当てたコードのほとんどは重要な問題であり、コードに関する元の開発者の質問を常に私自身に尋ねることになります。なぜそれを作成した開発者は、コード化してからそれをよく理解していると、既存の問題を修正できないのでしょうか?そして、私が言及している問題は、1〜2日で修正できるようなささいな問題ではなく、解決策を見つけるためにコードを深く理解する必要がある問題です。 これの背後にある理由は何ですか?それはソフトウェア業界で一般的ですか?

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