ソフトウェア工学

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

1
REST API-モバイル固有の課題
モバイル側で、新しいiOSアプリプロジェクトに取り組んでいます。いくつかのアーキテクチャの変更が行われているため、構築中のアプリやWebサイトなどの他のクライアントが使用するカスタムビルドのプライベートAPIに依存する必要があります。 設計されているAPIは、HTTP動詞にマップされるリソース中心のURIおよびCRUD操作のRestスタイルに従います。次のようなもの: GET www.example.com/books DELETE www.example.com/books/482094 POST www.example.com/users/6793 問題は、このスタイルでは、多くの場合、モバイルクライアントが単一のアプリ画面の読み込みや単一のユーザーUIアクションの管理を行う必要が生じることです。これにより、必要なものがすべて揃うまで、アプリは8秒間ロードモードになります。低速で応答しないアプリ。 接続に関しては、モバイルクライアントには重大な制限があるため、理想的には次のようなルールに従う必要があります。 1画面== 1 API呼び出し 1保存== 1 API呼び出し。 これにより、REST設計の原則との衝突コースに入る多くの状況があります。例: アプリが1日間オフラインで、バックエンドデータベースの4つのテーブルと同期する必要があり、次のような呼び出しが必要だとします www.example.com/sync_everything?since=2015-07-24 ユーザーが自分のオブジェクトの多くを編集できる画面があるとしましょう。たとえば、todoリストでタスクをチェックします。編集ごとに1つのAPI呼び出しを行うのではなく、1つのバッチAPI呼び出しですべてのタスクレコードを編集する方法が必要です。 ORDER、SALESMEN、およびPRODUCT dbテーブルからの情報を混合する画面があるとしましょう。3つではなく1つの呼び出しでそのデータを取得する必要があります。 リスクは、最も安らかなAPIが存在し、また、最も役に立たない無反応のモバイルアプリが存在する可能性があることです。 問題は、私はただの新しい請負業者であり、私が必要なのは、私がそれらのポイントを作るのに役立つもの、尊敬される情報源からの記事、またはそのようなものです。モバイルクライアントのRESTスタイルで妥協している主要なプレーヤー(例:複合集計APIエンドポイントの使用による)。 または、この一般的な問題の解決策。ありがとう!
25 rest  api  ios  mobile 

6
インターフェイスに実装の具体的なタイプを定数の形式で返すメソッドを含めることはできますか?
私は非常に頻繁に、異なるインターフェイスの具体的なタイプに依存するコンポーネントの異なる動作が必要な状況に陥ります。 私の質問を説明するために、私が意味することを示す小さなコードを書きました。この例では、動物オブジェクトから食品オブジェクトをインスタンス化しようとしています。 interface Animal { void growl(); String getAnimalType(); //"DOG" or "FISH" } abstract class Food {} Meat extends Food {} Bread extends Food {} class FoodFactory { Food createFoodForAnimal(Animal animal) { switch (animal.getAnimalType()) { case "DOG": Food food = new Meat(); break; case "FISH": Food food = new Bread(); …

4
不変フィールドのセッターを処理するにはどうすればよいですか?
2つのreadonly intフィールドを持つクラスがあります。プロパティとして公開されます: public class Thing { private readonly int _foo, _bar; /// <summary> I AM IMMUTABLE. </summary> public Thing(int foo, int bar) { _foo = foo; _bar = bar; } public int Foo { get { return _foo; } set { } } public int Bar { get { return …

1
Apache 2.0ライセンスに基づいてライセンスされたライブラリを使用するアプリをリリースする際に留意すべきことは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5ヶ月前に閉店。 すぐにリリースできるAndroidアプリを作成しています。 このライブラリを使用してタブシステムを実装するだけです。Apache 2.0 Licenseの下でライセンスされていることを読みました。配布したアプリ/プログラム/ゲームにライセンスされたライブラリを使用したことがないため(配布していないため)、ライセンスやライセンスされたライブラリの経験がないので、何かありますかApache 2.0ライセンスに基づいてライセンスされたライブラリを使用するアプリを配布する際に留意してください。 覚えておいてください StackOverflowでこの質問をしましたが、代わりにプログラマに移動することをお勧めしましたが、投稿する前にこのサイトがこの種の質問を受け入れた場合はヘルプセンターを確認することをお勧めします。私はやった、そして私が読んだものを見て理解できる限り、この種の質問は許される。 私はいくつかの似たような質問を読んで、いくつかの質問に対する答えを見つけましたが、まだ疑問があり、間違いを犯さないように明確にしたいことがあります。 これらは残りの質問です 「私のアプリケーションのユーザーは、Apache 2.0ライセンスのコピーを受け取らなければなりません。混乱を避けるために、ライセンスが適用されるディストリビューションの部分も明記する必要があります」と読みました。アプリの[アプリについて]ページにApache 2.0ライセンスへのリンクを配置し、リンクとともにライセンスライブラリの名前を伝えるだけで十分ですか? 上記の質問を続けます。「ライセンスが適用されるディストリビューションの部分を記載する」必要がありますか。それは単に、アプリのどの部分がライセンスされているかを伝えなければならないということですか(言い換えれば、ライブラリがライセンスされた部分であることを意味します)? ライブラリのソースを変更し、変更したバージョンをアプリに含めて販売することはできますか? (これはライセンスライブラリとは関係ありません)アプリにライセンスを適用する必要がありますか?はいの場合、どれが推奨されますか?アプリをGoogle Playストアにアップロードすると、著作権によって自動的に保護されますか?「コピーキャット」から保護するために推奨されるものは何ですか? 推奨事項やガイドラインはありますか?間違いを犯さず、罰金を支払ったり、トラブルやそのようなことをしたりしないように、知りたいです。ありがとう! 更新:私はamonの答えを読んで、さらにいくつかの質問を見つけました: amonが言ったことからわかるように、私のアプリは著作権によって自動的に保護されています。彼はまた、私が著作権を登録することができ、それがいくつかの管轄区でいくつかの利点を与えるかもしれないと言った。著作権はどこで登録できますか? ライセンスのどの部分を「about」ページに印刷する必要がありますか?これを(Apache 2.0ライブラリWebサイトから)ライブラリの情報テキストの下に配置し、Apache 2.0ライセンス全体を含む別のページ(アプリ内)へのリンクを配置するだけで十分ですか?: 著作権[yyyy] [著作権所有者の名前] Apacheライセンス、バージョン2.0(「ライセンス」)の下でライセンスされています。ライセンスに従う場合を除き、このファイルを使用することはできません。ライセンスのコピーは、次の場所で入手できます。 http://www.apache.org/licenses/LICENSE-2.0 適用法で要求されるか、書面で合意しない限り、ライセンスの下で配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証または条件もなしに「現状のまま」で配布されます。ライセンスに基づく許可および制限を規定する特定の言語については、ライセンスを参照してください。 さらに質問が来るかもしれません。

1
バニラJSはまだライブラリと見なされますか?
私はごく最近、VanillaJS(ドキュメント?)が99%のブラウザーにバンドルされたばかりのライブラリであり、ネイティブJavaScript(私の人生の衝撃)ではないことを発見しました。私自身のライブラリを書いている間、私は通常すべての有用なことを避けます。ほとんどはライブラリです。今、私は3つの質問があります: VanillaJSはまだライブラリと見なされていますか? VanillaJSなしでDOMで何かをする方法はありますか? VanillaJSまたはネイティブJSに基づいた主要なライブラリ(ドキュメントは含まれません)

7
必須ではありませんが、オプションのパラメーター名を指定しますか?
次の方法を検討してください。 public List<Guid> ReturnEmployeeIds(bool includeManagement = false) { } そして、次の呼び出し: var ids = ReturnEmployeeIds(true); システムを初めて使用する開発者にとって、何trueが起こったのかを推測するのはかなり難しいでしょう。最初にやるべきことは、メソッド名にカーソルを合わせるか、定義に移動することです(どちらも少しでも大きなタスクではありません)。しかし、読みやすくするために、次のように書くのは理にかなっています。 var ids = ReturnEmployeeIds(includeManagement: true); コンパイラが必要としないときにオプションのパラメータを明示的に指定するかどうかを正式に議論している場所はどこにありますか? 次の記事では、特定のコーディング規則について説明しています。https://msdn.microsoft.com/en-gb/library/ff926074.aspx 上記の記事に似た何かが素晴らしいでしょう。

7
所要時間と節約時間の両方の見積もりを必要とするプロジェクトに柔軟でアジャイルなアプローチを取ることは可能ですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 以前にアジャイルと効果的に仕事をしたことがある人として、私は現在の雇用者にアジャイルの利点を納得させようとしています。ただし、経営陣は、プロジェクトのビジネス価値を評価するために、事前に見積もる能力を保持することを強く求めています。 私の顧客のほとんどは社内にいるので、最近、チームを回って、自動化するビジネスプロセスのアイデアを彼らに尋ねることを任されました。次に、これにどれだけの時間がかかっていたかを調べ、ソリューションがどれだけの時間を節約できるかを調べ、総開発時間を見積もりました。そうすれば、管理者は、時間の節約という点でソリューションがどれほど効果的であるかを測定することができます。 しかし、この要件に「アジャイル」でアプローチする方法はないように思えます。柔軟な要件とは、所要時間の推定が間違っているだけでなく、潜在的な時間の推定も節約されることを意味します。私は多くのことを説明し、なぜそれが問題になる可能性が高いのかを説明しましたが、それは交渉不可能であると言われました。 (ウォーターフォール)クライアントにアジャイル開発を販売する方法の質問には、外部顧客にアジャイルを「販売」する方法に関する有用なアドバイスがあります。私はそれを外部のクライアントに販売しようとはしていません。うまくいくと信じている方法論を保持しながら、内部管理の要求をどのように調整できるかを考えています。 少なくともいくつかのアジャイルの利点を保持できる柔軟な方法でこのタスクにアプローチする方法はありますか?
25 agile 

2
「すべての非サードパーティコード」ではない場合、実際には「ビジネスロジック」とはどういう意味ですか?
職場やオンラインでビジネスロジックについて多くの人が話しているのを聞いたことがあり、このサイトに関するいくつかの質問を読んだことがありますが、この用語はまだあまり意味がありません。たとえば、私がよく見かける(言い換え)ステートメントは次のとおりです。 「ビジネスロジックは、実際のビジネスルールをエンコードするプログラムの一部です。」私が読んだ定義のほとんどは、このような円形のものです。 「ビジネスロジックは、特定のアプリケーションに固有のすべてです。」「特定のアプリケーションはビジネスロジック以外の何物でもない」と、これがどのように異なるかはわかりません。したがって、質問のタイトル。 「データアクセス層の上とGUI層の下にビジネスロジック層が必要です。」私が書いたコードでは、データベースアクセサーはアクセスするデータを知る必要があり、UIコードはそれを正しく表示するために表示するものについて多くを知る必要があり、その間に実際に行うことは何もありませんクライアントとサーバー間でデータの塊を渡すこと以外の2つの場所。それでは、実際にビジネスロジックレイヤーに入るものは何でしょうか? 「ビジネスロジックはプレゼンテーションロジックから分離する必要があります。」私たちが受け取る機能要求のほとんどは、ビジネス上の理由でプレゼンテーションロジックを変更することです。ビジネスルールの1つが、デフォルトで32番目の表記で米国国債の価格を表示する場合(ユーザーに構成するためのUIも提供します)、プレゼンテーションロジックは、このルールが完全に実装されていない場合、少なくとも存在することを知る必要があります。また、UXデザインの主要な部分は、ユーザーがソフトウェアが実装しようとしているビジネスルールを理解するのを支援しているようです。 実際にビジネスロジックのみを行うチームに所属していて、非ビジネスロジックはすべて他のチームによって実行されている可能性はありますか?または、個別のエンティティとしての「ビジネスロジック」の概念全体は、特定のアプリケーションまたはアーキテクチャでのみ機能しますか? 答えを具体的にするために:ドミノのピザアプリを再実装する必要があると仮定します。ビジネスロジックとは何ですか?また、そのアプリの非ビジネスロジックとは何ですか?そして、ピザ情報のほとんどがデータアクセス層とプレゼンテーション層に流出することなく、ピザの注文ビジネスロジックを独自のコードの「層」に配置するにはどうすればよいでしょうか。 更新:私のチームはおそらく90%のUIコードを実行しており、ビジネスロジックと呼ばれるものの大部分(すべてではない)が他のチームまたは企業から来ているという結論に達しました。基本的に、私たちのアプリケーションは監視用です財務データ、およびほとんどすべての機能は、ユーザーが表示するデータと表示方法をカスタマイズする方法です。売買は行われていません(ただし、当社の他のアプリと少し統合しています)が、実際のデータは外部ソースの負荷によって提供されます。しかし、ユーザーは自分の「モニター」のコピーを他のユーザーに送信するなどのことを許可しているので、私たちがそれをどのように処理するかの詳細は、おそらくビジネスロジックとみなされます。実際には、現在バックエンドコードの一部と通信するモバイルアプリがあり、フロントエンドコードのどの部分を理想的な世界(基本的には準MVCのM)でUIと共有したいかを正確に知っています。それが私たちにとってのBLLだと思います。 user61852の答えは、「ビジネスロジック」が何を参照し、何を参照していないかについて、より具体的な理解を与えてくれたので受け入れています。

2
Java:なぜコレクションはComparatorを受け入れますが、(仮想的な)HasherとEquatorを受け入れませんか?
この問題は、インターフェイスのさまざまな実装があり、特定のコレクションの目的のために、オブジェクトのインターフェイスレベルのビューのみに関心がある場合に最も顕著です。たとえば、次のようなインターフェイスがあるとします。 public interface Person { int getId(); } クラスを実装hashcode()および実装する通常の方法equals()では、equalsメソッドに次のようなコードが含まれます。 if (getClass() != other.getClass()) { return false; } あなたがの実装混ぜるときに問題が発生Person中をHashMap。がHashMapのインターフェイスレベルのビューのみに関心がある場合、Person実装クラスのみが異なる重複が発生する可能性があります。 equals()すべての実装で同じリベラルな方法を使用してこのケースを機能させることはできますが、その後equals()、異なるコンテキストで間違ったことを行うリスクが発生します(Personデータベースレコードに裏付けられた2つのsをバージョン番号と比較するなど)。 私の直感では、平等はクラスごとではなくコレクションごとに定義する必要があると教えられています。順序に依存するコレクションを使用する場合、カスタムComparatorを使用して各コンテキストで正しい順序を選択できます。ハッシュベースのコレクションに類似するものはありません。どうしてこれなの? 明確にするために、この質問は、コレクションの実装を処理するため、「。equals()がJavaのクラスにあるのに、なぜ.compareTo()がインターフェイスにあるのか」とは異なります。compareTo()およびequals()/ hashcode()両方ともコレクションを使用する際の普遍性の問題に苦しんでいます:コレクションごとに異なる比較関数を選ぶことはできません。したがって、この質問の目的上、オブジェクトの継承階層はまったく問題ではありません。重要なのは、比較関数がオブジェクトごとに定義されているか、コレクションごとに定義されているかです。
25 java  collections 

3
ネイティブマシンコードへのpythonコンパイラがないのはなぜですか?
私が理解しているように、コンパイルされた言語とpythonの速度の違いの原因は、最初のコードがネイティブマシンのコードまですべてコンパイルされるのに対し、pythonはPVMによって解釈されるpythonバイトコードにコンパイルされることです。この方法でPythonコードを複数のオペレーティングシステムで使用できることがわかります(少なくともほとんどの場合)が、理解できない、なぜ従来のコンパイラと同じ方法でコンパイルするPython用の追加の(オプションの)コンパイラがないのかわかりません。これはプログラマーに選択を任せることになり、それは彼らにとってより重要です。ネイティブマシンでのマルチプラットフォームの実行可能性またはパフォーマンス。一般に; コンパイルされたものと解釈されたものの両方として振る舞うことができる言語がないのはなぜですか?

3
ポインタをインクリメントする理由
私は最近C ++の学習を始めましたが、ほとんどの人が(これまで読んでいたことによると)ポインターに苦労しています。 伝統的な意味ではなく、私はそれらが何であり、なぜ使用されているのか、どのように役立つのかを理解していますが、ポインタのインクリメントがどのように役立つかを理解することはできません、誰もポインタのインクリメントが便利な概念と慣用的なC ++? この質問は、Bjarne StroustrupによるA Tour of C ++の本を読み始めた後に出てきたものです。 。
25 c++  c  pointers 

3
RESTful API:共有または特定のURLを持つHTTP動詞?
RESTful APIの作成中、同じURLでHTTP動詞を使用する必要がありますか(可能な場合)、またはアクションごとに特定のURLを作成する必要がありますか? 例えば: GET /items # Read all items GET /items/:id # Read one item POST /items # Create a new item PUT /items/:id # Update one item DELETE /items/:id # Delete one item または、次のような特定のURLを使用します。 GET /items # Read all items GET /item/:id # Read one item POST /items/new # …

1
グローバルデータの非表示について話すとき、Code Completeの作成者は何を意味しますか?
Code Complete 2nd Editionのセクション6.4には、グローバルデータの非表示に関する段落があります。私が特に興味を持っているのは、McConnell(本の著者)がグローバルデータを隠すことの利点の例を示していることです。理解できない例が1つあります。私はこの本の英語版を持っていないので、テキストを翻訳しようとします。 グローバルデータを非表示にします。(...)プログラムを変更せずにデータの構造を変更できます。 McConnellとはどういう意味ですか?彼はグローバルデータの変更について話していますか?その場合、メソッドを使用してそのデータを取得するときにプログラムを変更する必要がないのはなぜですか?それとも、彼はここで何か他のものを指しているのでしょうか? 誰かが私の混乱を解消できれば幸いです。例を提供することもできれば、それは素晴らしいことです(例は素晴らしいです、ご存知でしょう)。

2
Webアプリの創設者は、それをスケーリングするための技術的な専門知識を欠いているのが一般的ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Twitterのようなものを見ると、アイデアは最初に実装するのが非常に簡単なので、創業者はあまり技術的に才能がある必要はありません。基本的に、それは良いアイデアを持った男です。しかし、アプリ/ソフトウェアが爆発し、エンジニアリングの問題がはるかに難しくなった場合、創業者はどのように対処しますか? 良いアイデアを持っている元の男が、技術的な課題についてより多くなり、アイデアについてより少なくなるにつれて、何らかの形で企業から脱落するケースを見ましたか?
25 startup 

4
純粋な機能を非公開にする正当な理由はありますか?
同僚と少し議論をしました。簡単に言えば、純粋な関数を非表示/カプセル化する正当な理由はありますか? 「純粋」とは、ウィキペディアの定義を意味します。 同じ入力から常に同じ結果を返します。(この説明のために、値のセマンティクスがないFoo Create(){ return new Foo(); }場合Fooは不純であると見なされます。) 可変状態(ローカル変数を除く)またはI / Oは使用しません。 副作用を引き起こしません。

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