問題タブ [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 に答える
2107 参照

c# - タマネギアーキテクチャを使用して複数のAPIとWebサービスを使用する

現在、タマネギアーキテクチャを使用してVisualStudioソリューションをセットアップしています。ソリューションの構成方法についてはかなりよく理解していますが、少し問題が発生しています。私のソリューションは複数のAPIを使用しています。これらのAPIは、WCF、Soap Webサービス、およびRESTサービス用のRESTSharpを使用して使用されます。これをどのように構成するかわかりません。

最大の混乱は、RESTSharpだけでなく、シリアル化に使用されるいくつかのPOCOクラスも使用するため、RESTサービスに関するものです。私も持っています:

私の最初の考えは、すべてがApiResultを返すインターフェイスを実装するInfrastructure.RestSharpを作成することでしたが、問題は、これらのPOCOクラスとApiResultをどこに配置するかです。インターフェイスがそれらを使用しているため、コアのどこかに移動する必要がありますが、どこに配置するのが適切でしょうか。

WCFとSOAPサービスはどうですか?Infrastructure.WebServicesを作成しますか?

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

mongodb - MongoDB: オニオン アーキテクチャを使用している場合、ドメイン/コア レイヤーは MongoDB dll を参照する必要がありますか?

MongoDB には、デフォルトの主キーとして使用する独自の ObjectId タイプがあります。インフラストラクチャ層の永続化エンジンとして MongoDB を使用して、Onion Architecture を使用して設計されたアプリケーションをセットアップしようとしています。POCO クラスがドメイン層で定義されているが、主キーに MongoDB の ObjectID タイプを使用している場合、ドメイン層への依存関係として MongoDB を追加する必要がありますか?

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

asp.net-mvc - 中間層/バックエンドサービス用のオニオンアーキテクチャ

私は現在、J.PalermoのOnionArchitectureに取り組んでいます。私の場合、それを実装するのにいくつかの問題があります。このアーキテクチャは、「ビジネスレス」Webサイト、別名サービスのマッシュアップに適していますか?

これが私の場合です:

多くのバックエンドサービス(WCF)があり、それぞれが分離されたビジネスデータ(マーケティング、アカウント、オファー、CMSなど)を公開しています。私たちの多くのMVCWebサイトは、ページをレンダリングするためにこれらのサービスを「ただ」消費します。すべてのビジネスロジックがサービスに含まれており、Webサイトはプレゼンテーションロジックに限定されています。Webサイトにはdbアクセスはありません。ただし、一部のビジネスデータは、プレゼンテーション用の複合エンティティにマージできます(コンテンツページをオファーにリンクするなど)。このロジックをサービスレイヤーの下に置くと思います。

編集: バックエンド/中間層サービスの結果/アクションをマッピングするためのドメインモデルを作成する必要がありますか?たぶん、ここでのビジネスロジックは、異なるソースからのデータをマージすることだけですか?

ありがとう、

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

c# - n 層アーキテクチャでこの NHibernate Querying を解決するにはどうすればよいですか?

NHibernate をサービス層から分離しようとして、壁にぶつかりました。私のアーキテクチャは次のようになります。

ウェブ -> サービス -> リポジトリ -> nhibernate -> db

サービス層と、場合によっては Web 層から nhibernate クエリを生成できるようにしたいと考えています。現在、すべてのリポジトリに を取り込む find メソッドがありますIList<object[]> criterianew object() {"Username", usernameVariable};これにより、アーキテクチャのどこからでも、基準のリストを渡すことができます。NHibernate はこれを取り込み、新しい Criteria オブジェクトを作成し、渡された基準を追加します。これは、サービス レイヤーからの基本的な検索では問題なく機能しますが、リポジトリが NHibernate Criteria に変換するクエリ オブジェクトを渡す機能が必要です。

本当に、この質問で説明されているようなものを実装したいと思います: Is there value in abstracting nhibernate criteria。このようなものを実装する方法についての良いリソースが見つかりません。その質問で説明されている方法は良いアプローチですか?もしそうなら、そのようなソリューションを実装する方法について誰かがいくつかの指針を提供できますか?

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

c# - Onion Architecture 外部サービス

現在、Onion Architecture に基づくプロジェクトに取り組んでいます。上の画像はソリューションを示しています。

インフラストラクチャには、外部サービスがあります。ただし、WebAPI は Core にしかアクセスできません。

しかし、Web API プロジェクトでは、外部サービスによって公開されているいくつかのモデルにアクセスしたいですか? Web API で Infrastructure への参照を追加せずにこれを達成するにはどうすればよいでしょうか。

それとも、オニオン アーキテクチャを間違って実装したのでしょうか。

0 投票する
4 に答える
1448 参照

asp.net-mvc - 依存関係を導入せずに Onion Architecture で UnitOfWork を実装する方法は?

asp.Net Mvc 4 アプリをセットアップし、Onion Architectureパターンを使用して構成しようとしています。過去に、このような作業単位パターンを使用しました

次に、UnitOfWork クラスのインスタンスをコントローラーに渡して、このような単純な CRUD を実行します。

アプリを 3 つのプロジェクトに分けました。

  1. インフラストラクチャー
  2. ウェブ

Core プロジェクトにすべてのインターフェイスがあり、Infrastructure プロジェクトに IRepository インターフェイスの実装があります。UnitOfWork クラスをコア プロジェクトに配置すると、インフラストラクチャ プロジェクトで新しいリポジトリが必要になるため、コアからインフラストラクチャへの依存関係を作成します。これをインフラストラクチャに含めると、(コントローラを含む) Web プロジェクトはインフラストラクチャに依存し、ソリューション全体がオニオンではなくスパゲッティのように見えます。

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

.net - Onion アーキテクチャでの依存関係の解決

Onion アーキテクチャは、関心の分離と疎結合を維持するためにアプリケーションを構築する方法です (サンプル プロジェクト: http://onionarch.codeplex.com/ )。依存関係の注入/解決は、すべてのレイヤーを結び付けるために使用されるため、このアーキテクチャの重要な側面です。

上記のリンクには、Onion レイヤーを使用して ASP.NET MVC を構築する方法に関するサンプル アプリケーションが含まれています。私はとても気に入っていますが、これらの例のほとんどは Ninject を使用しています (かなり遅いことは誰もが知っています)。誰かが別の DI ツール (SimpleInjector、Unity、Autofac など) を Onion Project に統合する方法について詳しく説明できるかどうか疑問に思っていました。

すべてのレイヤーが 1 つの依存関係 (MVC プロジェクトを含む)、つまりコア レイヤーのみを持つことが重要です。依存関係解決レイヤーを除いて、このレイヤーはすべてのレイヤーを参照できます。

DI を使用し、MVC レイヤーに DI ツールへの参照を含めずに、MVC プロジェクトをスタートアップ プロジェクトとして設定するのに苦労しています。

0 投票する
4 に答える
1529 参照

inversion-of-control - オニオンアーキテクチャはIoCと矛盾しますか

ジェフリー・パレルモはタマネギのアーキテクチャを開拓しました。これは私が良いアプローチを見つけたものです。

http://www.headspring.com/jeffrey/onion-architecture-part-4-after-four-years/

ただし、私の理解が正しければ、「内側のレイヤーはインターフェイスを定義します。外側のレイヤーはインターフェイスを実装します」という彼のステートメントは、コンシューマーがインターフェイスを定義し、プロバイダーがそれを実装する、つまり、コントロールはプロバイダーではなくコンシューマーにあると述べている場合、IoCと矛盾するようです。

この原則は私には理にかなっています。UIを作成していると想像してください。この原則は、すべてを公開するインターフェイスの定義を担当しているため、呼び出すサービスについて何も知らなくてもUIの作成に取り掛かることができることを意味します。必要な機能。

したがって、そのために、Jeffreysのステートメントは矛盾しているように見え、コントラクト(インターフェイス定義)を配置する場所について私を混乱させます。これは、次のことを意味しているように思われるためです。

ドメインの下にレイヤーがないので、IMyEntityをどこに配置しますか。また、ドメインが存在し、IMyServiceを定義するまで、プレゼンテーションプロジェクトを作成できないことを意味します。

ちなみに、IMyEntityRepositoryとMyEntityRepositoryはどこに配置しますか?サービスはIMyEntityRepositoryに依存し、MyEntityRepositoryはIMyEntityに依存するため

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

asp.net-mvc-4 - フロントエンドとしてMVC4を使用するタマネギアーキテクチャで動的モジュールローディングを使用する方法

オニオンアーキテクチャで依存性注入に頭を悩ませようとしていますが、タマネギの周りに依存性解決レイヤーを使用するこのソリューションを見つけました。しかし、私が完全に失われるほど多くのことが起こっています。

それで、私はそれを試すためにプロジェクトをセットアップしました。私は単純なものから始めるのが好きなので、(MVC)コントローラーメソッドの単純なログエントリが良い出発点になります。Ninject wikiから推奨されているので、Dynamic Module Loading( )を使用したいと思います。kernel.Load("*.dll");

私の解決策は次のようになります:(今のところ)

ここで概説されている依存関係解決のガイドラインに従いたいと思います。

ここに画像の説明を入力してください

Ilogger

ロギングの実装

依存関係の解決

達成したいこと

UI

なんとかして実行する必要がkernel.Load("*.dll");あり、DIを使用するようにMVCをセットアップする必要があります。UIが依存関係解決レイヤーについて認識できないため、どのようにすればよいかがわかりました。

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

dependency-injection - フレームワーク固有ではないマッピング動作の構成

使用しているマッパーがわからないまま、オブジェクトマッパーを構成しようとしています。:/

これは少し奇妙に聞こえるかもしれません。これは、Onionアーキテクチャを試しているため、UIがインフラストラクチャにあるオブジェクトマッパーを認識できないためです。例については、このソリューションを参照してください。

タマネギのアーキテクチャ

デフォルトなしのマッピング動作を「委任」する方法を理解するのに問題があります。のようなもの:

Global.asaxから呼び出されるMVCプロジェクトにクラスを設定しました。ここで、マッピングを構成します。

こんなことができると思っていました。(IMapperは、ドメインにある自己定義のインターフェースです)

さて....ForMemberのような特別な動作を設定するにはどうすればよいですか?AutoMapper固有にすることはできないことに注意してください。

私はこれらの線mapper.CreateMap<MyModel, MyViewModel>(Expression<Func<T>>)に沿って、Funcが今は理解できない黒魔術を行うことを考えていました:(-私は正しい道を進んでいますか、それとも重要な何かを逃したことがありますか?