ソフトウェア工学

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

2
MongoDBのキーに「。」を含むJSONドキュメントを挿入する
第一に、これはプログラミングの問題というよりも設計上の問題です。 既存のJSONデータを取得してMongoDBに挿入する必要があるアプリケーションを作成しています。一部のJSONドキュメントには.キーにピリオドが含まれていることがわかりました。MongoDBのドキュメントで.、クエリに使用されるピリオドはMongoDBのキーとして許可されていないことを読みました。 私はWebアプリケーションに多くの挿入を行いません。それはほとんど一度だけの挿入です。また、すべてのデータを取得する必要があるため、ドキュメントの一部を照会するのではなく、ほとんどの場合ドキュメント全体を取得します。 したがって、私の要件を考慮して、JSONドキュメントを保存する方法には2つの選択肢があります。 キーのピリオドをJSONで検索してエスケープし、MongoDBに挿入します。 JSON全体をBSON形式に変換して保存し、エスケープの必要性を回避し、MongoDBの外部で必要に応じてJSONを手動で解析します 結論を出すことができないため、どちらがより良い設計になるか教えてください。
14 json  mongodb 

3
実装の詳細に結合しない単体テストの動作
彼の講演TDDでは、それがすべてうまくいかなかったので、Ian CooperはTDDのユニットテストの背後にあるケントベックの当初の意図をプッシュし(特にクラスのメソッドではなく、動作をテストするため)、テストを実装に結合しないように主張しています。 save X to some data source典型的なサービスとリポジトリのセットを備えたシステムのような動作の場合、テストを実装の詳細に結合することなく、特定のメソッドの呼び出しなど、リポジトリを介してサービスレベルで一部のデータの保存を単体テストする方法)?この種のカップリングを避けることは、実際には努力する価値がない/何らかの形で悪いですか?

3
クリーンアーキテクチャ-ユースケースクラスが多すぎる
私はクリーンアーキテクチャに入り、AndroidレベルをMVCからMVPに上げ、Dagger 2でのDI、RxJava 2での反応性、そしてもちろんJava 8を紹介します。 でMVPクリーンなアーキテクチャが存在し、エンティティ間の層(データストア内)とプレゼンターそれらにアクセスする必要があります。このレイヤーが「ユースケース」です。使用例は、理想的には1つのエンティティに1つの操作を実装するインターフェースです。 また、Clear Architectureは「悲鳴を上げている」ことも知っています。そのプロジェクトの意味では、クラスの数が多いため、非常に読みやすくなっています。 今、私のプロジェクトでは、6つの異なるエンティティのようなものがあり、もちろん、各エンティティリポジトリには、それらにアクセスするための少なくとも4つのメソッド(通常はget、add、delete、update)があります。つまり、6 * 4 = 24です。 Clean Architectureのこれまでに理解できたとしたら、24のUseCaseがあります。 MVCの6つのコントローラーと比較すると、これは多くのクラスです。 本当に24のユースケースを作らなければならないのですか? 私はすでにそれを成功裏に使っている誰かによる説明を本当に感謝します。 ありがとう、ジャック
14 java  android  use-case  mvp 

1
ファイル名の拡張子以外の部分の名前は何ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 ファイルパスを指定: /some/path/abc.txt ファイル名は「abc.txt」で、拡張子が「TXT」です。 「業界標準」とは何ですか。「abc」部分の明確な名前は何ですか。 参考までに、Javaの古いライブラリjava.ioと新しいjava.nioライブラリの両方で、ファイル名は「abc.txt」を意味し、「abc」の部分に用語はありません(つまり、ライブラリAPIはサポートしていません)。

1
コマンドまたはイベントを使用する必要がありますか?
バス通信におけるコマンドとイベントの違いは、私には少し曖昧に思えます。コマンドは1回だけ実行する必要があることを知っていますが、イベントは複数回処理できますが、コマンドまたはイベントをいつ使用するかはわかりません。 例を見てみましょう: 新しいユーザーがWebアプリケーションに登録するときに、彼にアカウントを作成し、確認メールを送信する必要があります。 アカウントを作成する -これはCreateUserCommand、バスにを送信して、専用のコンポーネントに処理させるための適切な場所のようです。 または、これは非同期バス通信で実装するべきではありませんか?ユーザーがすぐにアプリケーションにログインできるようにしたいと考えています。バスでは、コマンドがいつ実行されるかは保証されません。 メールの送信 -コンポーネントがアカウントを作成した後、2つの可能性を確認できます バスに別のコマンドを送信します SendConfirmationEmailCommand イベントを公開する UserAccountCreatedEvent そして、電子メール送信コンポーネントがそれを取得し、それを仕事にします。 一方では、確認メールを1回だけ送信したい(コマンドを使用する)一方で、新しく登録したユーザーに関係するコンポーネントが複数存在する可能性があると考えています。ロガーまたはSMS送信者。 どのように実装しますか?

5
マルチサイドプロジェクトでバージョン管理をどのように処理しますか?
幅広い質問であることは承知しておりますので、できるだけ具体的にお話しさせていただきます。この質問は、技術的な質問よりも「組織的な」質問です。 これらの主なコンポーネントを持つマルチサイドプロジェクトがあります。 コアビジネスロジック(データモデル)をホストするサーバー コアビジネスロジックを使用するクライアントのバックオフィス コアビジネスロジックも使用するアプリケーションAPI(REST) アプリケーションAPIを使用するスマートフォンアプリ(iOSおよびAndroid)があります。 スマートフォンとは別のタブレットアプリ(android)があり、同じアプリAPIを使用しています。 すぐに、私はアクティブなクライアントで生産されます。そして、どんなプロジェクトでも、私はすべての異なるコンポーネントを長期にわたって維持する必要があります。つまり、以下のすべてをアップグレードできます。 サーバーのコアビジネスロジックのコード(バックオフィス、API、および副作用としてモバイルアプリで使用) API自体(スマートフォンアプリとタブレットアプリの両方で使用) すべてのモバイルアプリ(appstore / googleplay経由) もちろん、サーバー側の部分(コアビジネスロジックコードとAPIコード)は自分ですぐに変更できます。ただし、新しいモバイルアプリはappstore / googleplayでクライアントがダウンロードする必要があり、それらが最新であるかどうかはわかりません。 これらのアップグレードをスムーズに行い、クライアントにリスクを与えないようにするためのガイダンス、優れた実践のヒントを教えてください。 どのバージョンの「バージョン」を作成する必要がありますか?クライアントがモバイルアプリをアップグレードしなくても、すべてが確実に機能するようにするにはどうすればよいですか?私に仕事を楽にするために彼にアップグレードを強いるべきですか? つまり、マルチサイドプロジェクトを長期にわたってライブにするには、どのように整理すればよいですか?

5
enumの文字列表現をより単純にするために、すべて大文字のネーミングに反対してもかまいませんか?
たとえば、列挙型定数にタイトルケースまたはすべて小文字のネーミングを使用する人を見たことがあります。次に例を示します。 enum Color { red, yellow, green; } これによりthrow new IllegalStateException("Light should not be " + color + ".")、たとえば、必要に応じて、文字列形式での作業が簡単になります。 列挙型がの場合、これはより受け入れられるようですがprivate、それでも私はそれが好きではありません。次のように、Stringフィールドを使用してenumコンストラクタを作成し、toStringをオーバーライドしてその名前を返すことができることを知っています。 enum Color { RED("red"), YELLOW("yellow"), GREEN("green"); private final String name; private Color(String name) { this.name = name } @Override public String toString() { return name; } } しかし、それがどれほど長いか見てください。シンプルにしたい小さな列挙型がたくさんある場合、これを続けるのは面倒です。ここでは、型破りなケースフォーマットを使用しても大丈夫ですか?
14 java  conventions  enum 

2
セットをJSONで表す方法は?
JSONは、スカラー、配列/リスト、およびマップのデータ構造(Javaでの同等物)をサポートしています。 A Setは、そのままではJSONでサポートされていません。 JSONでセットを表す方法をいくつか考えました。 [1]-リストとして ただし、リストには独自の順序があるため、次の2つのリストはリスト["a", "b"]と["b", "a"]同じではありませんが、セットと同じである必要があります。 [2]-地図として マップのキーセットを使用し、値は無視してください。 しかし、再び、標準的な比較を使用すると、2つはマップと同じではありません。 {"a": "foo", "b": "bar"}、 {"a": null, "b": null} [3]-マップとして、特別な値で スカラを取り、言う0かnull、またはマップのすべてのキーの値になるように強制します。 {"a": 0, "b": 0} このように、標準の比較ツールでは、キーの順序が変更されても、オブジェクトは同じです。 ただし、この手法は、JSONドキュメントを無関係なデータで汚染します。 [4]-順序付きリストとして 最初の提案に戻りますが、今回は順序付きリストです。この種の比較問題を解決します。 ただし、並べ替えの複雑さも考慮に入れる必要があります。また、マップ表記は重複を処理しますが、並べ替えリストは処理しません。例: {"a": 400, "a": 9}として処理されますが{"a": 9}、["g", "g"]常に処理されます["g", "g"]。 そうは言っても、リスト表記はより明確であるように見えますが、マップ表記はキーの複製に対してより堅牢であり、特別な値について一貫性を保つことが難しくなっています(nullそのための良い選択のように見えますが)。 どう思いますか?セットをJSONでどのように表現しますか? PS これは単にJSONに関する問題であることに注意してください。yamlのような他のフォーマットも利用できることは知っています。まだ...

2
スレッドのスリープはどのように機能しますか?
スレッドを眠っているとき、実際には何が起こっていますか? スレッドをスリープ状態にすると、「現在のスレッドを一定期間一時停止」することがわかります。しかし、それはどのように機能するのでしょうか? Thread.sleep()が内部でどのように動作し、Thread.sleepが実際にどのように動作するかによると?: スリープ期間は、システム固有の細分性の影響を受けます 睡眠が妨げられている スレッドはCPUを離れ、その実行を停止します スレッドはスリープ中にCPU時間を消費していません これが何を意味するのかについての内部および基本的なメカニズムを完全に理解することはできません。 スレッド間の切り替えを担当するスケジューラと呼ばれるものがあることを理解しています。 ソースはこれがOS(またはハードウェア)によって異なることを示しているようで、ほとんどのスレッドには、CPUが別のスレッドに切り替える前にいくつかのアクションを実行するために1ミリ秒から60ミリ秒程度与えられます。 しかし、スレッドがスリープ状態になると(たとえば、数秒)、どのように再開しますか?タイマーが何らかの形で関与していると思いますが、それはマザーボードのクロックですか?CPUクロックレートに関連していますか? タイマーが含まれている場合でも、CPUは、スレッドに再び注意を払う時期になったことをどのようにして知るのでしょうか。常にスレッドをチェックインして、準備ができているかどうかを確認する必要はありませんか?効果的ではないことを、ポーリングは、したがって、種類のされたCPU時間を消費しますか? スレッドは言語固有にスリープしていますか、それともOSがスレッドを担当していますか、それともCPU固有のものですか? 誰かがスケジューラのようなものの基本的な説明とこれのすべての間にCPUが何をしているのかでこれを私に説明してくれませんか?

4
文字列のリストを単一のデータベースフィールドに格納することは悪い考えですか?どうして?
最近、いくつかのレガシーシステムに取り組み始めました。それを開発した人々は、データベーステーブルの単一のフィールドに文字列のリストを格納するというアイデアを思いつきました。これは、データベースに表現もデータもないオブジェクトの識別子であるとしましょう。その識別子の範囲は、本番環境では比較的小さくなります。 一方、私の直感と「良いデザインの好み」は、別のテーブルで表現する必要があることを示しています(多対多の関係を表すために使用されるテーブルと同様)。 彼らのアプローチは本当に悪いのですか?リファクタリングを開始する方が良いでしょうか?はいの場合、元の設計が将来どのような悪影響をもたらす可能性がありますか?そのアプローチを説明するリレーショナルデザインの原則はありますか? コメントの返信を編集: おそらく、彼らはこのアプローチを使用して、階層構造化などの特定の問題を巧妙な方法で解決していません。最もありそうなシナリオは、彼らが時間のプレッシャーの下で単に働いていて、できるだけ早く新機能を実装する必要がある場合でした。 以前はフィールドが単一の値を表していたと思います。彼らは複数の値を保存する機能を実装する予定で、データベースの移行を回避しようとしました。

4
DTOに構成と継承を使用する
単一ページアプリケーションにREST APIを提供するASP.NET Web APIがあります。DTO / POCOを使用して、このAPIを介してデータを渡します。 問題は、これらのDTOが時間とともに大きくなっていることです。そのため、DTOをリファクタリングしたいと考えています。 DTOを設計する「ベストプラクティス」を探しています。現在、値型フィールドのみで構成される小さなDTOがあります。 public class UserDto { public int Id { get; set; } public string Name { get; set; } } 他のDTOは、構成によってこのUserDtoを使用します。例: public class TaskDto { public int Id { get; set; } public UserDto AssignedTo { get; set; } } また、他から継承することによって定義される拡張DTOがいくつかあります。たとえば: public class …
13 rest  api-design  web-api  dto  poco 

5
Web APIを使用した純粋なフロントエンドJavaScriptとajaxを使用したMVCビュー
これは、最近のWebアプリケーションの分割方法に関する人々の考えについての議論でした。 私は、すべてのビューとコントローラーを備えたMVCアプリケーションの作成に慣れています。通常、完全なビューを作成し、すぐにデータを入力したくない特定の領域がなければ、DOMページ読み込みイベントを使用してサーバーを呼び出して他の領域を読み込む場合を除き、フルページリクエストでこれをブラウザに返します。 AJAXを使用します。 また、ページの部分的な更新については、MVCアクションメソッドを呼び出して、HTMLフラグメントを返します。このメソッドを使用して、ページの一部にデータを入力できます。これは、最初のページの読み込みを遅くしたくないエリアや、AJAX呼び出しに適したエリアに適しています。1つの例は、テーブルページングです。次のページに進みたい場合は、ページ全体の更新を使用するのではなく、AJAX呼び出しがその情報を取得した方がよいでしょう。ただし、AJAX呼び出しはHTMLフラグメントを返します。 私の質問は。私は純粋なフロントエンドの背景ではなく、.netの背景から来ているので、この古風なものに対する私の考えはありますか? 私が一緒に仕事をしているインテリジェントなフロントエンド開発者は、MVCビューで多かれ少なかれ何もしないことを好み、むしろフロントエンドですべてを行います。すぐにWeb API呼び出しがページに入力されます。そのため、HTMLを返すMVCアクションメソッドを呼び出すのではなく、標準オブジェクトを返し、javascriptを使用してページのすべての要素を作成することを好みます。 フロントエンドの開発者の方法は、クライアント側の検証を含む、MVCモデルの検証で通常得られるメリットがなくなることを意味します。また、強く型付けされたhtmlテンプレートなどを使用してビューを作成することで得られる利点がすべてなくなることも意味します。 これは、フロントエンドとバックエンドの検証で同じ検証を記述する必要があることを意味すると考えています。JavaScriptには、DOMのすべての異なる部分を作成するための多くのメソッドも必要です。たとえば、テーブルに新しい行を追加する場合、通常、MVC部分ビューを使用して行を作成し、これをAJAX呼び出しの一部として返します。これはテーブルに挿入されます。純粋なフロントエンドの方法を使用すると、javascriptはAPI呼び出しから行のオブジェクト(たとえば製品)を取得し、そのオブジェクトから行を作成します。テーブル行の個々の部分を作成します。 問題のWebサイトには、管理、フォーム、製品検索など、さまざまな分野があります。私が考えていないWebサイトは、単一ページのアプリケーション方法で設計する必要はありません。 これについての皆の考えは何ですか? フロントエンドの開発者とバックエンドの開発者の意見を聞きたいです。

5
コンパイラの出力がオブジェクトコードと呼ばれるのはなぜですか?
Hackers&Paintersに掲載されているPaul Grahamによるエッセイプログラミング言語から: コンパイラに供給する高レベル言語はソースコードとも呼ばれ 、生成される機械語翻訳はオブジェクトコードと呼ばれます。 オブジェクトコードに関するWikipediaの記事から: オブジェクトコードまたはオブジェクトモジュールは、コンピューターコンパイラが生成するものです。 「コンパイラ」の定義から: 従来、コンパイルの出力はオブジェクトコードまたはオブジェクトモジュールと呼ばれていました。(ここでの「オブジェクト」という用語は、オブジェクト指向プログラミングとは関係がないことに注意してください。) では、用語オブジェクトは何に関連していますか?

2
「本物のプログラマはアセンブリ言語を任意の言語で書くことができる」というのは本当ですか?
本物のプログラマは、任意の言語でアセンブリコードを作成できます。 (ラリーウォール)。 私の知る限り、ラリー・ウォール氏は、実際のプログラマーにとって、どの言語もASMと同じ機能を持つことができると言っています。しかし、私は真剣に理解していません。Perl、Python、Java、C#などの高水準言語でアセンブリコードを作成するにはどうすればよいですか?PerlやPythonなどの言語にはポインターさえありません。または彼は何か他のものを意味していますか?ウォール氏は実際に何を言おうとしているのですか?

8
独学/非経験プログラマーの履歴書はどのように見えるべきですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私はあなたが仕事を探す準備ができたときを知ることについてしばらく前に質問をし、肯定的な返事を得ました。現在、職探しを始めるために履歴書の作成に取り組んでいます。 このタイトルは、個人的なプロジェクトの経験しか持っていない独学のプログラマーが履歴書に書くべきものは何なのかという質問を大体まとめていますか? PS。私が本当に求めたいのは、誰かが私の履歴書(素案)を簡単に見ることですが、それはここではあまりにも具体的であることを知っています。この種の質問をすることができる場所はありますか? 編集:フィードバックをお寄せいただきありがとうございます。私はRCバージョンを完成させました、そして、うまくいけば、すぐに求人市場に参入するでしょう。
13 resume 

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