問題タブ [application-layer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - DDD: 手続き型アプリケーション サービスの OOP 代替手段は何ですか?
私は最近、Scott Miller と Nick Tune による Domain-Driven Design の Patterns, Principles and Practices という本を手に入れました。C# での素晴らしい例がいくつかあるので、以前に読んだ Java で書かれた他の DDD の本とは少し異なります。Domain イベントの実装は、デリゲートとイベントに対する C# のサポートにより、非常にすっきりしています。
ただし、本書のアプリケーション サービスの章で「手続き型で薄い」べきだと述べられているように、気になることが 1 つあります。アプリケーション層が薄いことを意図していることは理解していますが、なぜプロシージャルなスタイルなのでしょうか? 手続き型のコードを書きたくない、または最初から DDD を選択しなかった。また、このスタックオーバーフローの記事では、アプリケーション サービスは手続き型コードであるとラベル付けされていることもわかりました。
ご覧のように?アプリケーション サービスは手続き型であり、OOP ではありません。これは、アプリケーション サービスの手続き型インターフェイスを OO インターフェイスに置き換えることで、設計をよりオブジェクト指向に改善できるかどうか疑問に思います。この記事では、メソッド オブジェクトを使用することを提案していますが、それは機能しますか? 手続き型アプリケーション サービスに代わるオブジェクト指向の代替手段は何ですか? 誰でも詳しく説明できますか?
http://ayende.com/blog/2145/entities-services-and-what-goes-between-them
c# - アプリケーション層単体テストは DDD ではどのように見えますか?
私の仕事では、アプリによって呼び出される Web サービスを作成しています。私たちは、ドメイン駆動設計を使用したアジャイルな考え方で取り組んでいます。DDD と同様に、ドメイン層とアプリケーション層があります。ただし、これらのレイヤーの単体テストを作成する際に問題が発生しました。これは、ドメイン ロジックを 2 回 (ドメイン単体テストとアプリケーション単体テストで) テストしているように見えるためです。
アプリケーション単体テスト
ドメイン単体テスト
ご覧のとおり、これらの両方のテストは、ドメインの責任であるユーザー バランスが 0 であるかどうかをチェックします。したがって、問題は、アプリケーション層の単体テストがどのように見えるべきか、そして何をテストすべきかということです。どこかで、単体テストは「フロー制御のアプリケーション サービスとビジネス ルールのドメイン モデル」でテストする必要があると読みました。誰かがさらに詳しく説明し、アプリケーション層の単体テストがどのようにテストされ、どのように見えるべきかの例を挙げてもらえますか?
.net - 多段階のプロセスを伴うアプリケーション層がドメイン層を使用しなくても大丈夫ですか
私は、次の層を持つ N 層の .NET アプリケーションに取り組んでいます。
- プレゼンテーション
- 応用
- ドメイン
- インフラストラクチャ (永続性と電子メールなどの一般的なユーティリティ機能を含む)
申請のある時点で、申請が承認されました。承認されたら、次の 4 つの手順を実行する必要があります。
- リクエストで発行された製品に製品タグ コードを割り当てます。
- リクエストのステータスを「処理中」から「注文完了」に更新</li>
- 製品の受け取り準備が整ったことを示す電子メールをリクエスタに送信します
- リクエスタのマネージャに電子メールを送信して、従業員に与えられたものと、製品に対して承認されたリクエストのコピーを通知します
上記の手順は、アトミック操作の一部である必要があります。つまり、すべてを実行する必要があります。そうしないと、アクションがキャンセルされます。私は、次のようにタスクを実行するように要求リポジトリと永続層に指示するアプリケーション層を持たせることを考えています:
- 作業トランザクションの単位として手順 1 と 2 を実行するためのリクエスト リポジトリのアプリケーション層リクエスト
- インフラストラクチャ層がステップ 3 と 4 を実行するためのアプリケーション層要求。
アプリケーション層がこれを行うことになっているかどうかは正確にはわかりません。最初の 2 つのアクションでは、ドメイン層で行うことを避けてきたリポジトリに接続する必要があるためだと思います。最後の 2 つのステップには、依存関係が注入されたインスタンスを介してドメイン層が対話できるインフラストラクチャ層が含まれます。このロジックに従って、アプリケーション層はドメイン層に何も要求していません。これは、アプリケーション層がある場合、このようなマルチステップ プロセスの場合の通常の方法ですか? それとも、ここで何かを逃しましたか?
Windows ワークフローと呼ばれるフレームワークを認識していますが、この複数ステップのプロセスでは処理ステップに沿って人的介入が行われず、数日間待機する可能性があるため、この場合にそれが役立つかどうかはわかりません。また、必要がなければ、アプリケーションを過度に複雑にしたくありません。
前もって感謝します。
c# - アプリケーション サービスはドメイン層またはアプリケーション層に属しますか?
次のように、4層のN層Winformsアプリケーションがあります。
プレゼンテーション層
アプリケーション層
ドメイン層
インフラ層
私のアプリケーション層には、製品のすべてのリポジトリ関連アクションに使用される製品サービス クラスがあります。
Product Services クラスのインターフェース ファイルは、アプリケーション層またはドメイン層に属しますか? 私のリポジトリのインターフェイス ファイルは、インフラストラクチャ レイヤーに実装されているにもかかわらず、ドメイン レイヤーで定義されているためです。
前もって感謝します。
c# - ドメイン エンティティの検証に必要な追加データを取得するために、どのレイヤーまたはサービスがリポジトリに接続する必要があるか
焦点を絞り込むために、ここで質問を単純化しました。
リポジトリからのデータが必要な場合に、エンティティ構築のためにドメイン層で検証を実行するための推奨されるアプローチは何ですか?
たとえば、エンティティが作成される前に合格する必要がある次の検証規則を考えてみましょう。
ルール 1: 携帯電話を要求する従業員は、ABC 社で 6 か月以上勤務している必要があります。
UI から発生し、後でアプリケーション層の注文サービスから渡されたドメイン層のエンティティが利用できる情報には、上記のサンプル ルールを適用するのに十分な情報がありません。従業員が 6 か月以上働いているかどうかを計算するために、従業員の雇用日を返すには、リポジトリからクエリが必要です。
質問
問題は、ルール 1 を検証するために必要な従業員の雇用日を取得するために、この時点でどのレイヤーまたはサービスがリポジトリに接続する必要があるかということです。ルール 1 がパスし、エンティティの他のデータ値もパスしない限り、ドメイン エンティティは有効とは見なされません。
前もって感謝します。
sockets - アプリケーション層プロトコル - 異なるサイズのパケット
Instant Messaging のために、TCP の上に独自のアプリケーション層プロトコルを定義したとします。メッセージにはパケット構造を使用しました。対称 (AES) および非対称 (RSA) 暗号化を使用しているため、異なるメッセージ タイプに対して異なるパケット サイズを取得します。今私の質問に。
単一のアプリケーション層パケットを受信したことをソケットから読み取る方法は? どのサイズを指定すればよいですか?
前もって感謝します。
私は2つのアプローチを念頭に置いています。
実際のパケット サイズを表す一定量のバイトを TCP ストリームから読み取り、最後に、以前に収集されたバイト サイズをストリームから再度読み取ります。
ストリームから最大パケット サイズを読み取ります。取得したバイトの実際のサイズを確認し、それがどのメッセージ タイプであったかを判断します。
さて、より一般的な質問です。パケット サイズ、暗号化方式、受信者、送信者などのメタデータを提供する必要がありますか? はいの場合、これらのメタデータも暗号化する必要がありますか?
json - JSON を使用したリアルタイム API
Web ソケットでコマンドをバックエンドに送信したいと考えています。私は自分のプロトコルが次のようになるべきだと考えていました:
送信:{cmd: "login", data: {user:"Me",id:99}}
返信:{cmd: "login", data: "OK"}
送信:{cmd: "join sensors", data: {group:1}}
返信:{cmd: "join sensors", data: "OK"}
送信:{cmd: "join actuators", data: {group:1}}
返信:{cmd: "join actuators", data: "NOK"}
新しいリクエストを発行する前に、常に応答を待ちます。
BE からイベントを受信することもできます。
{evt:"sensor update", data: {id:1,value;20}}
私のデザインは賢明ですか?より標準化されたアプローチはありますか?