ソフトウェア工学

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


3
マイクロサービス間でDTOを共有する方法は?
私のシナリオは次のとおりです。 さまざまな種類のセンサーからデータを受信し、後でさまざまなフロントエンドおよび分析サービスで使用できるように変換して保持するように設計されたシステムを設計しています。 私はすべてのサービスを可能な限り独立したものにしようとしていますが、問題があります。チームは、使用したいDTOを決定しました。外向きサービス(センサーデータ受信者)は、独自の方法でデータを受信し、JSONオブジェクト(DTO)に変換して、メッセージブローカーに送信します。メッセージのコンシューマーは、センサーデータメッセージの読み取り方法を正確に知ることができます。 問題は、いくつかの異なるサービスで同じDTOを使用していることです。更新プログラムは複数の場所に実装する必要があります。明らかに、ここでDTOのいくつかの余分なフィールドや不足しているフィールドを設計しました。サービスが更新されるまで問題はあまりありませんが、それでも私を悩ませ、気分が良くなります。間違いを犯す。簡単に頭痛になります。 システムを間違って設計しようとしていますか?そうでない場合、これを回避する方法は何ですか、または少なくとも私の心配を緩和するために?

1
SQLiteデータベースの現実的で現実的な最大サイズとは何ですか?
SQLiteの適切な使用に関するこの記事によると、SQLiteは140テラバイトに制限されていますが、クライアント/サーバーRDBMSはより適切に動作する可能性があります。 SQLiteデータベースのサイズは、140テラバイト(2 47バイト、128ティビバイト)に制限されています。また、より大きなデータベースを処理できたとしても、SQLiteはデータベース全体を単一のディスクファイルに保存し、多くのファイルシステムはファイルの最大サイズをこれよりも小さいものに制限します。したがって、この規模のデータベースを検討している場合は、コンテンツを複数のディスクファイル、おそらく複数のボリュームに分散するクライアント/サーバーデータベースエンジンの使用を検討することをお勧めします。 一般的に、私はこれに同意しますが、SQLiteの最大制限が非常に高いことを知って驚いたのです!私の経験では、30〜100GBのサイズのSQL Serverデータベースをかなり使用しました。また、Oracle、Postgres、またはCassandraを使用して、はるかに大きなデータベースを間接的に操作しました。そのうち、少なくとも私の知る限り、140TBに近づいている人はいませんでした。私はDBAではないので、これは私の直接的な経験から「大」と考えるものです。 データベースが小さい場合にのみ、SQLiteを検討しました。最大で数十メガバイト。 この記事を読んだ後でも、数百ギガバイトを必要とするかもしれないもののためにSQLiteを検討することをまだ確信していません。しかし、その能力を過小評価していたのではないかと思っています。実際の使用でのSQLiteデータベースの現実的な最大サイズ制限とは何ですか?

3
Readme.txtとREADME.txt
私はGithubでプロジェクトを分岐し、変更などを行いました。これにより、オープンソースプロジェクトでほとんどREADME.txtが表示され、編集したファイルはReadme.txtでした。これはある種の標準化ですか、それともそのままにしておくべきですか?

6
アプリケーションごとに1つのデータベースを使用するか、複数のアプリケーション間で単一のデータベースを共有する必要があります[終了]
同じソースからのデータを使用するアプリケーションが複数あります。ベストプラクティス(または賛否両論)は次のとおりです。 複数のアプリケーションで共有されるデータベースにデータを残す 必要なデータベースは1つだけなのでスペースを節約できます アプリケーションごとにクエリのニーズが異なるため、インデックス作成が複雑になります データをアプリごとのデータベースに毎日インポートする 重複データがアプリごとのデータベースに存在するため、より多くのスペースを使用します 各アプリが個々のニーズに集中できるため、インデックス作成が簡単 他の長所/短所を省いたかもしれませんが、もしあれば、あなたの職場でどのようにこれを行っていますか?

7
姓と名を別々にモデリングする
新しいシステムを設計する際に、誰かの名前を考慮すべきであり、人の名前を1つのフィールドとして保存するか、名/姓として別々に保存する必要がありますか? 単一フィールドの長所: シンプルなUI 非常に長い名前を持つ人の名前を入力しようとしてもあいまいさはありません(多くの場合、姓/名であることが明らかではありません。) タイトルを処理する際の複雑さの軽減(「MD」または「Dr.」を入力するための別のフィールドは不要です) スプリットフィールドの長所: パーソナライズされたコミュニケーションは可能です「Dear Mr X」または「Dear Julie」 消費されたWebサービスが姓/名を個別に必要とする場合、簡単に提供できます。 厳格な身元確認要件のある業界(医療、政府など)に適した選択肢 常に単一フィールドの代替に戻ることができるため、より安全な選択 あなたはどのご覧ください追加の上に一覧表示されていない引数を? 更新:問題は、ソリューションごとにどの追加(=質問にリストされていない)引数をリストできるかです。賛否両論の可能性の代わりに意見を述べることは、議論を間違った方向に進めると思います。各開発者はこの問題について決定する必要があります。この質問の目的は、必要に応じて評価できる重要な引数のリストを作成することです。

8
新しいスキルの学習はアジャイルのどこに当てはまりますか?
私は金融ソフトウェア会社を立ち上げており、その過程でアジャイルの原則と方法を研究していますが、まだ対処していない開発の1つの側面は、開発者が開発に新しいスキルと技術を習得する絶え間ないニーズを満たす場所ですプロセス。 過去数年間金融ソフトウェアに取り組む前は、3DグラフィックプログラマーとしてのキャリアのほとんどをビデオゲームやGISおよび生体認証ソフトウェアに取り組んでおり、崖から飛び込んで物事を理解する方法を常に簡単に考えていました。飛ぶ。私は常に成功していましたが、一度に100時間の週と月を費やして自分自身を殺さなかったならば、私はそうするまで生き続けるつもりはありません。 3Dグラフィックスの革新的な要求がまったくないソフトウェア会社を立ち上げたので、開発に対するより包括的なアプローチを確立したいと思います。 おそらくアジャイルはこれに対処していないかもしれませんが、もしそうなら、私はどこでこれを見つけたかわからず、誰もがこれについて持っている知識や専門知識や経験に感謝します。
32 agile 

3
プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?
Web開発者として、私はバイナリデータについてほとんど理解していません。 私は、「こんにちは。」の文章を取るバイナリに変換し、SQLデータベース内のバイナリとしてそれを保存する場合、思わ文字よりも多くのスペースを取るだろう、1と0のように。文字を使用することは、1つの記号が複数を表す圧縮を使用するようなものです。 しかし、それは本当にそれがどのように機能するのですか? プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?

5
データベースに何かが存在するかどうかを確認し、高速で失敗するか、データベース例外を待つ必要がありますか
2つのクラスがある: public class Parent { public int Id { get; set; } public int ChildId { get; set; } } public class Child { ... } 割り当てるときChildIdにParent、それが例外をスローするDB用DBまたは待機中に存在する場合、私が最初に確認する必要がありますか? 例(Entity Framework Coreを使用): 注:これらの種類のチェックは、Microsoftの公式ドキュメントでもインターネット全体で行われます:https : //docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using- mvc / handling-concurrency-with-the-entity-framework-in-an-asp-mvc-application#modify-the-department-controllerしかし、追加の例外処理がありますSaveChanges また、このチェックの主な目的は、APIのユーザーにわかりやすいメッセージと既知のHTTPステータスを返すことであり、データベースの例外を完全に無視することではないことに注意してください。そして、例外がスローされる唯一の場所は、内部にあるSaveChangesかSaveChangesAsyncを呼び出すときに例外がありません...コールFindAsyncまたはAny。そのため、子が存在するが以前に削除されていた場合SaveChangesAsync、同時実行例外がスローされます。 これは、foreign key violation「ID {parent.ChildId}の子が見つかりませんでした」と表示するために、例外の書式設定がはるかに困難になるという事実のために行いました。 public async Task<ActionResult<Parent>> CreateParent(Parent parent) { // is this …

5
動的に型付けされた言語で列挙型が必要なのはなぜですか?
ここでいくつかのコードを読んでいて、enumがhtmlタグの名前を保存するために使用されているのを見ました。なぜこれを行う必要があるのでしょうか?この戦略を使用するとどのようなメリットがありますか? コンパイルされた言語または静的に型付けされた言語で列挙型がどのように役立つかは知っていますが、動的に型付けされた言語で列挙型を見ると、上記のコード例のように興味があります。それで、質問は基本的に、動的に型付けされた言語で列挙型が必要なのか、それともまったく必要なのか、ということです。

4
Visual Studioで1年間の開発を統合するための戦略
私は、2016年全体で新しい開発をメインブランチから分離することを主張するクライアントがいます。他の3〜4チームがさまざまな能力でアプリケーションに取り組んでいます。多数の大きな変更が行われました(依存性注入の実行方法の切り替え、ReSharperによるコードのクリーンアップなど)。mainを新しいdevブランチにマージして、変更をチェーンにプッシュする準備をするようになりました。 私の最初のマージプルで、TFSは競合解決を伴う〜6500ファイルを報告しました。これらのいくつかは簡単になりますが、それらのいくつかははるかに困難になります(具体的には、javascript、apiコントローラー、およびこれらのコントローラーをサポートするサービスの一部)。 これを私にとって簡単にするアプローチがありますか? 明確にするために、途中で何度もこのアプローチに多くの懸念を表明しました。クライアントはこれに関する困難を認識していました。彼らはQAスタッフ(4人の開発者に1人のテスター、自動テストなし、ほとんど回帰テストなし)を選択したため、ブランチの必要性を減らすためにメインブランチの変更からブランチを隔離することを主張しました他の場所で行われている変更について知るためのテスター。 ここでの大きな問題の1つは、アンギュラーバージョンと他のサードパーティソフトウェアのアップグレードです。残念ながら、すべてのピースを元に戻すまで、このソリューションを構築する良い方法を思いつきません。

8
「変数は可能な限り最小のスコープ内に存在する必要があります」には、「変数は可能であれば存在してはならない」というケースが含まれていますか?
「インスタンス変数よりもローカル変数を好む理由」で受け入れられている回答によると、変数は可能な限り最小のスコープ内に存在する必要があります。 問題を私の解釈に単純化します。つまり、この種のコードをリファクタリングする必要があるということです。 public class Main { private A a; private B b; public ABResult getResult() { getA(); getB(); return ABFactory.mix(a, b); } private getA() { a = SomeFactory.getA(); } private getB() { b = SomeFactory.getB(); } } このようなものに: public class Main { public ABResult getResult() { A a = getA(); …

10
「親x = new Child();」ではなく「親x = new Child();」は、後者を使用できる場合の悪い習慣ですか?
たとえば、次のようなフラグメントを作成するコードを見たことがあります。 Fragment myFragment=new MyFragment(); MyFragmentではなくFragmentとして変数を宣言します。MyFragmentはFragmentの子クラスです。このコードは次のようにすべきだと思うので、このコード行を満足していません MyFragment myFragment=new MyFragment(); より具体的ですが、本当ですか? または質問の一般化では、使用するのは悪い習慣ですか? Parent x=new Child(); の代わりに Child x=new Child(); 前者をコンパイルエラーなしで後者に変更できるとしたら?

7
C#とJavaが言語の半分であるというこの声明はどういう意味ですか?[閉まっている]
記事:Why POCOには、次の文があります。 Maciej Sobczak氏は、「誰かが私に言語の半分を教えてくれて、それが自分自身の保護のためだと言っているのが好きではない」と言います。 私にもかかわらず、彼は何を意味するのか理解していないC#は、Microsoftが所有しているとのJava、Oracleによって所有され、それは彼らが言語の半分を保持するという意味ではありません、それをしませんか?私はその文を証明する証拠を見つけられませんでした、そして私はこれについて本当に興味があります。そして、「私自身の保護のため」の部分についてさらに興味があります。
32 java  c#  microsoft  oracle 

5
次世代がより良くなることをどうやって知るのでしょうか?
私は最近このMSDN記事で遺伝的アルゴリズムを紹介しました。彼はそれらを組み合わせ進化と呼んでいますが、それは同じことのようであり、2つの潜在的なソリューションを組み合わせることで、少なくともその親として良い。 これはなぜですか?確実に組み合わせると、さらに悪い結果が生じる可能性があります。 私が理解している限り、アルゴリズムは種のオスとメスが子孫を生産するとき、それらの子孫は両方の親の特性を持つという概念に基づいています。いくつかの組み合わせはより良くなり、いくつかはより悪くなり、いくつかは同様に良くなります。(「より良い」の定義が適切であれば)より良いものは、改善された特性を持つ生き残りを生み出し、offsringを生成する可能性が高くなります。しかし、そこになります弱い組み合わせであること。なぜこれがGAの問題ではないのですか?

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