ソフトウェア工学

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

4
ドメインとデータ永続性レイヤーのアーキテクチャ検証をクリーンアップしますか?
私はクリーンについて研究しており、その結果、ソフトウェアの設計と作成の方法について、かなり劇的に再考しています。 しかし、私がまだ取り組んでいることは、「一部のアイテムへの更新の保存時、最初の読み込みなど、表示/編集する権限のあるアイテムのすべてのリスト、このアイテムがリストにあることを確認するなどのビジネスルールです。そして、アイテムカテゴリは現在使用できないようにロックされていません(および他のルールなど) "。それは(複雑だが非定型ではない)ビジネスルールであり、ビジネスロジックをプッシュするのではなく、アプリケーションドメインで処理する必要があるためdb / persistenceレイヤー。 ただし、これらの条件を効率的にチェックするには、すべてのデータをアプリケーションドメインにロードするのではなく、巧妙に作成されたdbクエリで処理するのが最善のようです... 時期尚早な最適化なしで、推奨されるアプローチまたはこの質問を扱っているボブおじさんの記事は何ですか?または、「問題になるまでドメインで検証する」と言いますか? 最も基本的な使用例以外の良い例やサンプルを見つけるのに苦労しています。 更新: みなさん、こんにちは。返信ありがとうございます。私はもっ​​と明確で、長い間(主にWebアプリ)のソフトウェアを書いていて、まとめて記述したすべてのトピックを確実に経験して同意しているはずです(バックエンドで検証し、クライアントデータを信頼せず、一般的に言って)必要な場合にのみ生の効率を追跡しますが、利用可能な場合はdbツールの強みなどを認識し、「まとめて投げる」という開発者の学習ライフサイクルを経て「N層アプリケーションで巨大な脂肪コントローラーを構築する」コードのトレンド、そして今は基本的にクリーンで単一の責任のスタイルなどを非常に気に入って調査しています。最近のいくつかのプロジェクトの結果として、プロジェクトが進化し、クライアントの要件がさらに明らかになるにつれて、非常に不格好で広く分散したビジネスルールに発展しました。 特に、クライアント向けのREST APIと内部使用機能のためのREST APIを構築するコンテキストでクリーンスタイルアーキテクチャを検討しています。この場合、ビジネスルールの多くは、ネットで目にするすべての例よりもはるかに複雑になる可能性があります。(Clean / Hexアーキテクチャの開発者自身によっても)。 だから私は、CleanとREST APIがどのように共存するかについて本当に質問しました(そして明確に述べられなかった)と思います、ここで最近見られるほとんどのMVCには受信リクエストバリデーターがあります(たとえば。 「検証」ルールはそれほど「50文字未満の文字列ですか」ではなく、「このユーザーは、このユーザーケース/インタラクターを呼び出して、関連するオブジェクトが現在チームXによってロックされている場合、このデータのコレクションに対してこの操作を実行できますか?」月末までなど」...ビジネスドメインオブジェクトやドメインルールが多数適用される、非常に複雑な検証。 これらのルールを特定の種類のValidatorオブジェクトタイプにスピンアウトして、各ユースケースインタラクター(FluentValidatorプロジェクトからインスピレーションを得たものの、より多くのビジネスロジックとデータアクセスを伴う)に付随させる必要があります。それらの検証をゲートウェイ(間違っていると思います)などに配置します。 参考までに、このようないくつかの記事を書きますが、Mattiaは検証についてあまり説明していません。 しかし、私の質問への短い答えは、私が受け入れた答えに非常に似ていると思います:「それは決して簡単なことではなく、それは依存します」。

4
MVCおよびRESTful APIサービス
MVCは非常に単純です。モデル、コントローラー、ビューがあります。Webサイトを作成すると、クライアントがRESTキーワード要求をサーバーに送信するときにすべてがまとめられます->サーバーは要求されたURLをコントローラーアクションに一致させます->データ収集/処理のためにモデルを呼び出し、結果を取得します->そして、結果をHTMLページ(ビュー)としてクライアントに返します。 純粋なRESTful API Webサービスについて話している場合はどうなりますか?次に、クライアントはRESTキーワード要求をサーバーに送信します->サーバーは要求されたURLをコントローラーアクションに照合します->データ収集/処理のためにモデルを呼び出し、結果を取得して->戻ります結果をJSONでクライアントに返します。以前と同じですが、「ビュー」はありません...むしろ、生成されたJSONは「ビュー」と考えることができます。ある意味では、MVCのMC部分のみを使用しています。それはどのように行われるべきですか?または、MVCの代わりにAPIのみのサービスに適した他のパターンはありますか?

3
ロードバランサーは何を返しますか?
ユーザーがロードバランサーをヒットし、ロードバランサーが転送先のWebサーバーを決定すると、次に何が起こりますか?ロードバランサーはリクエストとそのすべてのデータをウェブサーバーに転送し、ウェブサーバーの応答を受信して​​ユーザーに返しますか? それとも、ロードバランサが選択したサーバーのIPアドレスをブラウザに返すだけで、ブラウザが特定のサーバーとの新しい接続を開かなければならないリダイレクトのようなものですか? 私の直感では、後者ではないだろうと言っています。これは、すべてのWebサーバーのIPアドレスが公開されることを意味し、セキュリティ上の理由から、ロードバランサーアドレスのみを公開するのが最善であると考えました。しかし、SSL terminationロードバランサーで有効にすると、リダイレクトされたサーバーでSSLを再確立する必要がないので、私は正確にはわかりません。

3
RESTを使用してリクエストを処理する場合とAJAXを使用してリクエストを処理する場合[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 6年前休業。 私のWebページで、動的なドロップダウン(選択した国に基づく都市名など)を表示したい場合は、AJAXを使用して表示できます。しかし、REST呼び出しを使用してそれを行うこともできます。どちらを使用すればよいですか? 私の問題は、RESTと他のHTTPブラウザーリクエストの違いがまったくわからないことです(フォーム送信)。RESTの正式な定義を見てきましたが、HTTPリクエストと同じように見えます。では、RESTは本質的にAJAXとどう違うのでしょうか?
12 rest  ajax 

4
TimeZonesをデータベースに保存するためのベストプラクティスは何ですか?
データベース内の各住所のタイムゾーンの収集を開始したいと考えています。タイムゾーンを保存するためのベストプラクティスは何ですか?既存の住所レコードのタイムゾーンを取得するにはどうしますか? Microsoft SQLサーバー、.net mvc、C#を使用しています。任意の提案をいただければ幸いです。

5
Perlスクリプトには本当に拡張子がないのですか?
私はO'ReillyのLearning Perl、6th Editionを読み始めたばかりで、この抜粋に出くわして驚いた。 #!/usr/bin/perl print "Hello, world!\n"; それをテキストエディタに入力したとしましょう。(パーツの意味や機能についてはまだ心配しないでください。すぐにわかります。)通常、プログラムは任意の名前で保存できます。Perlは特別な種類のファイル名や拡張子を必要とせず、拡張子をまったく使用しない方がよいでしょう。 拡張機能がない方が良いのはなぜですか?ボウリングのスコアを計算するプログラムを作成し、それをすべての友達にbowling.plxと呼ばれていることを伝えたとします。ある日、Cで書き直すことにしました。それでも、同じ名前で呼び出して、Perlで書かれていることを意味しますか?または、新しい名前が付いていることをみんなに伝えますか?(そして、bowling.cと呼ばないでください!)答えは、彼らが単にそれを使用している場合、それが書かれている言語は彼らのビジネスではないということです。したがって、そもそもそれは単にボウリングと呼ばれるべきでした。 これは私がこのビューで見た唯一のソースです。私が読んだ他のすべてのものが.pl拡張子をサポートしています。私はまだPerlプログラマではないので、習慣になる前のコミュニティの見方を知りたかった。
12 perl 

5
メソッドパラメータではなくコンストラクタにデータを渡すと、クラスの概念はどのように変わりますか?
パーサーを作成しているとしましょう。1つの実装は次のようになります。 public sealed class Parser1 { public string Parse(string text) { ... } } または、代わりにテキストをコンストラクタに渡すこともできます。 public sealed class Parser2 { public Parser2(string text) { this.text = text; } public string Parse() { ... } } どちらの場合も使用法は簡単ですが、他のものと比較して、へのパラメーター入力を有効にするとはどういう意味Parser1ですか?他のプログラマーがAPIを見たときに、どのメッセージを送信しましたか?また、特定の場合に技術的な利点/欠点はありますか? 2番目の実装ではインターフェイスがまったく意味がないことに気づくと、別の質問が出てきます。 public interface IParser { string Parse(); } ...最初のインターフェイスが少なくともいくつかの目的に役立つ場合。これは特に、クラスが「インターフェース可能」かどうかを示していますか?

4
プログラミング言語を構成するものと、プログラミング言語の著作権をどのように保護するのですか?
私は自分自身のプログラミング言語を作成することに決めました。しかし、私はそのすべての法的側面に興味を持ちました。 たとえば、特定のプログラムを特定の条件の下でライセンスすることができます。ただし、言語のライセンスを取得するにはどうすればよいですか?また、言語(コンパイラとVM)の実装だけでなく、標準自体も意味します。私が見逃しているプログラミング言語に他に何かありますか? そのようなライセンスによって達成したいこと: それを完全にFOSSにします(言語はFOSSになることもできますか、それともFOSSになることができる実装ですか?) 作者としての地位を確立します(合法的に言語の作者になれますか?あるいは、実装だけですか?) 私の言語を実装するすべての人が私を帰属させる必要があるようにしてください(MITスタイル。ただし、実際にそうする人はいないだろうことに注意してください。私はただ学んでいるだけです)。 私の解決策は、私の言語のVMとコンパイラを「公式の実装」として個別にライセンスし、次に、設計ドキュメントを言語自体としてライセンスすることだと思います。 ここで正確に何が欠けていますか?

2
.NET Frameworkの下位互換性とは何ですか?
MySQLのデータベースを使用して、.NET 4でWindowsアプリケーションを開発します。そのアプリケーションをデプロイするときは、クライアントに.NET 4フレームワークをインストールし、次に.NET Connector for MySQLをインストールするときは、.NETフレームワーク3.5が必要です。ただし、.NET 4はすでにインストールされています。.NET Frameworkには下位互換性がありませんでしたか? ディスクサイズが小さくない2つの.NETフレームワーク(3.5と4)をインストールします。後方互換性は正確にはどういう意味ですか?

1
すべてのメソッドがユニットテストの値を返す必要がありますか
最終的に(そしてうまくいけば)TDDのみを開始するための単純な単体テストを作成する方法を学んでいます。今のところ、問題の原因を調べるために、すでに記述されているコードのテストを記述しようとしています。これはその1つです。 私がこの単純なクラス(Typescript-> JavaScript)を持っているとしましょう: class PrivateStuff { greeting: string; private _thisIsPrivate; constructor(isPrivate: boolean) { this._thisIsPrivate = isPrivate; } setPrivate(option) { this._thisIsPrivate = option; console.log("_thisIsPrivate changed to : " + option); } getPrivate() { console.log("_thisIsPrivate is : " + this._thisIsPrivate); return this._thisIsPrivate; } } そして私はそれをこのように使用します: let privateStuff = new PrivateStuff(false); let buttonSet …
12 unit-testing  tdd 

4
インターフェイスを実装し、他のクラスを実装しないクラスでのみ使用可能なメソッドを呼び出すより良い方法はどれですか?
基本的に、特定の条件が与えられたときにさまざまなアクションを実行する必要があります。既存のコードはこのように書かれています 基本インターフェース // DoSomething.java interface DoSomething { void letDoIt(String info); } 最初のワーカークラスの実装 class DoItThisWay implements DoSomething { ... } 2番目のワーカークラスの実装 class DoItThatWay implements DoSomething { ... } メインクラス class Main { public doingIt(String info) { DoSomething worker; if (info == 'this') { worker = new DoItThisWay(); } else { worker …

7
オブジェクト指向言語では、オブジェクトはいつ自分自身に対して操作を行う必要があり、いつオブジェクトに対して操作を行う必要がありますか?
Pageページレンダラーへの一連の指示を表すクラスがあるとします。そしてRenderer、画面上にページをレンダリングする方法を知っているクラスがあるとします。次の2つの異なる方法でコードを構成できます。 /* * 1) Page Uses Renderer internally, * or receives it explicitly */ $page->renderMe(); $page->renderMe($renderer); /* * 2) Page is passed to Renderer */ $renderer->renderPage($page); 各アプローチの長所と短所は何ですか?いつ良くなるのでしょうか?いつ他の方が良くなりますか? バックグラウンド もう少し背景を追加するには-同じコードで両方のアプローチを使用していることに気付きます。と呼ばれるサードパーティのPDFライブラリを使用していTCPDFます。私のコードのどこかに私が持って仕事にPDFレンダリングのため、以下を持っています: $pdf = new TCPDF(); $html = "some text"; $pdf->writeHTML($html); ページの表現を作成したいとします。次のようなPDFページスニペットをレンダリングするための指示を保持するテンプレートを作成できます。 /* * A representation of the PDF page snippet: * a …

5
Gitコミットは終了していませんが、そのマシンで続行できません
時々、コミットの準備ができていないが別のワークステーションまたはラップトップで完了する必要があるワークステーションで、コミットされていないコードを持つという問題に遭遇します。 「ソフトコミット」や、変更を別のマシンに転送して他の場所で動作させる他の方法など、この問題の解決策はありますか? 適切に実装されていない変更をコミットしてプッシュすることを強制されないようにしたいと思います。
11 git 

7
技術管理者が最新の技術を維持するための最良の方法
私のマネージャーは、最新の技術を維持するために従うべき技術ブログのリストを求めました。彼の問題は、彼が聞いたことのない用語(つまり、NoSql、シャーディング、アグレ、サービスバスなど)を聞き続けることです。それらを見上げます。また、彼は、個々のことを個別に学ぶのではなく、すべての新しいテクノロジーとそれらが一緒に収まる場所の全体像を持ちたいと考えています。 彼はブログについて尋ねましたが、私は印刷雑誌も役立つと思っています。 彼に何と答えるべきですか?
11 management 

5
パスワードがハッシュされて保存されている場合、パスワードをリセットしようとすると、パスワードが最後のパスワードと似ていることをコンピューターはどのように知るでしょうか?
パスワードがハッシュされて保存されている場合、パスワードをリセットしようとすると、パスワードが最後のパスワードと似ていることをコンピューターはどのように知るでしょうか?1つはハッシュ化され、元に戻すことはできないため、2つのパスワードはまったく異なりませんか?

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