問題タブ [onion-architecture]

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.

0 投票する
1 に答える
1293 参照

asp.net-mvc - ドメイン モデルにデータベース コンテキストを使用しても問題ありませんか

ASP.NET MVC を使用して Web ベースのアプリケーションを開発しています。私は、薄い/貧血モデルではなく、豊富なドメイン モデルを使用しようとしています。

Onion アーキテクチャに沿ってソリューションをモデル化しました。さまざまなプロジェクトは次のとおりです。 ここに画像の説明を入力

  • {}.Domain.Core - インフラストラクチャ レイヤーに実装される IDbContext などのドメイン オブジェクトとインターフェースが含まれます
  • {}.Database - データベース プロジェクトです。
  • {].Infrastructure - ロギング、データ アクセスなどの実装が含まれています。
  • {}.Web - ビューとコントローラ

**** データ アクセスは dapper を使用して行われ、IDbContext は 2 つの単純なコマンド、クエリ インターフェイスのラッパーです。各クエリを個別のクラスとして分離しました。

議論のために、私はアプリケーションのごく一部を取り上げています。

タグ、権限などの他のメタデータとともにドキュメントを含む、バージョン管理されたドキュメント ライブラリがあります。

私の文書オブジェクトの単純化されたモデルは以下のとおりです

ここに画像の説明を入力

これらの各操作にはビジネス ロジックが含まれているため、ドメイン オブジェクト内で操作を定義する必要があります。「削除」を操作としましょう。操作を実行する必要があります

  • ユーザーが削除する権限を持っているかどうかを検証する
  • この削除によって影響を受ける関連付けがないかどうかを確認します
  • 進行中のワークフローがないかどうかを確認する
  • トランザクションでデータベースから実際のアイテムを削除する

上記の例に示すように、この操作を完了するにはデータベース コンテキストが必要です。モデリングがドメインオブジェクトにIDbContextを持たせ、公開されたクエリを実行できるようにすることである場合、私が現在考えている方法。

ここに画像の説明を入力

コントローラー クラスでは、ドメイン オブジェクトを呼び出して操作を実行します。

ドメイン オブジェクトで IDbContext を渡しても問題ないかどうかわかりません。そうでない場合、これをモデル化するためのより良い方法は何ですか?

1) ほとんどの場合、コントローラーはサービス層の最初の層として機能する 2) サービス層はドメインから別のクラスに同じメソッドを複製しているだけなので、別のサービス層を持つことに確信が持てない

このデザインを改善する方法を教えてください。

0 投票する
3 に答える
4829 参照

.net - ASP.NET ID をコア ドメイン モデルから切り離す - Onion Architecture

このサンプル プロジェクト ( https://github.com/imranbaloch/ASPNETIdentityWithOnion ) をアプリケーション アーキテクチャとして使用しています。このサンプルでは、​​アイデンティティ フレームワークを含むインフラストラクチャからコアが完全にデコピーされています。

このサンプルでは、​​作成者はアダプター パターンを使用してコア ID クラス (IdentityUser、IdentityRole ...) を分離し、コア レイヤーでそれらのようなクラスを提供しています。

このサンプル プロジェクトの問題は、ドメイン モデル (Product、Images) が、Identity モデルを模倣するダミー クラス (AppUser、ApplicationRole、AppliationUserRoles、...) とリンクされていないことです。

次に、コードを変更して AppUser への参照を追加しました

「AppUser」ナビゲーション プロパティを「Image」クラス内に配置すると、作成されたデータベースには、ID フレームワークのデフォルトの 5 つのテーブル以外に 4 つの新しいテーブルが含まれます。

ID テーブルに関するオニオン データベースの問題

これらのテーブルをデフォルトのテーブルにマージする必要があります。どうやって ?

編集:

これは、データ層に存在するアイデンティティ モデルです (コアからは参照できません)。

また、これは OnModelCreating メソッドのモデル ビルダーです。

0 投票する
1 に答える
620 参照

asp.net-mvc - オニオン アーキテクチャのロールで承認する

こんにちは、みんな

ASP.NET Identity 2.0 を使用しているプロジェクトがあります。このプロジェクトでは、Onion アーキテクチャに従っています。レイヤーは次のとおりです。

1.UI: Owin または ASP.Net Identity への参照なし

2.AuthenticationService: asp.net ID usermanager のラッパーが含まれています。このラッパーは、Bal レイヤーに存在するインターフェイスを実装します。このレイヤーには、カスタム UserStore も含まれています。

3.Dal: DbContext はここに存在します。

4.Bal: Domaine エンティティとインターフェイスを含みます。Owin や ASP.NET ID などへの参照はありません。

5.DependencyResolver: Owin Startup に加えて、いくつかの Ninject モジュールと NinjectWebCommon.So am Using Ninject.

今まではすべて順調です。ユーザーはアカウントの作成に満足しており、いつでもログイン/ログアウト/管理できます。現在直面している問題は、Authorize(Role="rolename") にあります。機能しません。

この作品はどちらも

これは1つです。

私のデータベースには、ロール管理者に属するユーザーがいます。なぜこれが機能しないのかわかりません.mybeは、すべての認証を別のレイヤーに移動したため、IPrincipal.IsInRole(文字列ロール)が方法を理解できないためですもうこれを確認します。

カスタム Authorize 属性の作成に取り組んでいるか、いくつかの拡張機能を作成しています。しかし、私は最初にあなたのアドバイスを求めることにしました.

お時間をいただきありがとうございます

0 投票する
2 に答える
198 参照

architecture - 外部デバイス ロジックはドメイン ドリブン デザインのどこに属しますか?

私は、よりドメイン主導の観点から新しいプロジェクトを開発しようとしています。原則はほとんど理解していますが、まだいくつかのことが暗示されています。

私のドメインでは外部デバイスとのやり取りが必要なため、デバイスの検出、モデルの作成、およびある程度の通信のためのインターフェイスを定義する必要があります。

上記のようなものはコア ドメインに属しますか、それともドメイン主導の観点からすると、このようなもの (これは私のドメインを支援しますが、それ自体は私のドメインではありません) は完全にドメインの外にあり、ドメイン内で定義された動作を使用して作業を行います?

もう少し情報を追加するために、現在、次のようにモデル化されたアーキテクチャがあります。

0 投票する
1 に答える
997 参照

c# - ドメイン駆動設計へのリファクタリング

DDD にリファクタリングしようとしているシナリオがあります。BatchEntries の集約とリストであるバッチがあります。バッチが作成され、BatchEntries が追加された後、SMS がバッチ内の個人に送信され、バッチのステータスが実行中から投稿済みに変わります。

デザインをより良くするためのアイデアはありますか?ドメインには 2 つの集約 Batch と BatchEntry があり、Batch が集約ルートです。

コードは次のようになります

ドメインとドメイン サービスは、アプリケーション サービスを介して公開されます。アプリケーション サービスのコードは次のとおりです。

質問:

  1. Running、Posted などの BatchStatus をどこに割り当てる必要がありますか?
  2. MarkBatchAsPosted メソッドを Batch エンティティのメソッドとして定義する必要がありますか?
  3. ドメイン駆動設計のためにこれを再設計するにはどうすればよいでしょうか?