ソフトウェア工学

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

5
定義がソースコードの最後に記述されているときに、C言語でデータと関数の*宣言*が必要なのはなぜですか?
次の「C」コードを検討してください。 #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()はソースコードの最後に定義され、で使用する前に宣言は提供されませんmain()。コンパイラがFunc_i()入っmain()てきたまさにその時に、それは出てきてmain()見つけ出しFunc_i()ます。コンパイラは、どういうわけかによって返された値を見つけ、Func_i()それをに渡しprintf()ます。また、コンパイラはの戻り値の型を見つけることができないことも知っていますFunc_i()。それは、デフォルトでは、(guesses?)の戻り値の型を取りFunc_i()ますint。つまり、コードにfloat Func_i()エラーがあった場合、コンパイラは次のエラーを出しFunc_i()ます。 上記の議論から、次のことがわかります。 コンパイラは、によって返された値を見つけることができますFunc_i()。 コンパイラがFunc_i()出てmain()きてソースコードを検索することによって返された値を見つけることができる場合、明示的に言及されているFunc_i()のタイプを見つけることができないのはなぜですか。 コンパイラFunc_i()は、それがfloat型であることを認識している必要があります。そのため、競合する型のエラーが発生します。 コンパイラがそれFunc_iがfloat型であることを知っている場合、なぜFunc_i()int型であると仮定して、競合する型のエラーを与えるのですか?強制的にFunc_i()float型にしないでください。 変数宣言にも同じ疑問があります。次の「C」コードを検討してください。 #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; コンパイラーはエラーを示します:'Data_i' undeclared(この関数で最初に使用)。 コンパイラがを見るとFunc_i()、Func_()によって返された値を見つけるためにソースコードに行きます。コンパイラが変数Data_iに対して同じことをできないのはなぜですか? 編集: コンパイラ、アセンブラ、プロセッサなどの内部動作の詳細はわかりません。私の質問の基本的な考え方は、使用後にソースコード内の関数の戻り値を伝える(書き込む)とその関数の「C」言語により、コンピューターはエラーなしでその値を見つけることができます。さて、なぜコンピューターは同様にタイプを見つけることができません。Func_i()の戻り値が見つかったため、Data_iのタイプが見つからないのはなぜですか。extern data-type …

3
ToDoリストのデータベーススキーマ
PHP、MySQL、Jqueryテンプレート、JSONを使用して、非常に簡単なToDoリストアプリケーションを作成しようとしています。しかし、私のスキーマはJSONで物事を複雑にしているようです。 それを行う最良の方法は何ですか? アイテムを含む各リストの新しいテーブル。 または リスト用のテーブル、および何らかの形で結合されたアイテム用のテーブル?私はこれを試してみましたが、それを行う正しい方法のように思われないからですか 例http://jsfiddle.net/Lto3xuhe/

4
読みやすくするためだけに、単純なクラスでコレクションをラップするのはやり過ぎですか?
次のマップがあります。 Map<Double, List<SoundEvent>> soundEventCells = new HashMap<Double, List<SoundEvent>>(); これHashMapは、double値(ある時点)を対応するSoundEvent「セル」にマップします。各「セル」には、多数のSoundEventsを含めることができます。それがaとして実装されているList<SoundEvent>理由です。それがまさにそれだからです。 コードを読みやすくするために、次のような非常に単純な静的内部クラスを実装することを考えました。 private static class SoundEventCell { private List<SoundEvent> soundEvents = new ArrayList<SoundEvent>(); public void addEvent(SoundEvent event){ soundEvents.add(event); } public int getSize(){ return soundEvents.size(); } public SoundEvent getEvent(int index){ return soundEvents.get(index); } // .. remove() method unneeded } また、マップ宣言(および他の多くのコード)の方が見栄えがよくなります。たとえば、次のようになります。 Map<Double, SoundEventCell> soundEventCells …

6
フレンドクラスを使用したC ++の単体テストプライベートメソッド
これは議論の余地があることを知っていますが、これが私にとって最良の選択肢であると仮定しましょう。私はこれを行うための実際のテクニックは何なのかと思っています。私が見るアプローチはこれです: 1)テストするメソッドのクラスのフレンドクラスを作成します。 2)friendクラスで、テストされたクラスのプライベートメソッドを呼び出すパブリックメソッドを作成します。 3)friendクラスのパブリックメソッドをテストします。 上記の手順を説明する簡単な例を次に示します。 #include <iostream> class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step 2 { return mc_ptr->plus_two(a); } private: …

3
依存関係の注入を取得しますが、IoCコンテナーの必要性を理解するのを手伝ってもらえますか?
これが質問のさらに別の繰り返しのように思える場合は申し訳ありませんが、トピックに関する記事を見つけるたびに、それは主にDIとは何かについて話します。だから、私はDIを取得しますが、誰もが入ろうとしているIoCコンテナの必要性を理解しようとしています。IoCコンテナのポイントは、依存関係の具体的な実装を単に「自動解決」することですか?私のクラスにはいくつかの依存関係がない傾向があるかもしれませんし、それが大したことではないのかもしれませんが、コンテナのユーティリティを正しく理解していることを確認したいです。 私は通常、ビジネスロジックを次のようなクラスに分類します。 public class SomeBusinessOperation { private readonly IDataRepository _repository; public SomeBusinessOperation(IDataRespository repository = null) { _repository = repository ?? new ConcreteRepository(); } public SomeType Run(SomeRequestType request) { // do work... var results = _repository.GetThings(request); return results; } } そのため、依存関係は1つだけであり、場合によっては2番目または3番目の依存関係がありますが、それほど頻繁ではありません。そのため、これを呼び出すものはすべて、それ自身のレポを渡すか、デフォルトのレポを使用することができます。 IoCコンテナに関する私の現在の理解に関する限り、コンテナが行うことはIDataRepositoryを解決することだけです。しかし、それがすべてである場合、依存関係が渡されないときに私の操作クラスがすでにフォールバックを定義しているため、大量の値が表示されていません。これは同じフォールバックリポジトリを使用します。レジストリ/工場/コンテナの1つの場所でそのリポジトリを変更できます。それは素晴らしいことですが、それはそれですか?

2
これは、ドメイン駆動設計のRESTful Webサービスに適したVisual Studioソリューション構造ですか?
私は.NET 4.5 C#Web API RESTfulソリューションを構築していますが、ドメイン駆動設計を使用して設計されたソリューションのプロジェクトソリューションが正しいか、賢明であるか(または十分ですか)を教えてください。 ソリューションは6つのプロジェクトに分割されました。 /ベース (何にも参照されない) Webプロジェクトは、ソリューションと外部の世界との間のインターフェースを形成します。Web APIコントローラーが含まれています。要求オブジェクトから値を収集し、BizApiレイヤーに作業を依頼する以外のロジックはほとんど含まれていません。 /Biz.Api (ベースで参照]) ドメインサービスを提供し、/ Baseインターフェイスプロジェクトが/Biz.Domainプロジェクトのドメインビジネスロジックオブジェクトにアクセスできるようにします。 /Biz.Domain (Biz.Apiが参照) Biz.Apiレイヤーのドメインクラスを提供します。これらは、メモリ内のビジネスのデータを操作するメソッドを提供します。 /Dal.Db (Biz.Apiが参照) データベースリポジトリレイヤー。データベースにアクセスし、返されたデータを/ Interfacesレイヤーで定義された内部DTOにマップします。 /Dal.Services (Biz.Apiが参照) Webサービスなどの外部の依存関係にプロキシレイヤーを提供し、返されたデータを/ Interfacesプロジェクトで定義された内部DTOにマップします。 /インターフェース (上記のほとんどのプロジェクトで参照) ソリューションにデータを渡すためのDTOクラスと、IoCなどのコントラクトを定義するC#インターフェイスが含まれています。

7
関数は変更されていないパラメーターのみを返しますが、役に立ちませんか?
私が働いているプロジェクトでこの機能を見つけました: -- Just returns the text unchanged. -- Note: <text> may be nil, function must return nil in that case! function Widget:wtr(text) return text end 残念なことに、コーダーは社内で機能しなくなりました。何もしないが、呼び出されたパラメーターを返す関数を作成するのはなぜですか? この例では指定されていませんが、どのような場合でも、そのような関数の使用はありますか? のため function aFunction(parameter) return parameter end で終わる aFunction(parameter) == parameter なぜ私は aFunction(parameter) == whatIWantToCheck の代わりに parameter == whatIWantToCheck ?

1
Javaアプリケーション構造:水平分割と垂直分割
大きなJavaアプリケーションのプロジェクト構造(Maven / Eclipseを使用)の開始について少し議論します。 オプション1: entities (i.e. the whole database using Hibernate classes-first) services (i.e. sets of read/write operations on the entities) app (perhaps split up more further down the line) オプション2: area1-entities area1-services area1-app area2-entities area2-services area2-app ... (where area1, area2 etc. are functional areas of the system) オプション2を使用すると、明らかにMavenプロジェクト/モジュールが大幅に増え、データベースを生成するクラスが複数のプロジェクトに分散されます。誰もが各アプローチの長所/短所をアドバイスできますか?

4
ファーストクラスの機能は、戦略パターンの代替品ですか?
戦略デザインパターン、多くの場合、それらが不足している言語のファーストクラスの機能の代替としてみなされています。 たとえば、機能をオブジェクトに渡したいとします。Javaでは、目的の動作をカプセル化する別のオブジェクトをオブジェクトに渡す必要があります。Rubyなどの言語では、機能自体を匿名関数の形式で渡すだけです。 しかし、私はそれについて考えていたので、多分Strategyは単なる匿名関数が提供する以上のものを提供すると決めました。 これは、オブジェクトがメソッドの実行期間とは無関係に存在する状態を保持できるためです。ただし、匿名関数自体は、関数の実行が終了した時点で存在しなくなる状態のみを保持できます。 ファーストクラスの関数をサポートするオブジェクト指向言語では、関数を使用するよりも戦略パターンに利点がありますか?

2
すでにグラフデータベースを使用している場合、ElasticSearchを使用するのはなぜですか?
ElasticSearchとグラフデータベースの比較について、Webで詳細な説明を見つけることはできません。 どちらもデータを横断するように最適化されています。 ElasticSearchは分析用に最適化されているようです。 ただし、Neo4jは、インデックスと一部のフルテキスト機能を管理するLuceneにも基づいています。 すでにグラフデータベースを使用しているのにElasticSearchを使用するのはなぜですか? 私の場合、Neo4jを使用してソーシャルネットワークを構築しています。 ElasticSearchがもたらす本当のメリットは何ですか? 更新---------- 私はこの段落を見つけました: elasticsearchが役立つ無数のケースがあります。いくつかのユースケースは、他のユースケースよりも明確にそれを要求します。次に、elasticsearchが特に適しているタスクをいくつか示します。 特定のフレーズ(「シェフのナイフ」など)に最も一致する製品説明を多数検索して、最良の結果を返す 前の例では、「シェフのナイフ」が表示されるさまざまな部門を分類します(この本の後半のファセットを参照) 「季節」のように聞こえる単語をテキストで検索する スペルミスを考慮しながら、以前に発行された検索に基づいて部分的に入力された単語に基づいて検索ボックスを自動補完する 大量の半構造化(JSON)データを分散方式で保管し、マシンのクラスター全体に指定されたレベルの冗長性を持たせる ただし、elasticsearchは前述の問題を解決するのに優れていますが、他の人には最適な選択ではないことに注意してください。リレーショナルデータベースが最適化されている問題の解決は特に苦手です。以下にリストされているような問題。 在庫に残っているアイテムの数を計算する 特定の月に送信されたすべての請求書のすべての明細の合計を計算する ロールバックサポートを使用してトランザクションで2つの操作を実行する 電話番号や内線番号など、指定された複数の用語にわたって一意であることが保証されているレコードを作成する Elasticsearchは一般に、品質による結果のスコアリングなど、データからおおよその回答を提供するのに優れています。elasticsearchは正確なマッチングと統計計算を実行できますが、検索の主なタスクは本質的におおよそのタスクです。 おおよその回答を見つけることは、elasticsearchと従来のデータベースを分離するプロパティです。そうは言っても、従来のリレーショナルデータベースは精度とデータの整合性に優れているため、elasticsearchとLuceneにはほとんど規定がありません。 おおよその回答が必要ない場合、ElasticSearchは既に使用されているグラフデータベースと比較して役に立たないと断言できますか?

1
ワイヤレス接続でソケットはどのように機能しますか?
私はAndroidを使用するクライアント側(特にモバイル)アプリケーションでのみ作業しました。このアプリケーションでは、HttpUrlConnectionなどのフレームワークが提供するコンポーネントを使用して、すべてのネットワークがHTTPレイヤーで処理されます。 ただし、Websockets / XMPPなどのプッシュメッセージングシステムはすべて、サーバーへの永続的な接続を維持します。Google Play対応デバイスに組み込まれているGoogleのGCMでさえ、サーバーへの永続的な接続を維持します。 私の質問は、バッテリーを消耗させずにこれがどのように機能するのですか?HTTPリクエストを連続して連続して送信すると、バッテリーの消耗が大きくなります。同じ問題に遭遇することなく、これらの永続的な接続はどのように維持されますか?

3
Androidフラグメントを使用する理由
このトピックに関するドキュメントと他のいくつかの質問のスレッドを読みましたが、私は本当に納得しません。この技術の使用の限界がはっきりとはわかりません。 フラグメントは現在、ベストプラクティスと見なされています。すべてのアクティビティは基本的に1つ以上のフラグメントのサポートであり、レイアウトを直接呼び出すことはありません。 フラグメントは次の目的で作成されます。 Activity多くのフラグメントの使用、それらの間の変更、これらのユニットの再利用を許可します... ==>はアクティビティにFragment完全に依存しているContextため、多くのアクティビティで再利用および処理できるジェネリックが必要な場合は、独自のカスタムレイアウトまたはビューを作成します...フラグメントが追加するこの追加の複雑さ開発レイヤーについては気にしません。 異なる解像度へのより良い処理==>長時間のプロセスの場合、タブレットの同じアクティビティで2つ(またはそれ以上)のフラグメントを表示し、電話で1つずつ表示できるタブレット/電話の場合はOKです。しかし、なぜフラグメントを常に使用するのでしょうか? フラグメント間を移動するためのコールバックの処理(つまり、ユーザーがログインしている場合はフラグメントを表示し、そうでない場合は別のフラグメントを表示します)。===>フェイスブックSDKログインがこのために持っているバグの数を見てみて、それが本当に(?)であることを理解してください... Androidアプリケーションはアクティビティに基づいていることを考慮すると...仕方。===>これは、フラグメントSDKを使用してAndroid SDKとAndroid Frameworkを見ることに慣れている人の答えです。間違っているとは思いませんが、良い結果が得られるかどうかわかりません...そしてそれは本当に抽象的です... ====>常に使用することで、コーディングが増えて生活が複雑になるのはなぜですか?それ以外の場合、それがいくつかの場合の単なるツールである場合、なぜそれがベストプラクティスであるのですか?これらのケースは何ですか?

4
実行時にクラスにフィールドを追加する-デザインパターン
顧客が、CMSのeショップで製品に新しいプロパティ(色など)を追加する可能性を望んでいると想像してください。 プロパティをフィールドとして持つ代わりに: class Car extends Product { protected String type; protected int seats; } あなたはおそらく次のようなことをすることになります: class Product { protected String productName; protected Map<String, Property> properties; } class Property { protected String name; protected String value; } つまり、既存の型システムの上に独自の型システムを作成します。これは、ドメイン固有の言語を作成しているように見えるかもしれない、またはできないように思えます。 このアプローチは既知の設計パターンですか?問題を別の方法で解決しますか?ランタイムにフィールドを追加できる言語がありますが、データベースはどうですか?上記のように列を追加/変更するか、何かを使用しますか? お時間をいただきありがとうございます:)。

3
疎結合を実現するために、インターフェイスがスーパークラスよりも役立つのはなぜですか?
(この質問の目的のために、私が「インターフェース」と言うとき、私は言葉の他の意味での「インターフェース」ではなく、言語構成体を意味しinterfaceます、すなわち、クラスが通信し、操作します。) オブジェクトを具象型ではなく抽象化に依存させることで、疎結合を実現できます。 これは、2つの主な理由のための疎結合することができます:1 -抽象化が依存するコードが少なく破るためにある意味、具体的なタイプより変更になりにくいです。2 -彼らはすべての抽象化をフィットするので別の具体的なタイプは、実行時に使用することができます。既存の依存コードを変更する必要なしに、新しいコンクリートタイプを後で追加することもできます。 たとえば、あるクラスCarと2つのサブクラスVolvoとを考えMazdaます。 コードがに依存している場合、ランタイム中にCara Volvoまたはaを使用できMazdaます。また、後で追加のサブクラスを追加して、依存コードを変更する必要はありません。 また、Car-抽象化である-は、Volvoまたはよりも変更される可能性が低いMazdaです。車はかなり以前から一般的に同じでしたが、ボルボとマツダははるかに変わる可能性が高いです。すなわち、抽象化は具体的な型よりも安定しています。 これはすべて、疎結合とは何か、そして具体的ではなく抽象化に依存することによってどのように達成されるかを理解していることを示すことでした。(不正確なものを書いた場合はそう言ってください)。 私が理解していないのはこれです: 抽象化は、スーパークラスまたはインターフェースにすることができます。 もしそうなら、なぜインターフェイスは疎結合を可能にする能力で特に称賛されていますか?スーパークラスを使用することとどう違うかわかりません。 私が見る唯一の違いは次のとおりです。1-インターフェースは単一継承によって制限されませんが、それは疎結合のトピックとはあまり関係がありません。2-インターフェースには実装ロジックがないため、より「抽象的」です。しかし、それでも、なぜそんなに大きな違いがあるのか​​わかりません。 単純なスーパークラスはそうではないが、インターフェイスが疎結合を可能にするのに優れていると言われている理由を説明してください。

5
大規模なプルリクエストの処理
現在、gitワークフローを使用しているチームとプロジェクトに取り組んでいます。マスターはデプロイ可能な状態であり、機能とホットフィックスを作成するためにブランチが使用される必要があります。機能またはバグ修正が完了してテストされたら、できるだけ早くマスターに移行します。アイデアは、ブランチをできるだけ小さくして、それらをマスターにマージしやすくすることです。masterブランチにプッシュされたコードはデプロイ可能な状態にして、テストに合格するというポリシーがあります。 開発者の1人が1つのブランチで多くの作業(数か月分)を行っており、このブランチがまだマスターにマージされていない状況があります。現在、このブランチにはいくつかの別個の機能と多数のコミットがあります。本質的に、このブランチは実際には数回ですでにマージされているはずですが、今のところそうではありません。ほとんどのコードは、マスターに戻すことができる単体テストで良好な状態にありますが、最新の変更は、完了しておらずテストされていないため、確かにそうではありません。 あるブランチが他のブランチから本当に遠く離れているような状況に対処する最良の方法は何ですか?将来、ブランチがマスターから非常に多くのコミットを取得するのを避ける方法はありますか?
15 git  workflows 

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