問題タブ [service-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.
zend-framework - ユーザーエンティティとその接続ステータスをどのように処理しますか?
私は現在、ZendFrameworkとDoctrine2を使用してプロジェクトに取り組んでいますが、これらのツールの両方に本当に満足していますが、データベースデータ、セッションデータ(承認、パラメータ、aclなど。)
私はこの種の実装をよく目にします:
私にとっての問題は、私のUserクラスがDoctrineによって使用されるエンティティであるということです。問題ではありませんが、ユーザーが複雑な役割や特権を持っている場合は、ビジネスロジックが追加される可能性があります。
ちなみに、理由はわかりませんが(気持ちだけ、間違っているかもしれません)、良いアイデアとは思えないので、デザインの限界があると思います。
現在の私の考えは、UserServiceを使用することです。私はすでに他のエンティティにそのようなレイヤーを使用しようとしていますが、非常に興味深いものに見えます。
のようなものはどうですか:
「ユーザー」(または許可される可能性のある他の「リソース」)をセッションに格納し、許可を確認するIdentificationServiceなどの別のサービスを使用できる場合があります。
同じことが、次のようなメソッドを使用するAuthorizationServiceにも当てはまります。
この種の実装についてフィードバックはありますか?および/または例はありますか?
あなたの考えは何ですか?
ありがとうございました。
php - サービスはトランザクションとコミット メソッドを実装する必要がありますか?
で一括ユーザー更新を行いたいとしましょうUsersController
。
私のUsersController
中で:
UserService::updateUser メソッドは単にpersist()
/flush()
だから私は、そのようなことをするのが良い考えであるかどうか疑問に思っています:
それから私の中で私UsersController
はできる:
あなたの考えは何ですか?
php - サービス レイヤーを使用する場合、エラーをどのように処理しますか?
私の Zend Framework プロジェクトでは、サービス層を使用していますが、エラーを処理する場所がよくわかりません。
たとえば、私が持っているとしましょうUserService::updateUser($data);
私が持っている場合:
そして、ID 2 のユーザーは存在しませんか?
そのようなエラーをどこでどのように処理しますか?
php - Service Locator を使用してコンテナー インスタンスを Service に提供するのは間違っていますか?
私はサービスレイヤーを使用しています。次に、次のようなサービスがたくさんあります。
- ユーザーサービス
- 記事サービス
- コメントサービス
- AuthorizationService
別のサービスからサービスを使用する必要がある場合があります。
現在、依存性注入に sfServiceContainer を使用しており、一部のサービスに Doctrine 2 エンティティ マネージャーを注入していますが、任意のサービスと EntityManager を取得できるようにコンテナー インスタンスを切り替えて注入することを考えています。
しかし、私は立ち往生していて、それが良い考えかどうかわかりません。
php - サービス メソッドの署名はどうすればよいですか?
私は Service Layer を使用しており、これまで ServiceObject (ArrayAccess、Iterator、Countable を実装) を使用していましたが、それが良いアイデアかどうか疑問に思っています。
あなたはしますか:
また
どこ$data
にある:
ServiceObject には、すべてのメソッドに共通の署名を提供するという利点がありますが、効率的に見えない場合があり、広く使用されておらず、興味を失います。
フィードバックはありますか?
php - アサーションとダイナミック ACL のどちらを使用しますか?
基本的に、独自のアダプターで動作するようにメソッドをAuthorizationService
拡張Zend_Acl
およびオーバーライドします。authenticate()
私が、、、、、としUser
ましょう。Article
ArticleComment
ArticleVote
CommentVote
私のルールは簡単です:
- メンバーは自分の記事を編集できます
- メンバーは任意の記事に投票できます
- ゲストはコメントに投票できません
- ゲストは 1 日に 10 票を超えて投票することはできません。
ただし、これを実装する方法についてはよくわかりません。最後のルールについては簡単です。アサーションにする必要がありますが、自分の記事を編集できるメンバーはどうですか?
動的 ACL を作成し、「Article-545」やロール「User-5656」などのリソースを作成してから ACL ルールを作成するか、より一般的な「Article」リソースと一般的なロール「User」を作成する必要があります。アサーションを使用して、ユーザー 545 に記事 5656 の編集を許可しますか?
どうですか、何かアドバイスはありますか?
c# - select ステートメントをトランザクションにラップするにはどうすればよいですか?
nhibernate プロファイラーを使用してサイトをスローすると、このメッセージが表示されました
警告: 暗黙的なトランザクションの使用はお勧めできません
http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
それらはすべてのselectステートメントにあることがわかります。
コミットと同じように、トランザクションで GetOrderHistory をラップする必要がありますか?
編集
selectステートメントをトランザクションでどのようにラップしますか? こんな感じでしょうか?ただし、「トランザクション」は使用されません。
編集
Ninject (セッションを取得したときのように、それを活用して私を助けることができるかもしれません)
編集 3
私がこれをしたら
私がこれをしたら
エラーを取り除くことはできますが、予期しない結果が生じる可能性があります。
たとえば、orderHistories を取得すると、それらすべてをループして、「購入日」をユーザーの現地時間に変換します。これは、リスト用に作成した拡張メソッドを介して行われます。
変換したら、オブジェクトの「購入日」を上書きするように設定しました。この方法では、フィールドを 1 回変更するたびに新しいオブジェクトを作成する必要がありません。
コミットを呼び出す前にこの日付の変換を行うと、nhibernate はオブジェクトを更新したと判断し、コミットする必要があります。
だから私はこの質問に賞金をかけています。
- 各メソッドをトランザクションでラップする必要がないように、メソッドを作成するにはどうすればよいですか? 私はすでにセッションにninjectを使用しているので、それを活用できるかもしれませんが、1回のリクエストで複数のトランザクションを実行する必要があります。
したがって、リクエストごとに1つのトランザクションしかないことがソウルションであることはわかりません。
一時的な使用のために変更しているオブジェクトが誤ってコミットされないようにするにはどうすればよいですか?
サービスレイヤーで使用している遅延読み込みを行うにはどうすればよいですか。遅延読み込みは通常サービス層で使用されるため、トランザクションで囲みたくありません。
リポジトリ パターンを使用している場合、それを行う方法の例を見つけるのは非常に難しいと思います。例では、すべてが常に同じトランザクションで記述されており、サービス層にトランザクションを持ちたくありません (ビジネス ロジックではなくレポの仕事です)。
php - OAuth ロジックを配置する場所
プロジェクトで Zend Framework を使用しており、認証専用のコントローラーを作成しています。このプロジェクトでは、ユーザーが facebook、twitter、myspace などの他のサイトのアカウントを通じてサインアップすることを受け入れます。このために、OAuth を使用します。しかし、各 OAuth サイト関連の認証のロジックをどこに置くべきか疑問に思っています。たとえば、facebook だけが私のコントローラーで 50 行のコードを占有していました。このようにして、私のコントローラーは薄くなりません...
これをどこに置こうか迷っています。サイトごとに Zend_Auth アダプターを作成し、これにのみサービスを作成します。最善の方法は何ですか?
そして、下手な英語で申し訳ありません。:)
architecture - 作業範囲
フロントエンドにWebフォームを使用し、管理コンソールにMVCを使用するソリューションがあります。
どちらのUIもNinjectを介してサービスレイヤーを使用しますが、微妙ではありますがかなり重要な問題を解決するのに問題があります。
文字列検索用語に基づいてコースのリストを返すCourseServiceがあるとします。このサービスは検索結果を返しますが、管理情報の目的で、行われた検索とその用語に一致するコースの数も記録する必要があります。
私は、リクエストの最後に、ボタンクリックイベントなどのページメソッドで、作業単位がUIによってコミットされるという考えから始めました。同じことがコントローラーにも当てはまります。
ここでの問題は、検索をログに記録するために、UI開発者が作業ユニットでCommit()を呼び出すことに依存していることです。UI開発者は、commitを呼び出さなくても問題なく続行でき、結果が返されますが、検索はログに記録されません。これは、サービス層に作業単位の範囲を制御させるという決定につながります。Ninjectは、作業単位をサービスレイヤーとリポジトリ実装の両方に自動的に渡します。これは、リクエストスコープごとに作成するようにninjectに指示したのと実質的に同じインスタンスになります。
これが私のレイヤーの書き方の例です...
上記のコメントでは、変更をコミットする必要があると感じる場所を確認できますが、サービスレイヤーとリポジトリ実装の両方でトランザクションのスコープを制御できるようにすることで、より大きな問題を見落としている可能性があります。
これに加えて、リポジトリが新しいオブジェクトを保存し、新しく指定された主キーをそのままにして返す必要がある場合、オブジェクトが返された後にUIからCommitを呼び出していると、これは発生しません。そのため、リポジトリは作業単位を管理する必要がある場合があります。
私のアプローチに差し迫った問題がありますか?
c# - Ninject を使用して現在のユーザーをドメインに挿入する
現在のloggedonuserをサービスレイヤーに挿入するのに問題があります。コードキャンプサーバーに似たものを試していますが、コードが機能しない理由を理解するのに苦労しています...
私のアプリ: UI レイヤー -> ドメイン サービスに接続 -> レポ レイヤーに接続...
レポはUIに接続されていません。すべてがチェックされ、検証され、DomainServiceレイヤーから返されます...
私のコード:
//これは私のドメインサービス内で宣言されています
私のWebアプリケーション内で、このサービスを実装してからサービスレイヤーに挿入したいので(これが私が立ち往生している場所です):
私がやりたいことは、認証サービスからloggedonuserを取得することですが、うまくいかなかったため、コードをスタブしました...
global.asax 内のすべてを次のようにバインドします。
まず、IUserSession を使用するサービスを使用しようとすると例外が発生します。コントローラー x にデフォルトのパラメーターなしのコンストラクターを提供してくださいと表示されますが、ドメイン サービスから参照を削除するとすべてが機能します...
サービス部門:
これを実装するためのより良い方法/より簡単な方法はありますか?
以下の返信の助けを借りてUPATEして、なんとかこれを成し遂げました。