問題タブ [business-logic-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.
.net - DBからすべてのプロパティが入力された複数のオブジェクト、またはサブセットのみが入力された1つのオブジェクトを含むビジネスレイヤー
私は中規模のシステムを構築していますが、おそらく以前に直面したことがある問題に直面しています。私のビジネスレイヤーでは、そのビジネスメソッドにとって重要なプロパティのサブセットを持つビジネスオブジェクトを返します。意味のない名前のオブジェクトが多数あるか、特定のプロパティのサブセットのみが入力されているオブジェクトだけになる可能性があるため、心配しています。方法。例を挙げましょう。
ケース1
たとえば、ユーザーは都市に属しており、都市は州と国に属しており、、、User
はデータベース上の多くのフィールドを持つテーブルですが、注文のリストを含むユーザーのリストが必要なので、たとえば、重要なプロパティ()のみを使用して呼び出されるビジネスオブジェクトを作成すると、DALはデータベースからそのフィールドのみを取得します。City
State
Country
UserWithOthers
UserId, UserName, CityName, StateName, CountryName, List<Order>
ケース2
注文数のあるユーザーを返したいのですが、ビジネスオブジェクト(UserId, UserName, CityName, StateName, CountryName, OrdersCount
)の次のフィールドで終わります。たとえば、クラスを呼び出すことができます。UserWithOrderCount
私はいくつかのオプションで考えました:
- 2つのビジネスクラスを作成し、各DALメソッドに個別に入力します(このオブジェクトは単純ですが、再利用のためにカプセル化する必要がある複雑なselectクエリがメソッドに含まれる可能性があるため、リポジトリパターンがここにうまく適合しないことを考慮してください。少なくとも私は)。
User
すべてのプロパティ()を使用して1つのオブジェクトのみを作成UserId, UserName, CityName, StateName, CountryName, OrdersCount, List<Order>
し、各DALメソッドのサブセットのみを入力します。ただし、データベースから入力されるフィールドのサブセットを知る必要があり、セマンティックカップリングが最悪であるため、メソッドを使用する場合はセマンティックカップリングを意味します。すべてのカップリングの。List<Order>
オプション1は、後で別のビュー、およびOrdersCount
プロパティの両方で必要になった場合、うまく処理されません。- ASP.NET MVCを使用する場合、ビューに渡すにはViewModelが必要であるとのグッドプラクティスがあり、BusinnesレイヤーからViewModelを返すことを考えましたが、それは良い考えではないと思います。何かに違反しているだけでなく、私のビジネスレイヤーがWebアプリケーションではなく別のアセンブリにあるため、不可能です。
- 同じLinqクエリを何度も書きたくないのですが、NHibernateまたはEFCodeFirstを使用する場合は、オプション1に「いいね」があり、大量のスモールビジネスオブジェクトを作成する必要があります。
この状況にどのように対処しますか?これは高レベルの設計上の決定だと思います。
business-objects - C#:BusinessObjectを「BusinessLayer」コンストラクタまたはそのメソッドに渡しますか?
私は、BusinessObjects (ロジックを含まず、プロパティのみを含む) を使用する C# Winforms アプリと、それらのエンティティを操作するクラス (「ヘルパー」) を含む BusinessLayer のサポートを担当しています。
質問: BusinessObject をヘルパー コンストラクターに渡してから、コンストラクター内で、ヘルパーのパブリックにアクセス可能なエンティティ変数をインスタンス化する必要がありますか、それとも、エンティティに基づいて動作するメソッドにエンティティを渡すだけですか?
シナリオ 1: コンストラクターへ
シナリオ 2: Entity に作用するメソッドへ
シナリオ 1 で私が抱えている 2 つの大きな問題: A) 次の開発者は、CarHelper クラスを掘り下げて、それを必要とするメソッド内で参照する public Car アクセサー プロパティがあることを認識する必要があります。これにより、各メソッドがその役割を実行する前に「null」の Car プロパティをチェックする必要があるという点で、ヘルパー クラスがさらに難読化されます... B) 操作の間に他のコードが多数存在する場合、どの ch.Wash( )は実際にやっています...それはCarオブジェクトにも作用しますか...?
みんなはどう思う???
architecture - エンティティを作成/更新するとき、オブジェクトをビジネス ロジックまたはオブジェクト値に渡す必要がありますか?
エンティティを操作する場合、次のうちどれが推奨されますか? (以下のコードはUIレイヤーにあります。UserManager
はビジネスレイヤーにあります)
1-
ユーザーマネージャーで:
2-
そしてUserManagerで:
c# - 2つの関連オブジェクトのビジネスロジックをどこに配置しますか?
との2つのエンティティがあるUser
としUserGroup
ます。
それらには1対多の関係があります=>それぞれがUserGroup
事実上0からnの数のユーザーを含みます。
UserGroup
ビジネスレイヤー のどこのユーザーを取得したい場合は、そのメソッドを配置するのに適したクラスになりますか?
- に
UserManager
、メソッドを追加します。GetAllUsersForUserGroup
- 上記のメソッドを
UserGroupManager
追加します。
2が良いと思います。確信はないけど。
ありがとう。
更新
私が意味することを完全に説明することができなかったと思います。はい、、、、などを
使用できます。 User
Users
Group
Groups
しかし、私はビジネスを実装するためにどのような異なるパターンなどを適用できるかを見つけようとはしていません。私の質問は:あなたは入れますか、GetAllUsersForUserGroup(int UserGroupID)
それとも入れますか?ユーザーを管理しているクラスで定義する必要があると思いますか、それともユーザーグループを管理しているクラスで定義する必要がありますか?UserManager
GroupManager
GetAllUsersForUserGroup(int UserGroupID)
c# - Web 参照に依存するビジネス ロジックをプレゼンテーション レイヤーから分離する
プレゼンテーション レイヤーとビジネス レイヤーを個別のプロジェクトとして持つ Web アプリがあります。1 つは Web アプリケーションで、もう 1 つはクラス ライブラリです。Web サービスを使用するために、Web アプリケーションへの Web 参照を追加しました。サービス API の使用に問題はありませんが、この API を利用するためにプレゼンテーション レイヤーに多くのビジネス レイヤー タイプのロジックを追加していることに気づきました。ビジネス層のコードの一部を Web サービスで動作するように変更できればよかったのですが、そのような構成は大きな回覧のように聞こえます。とにかく、オブジェクトが実行していることを継続できるようにしたいのですが、Web サービスでも動作するようにしたいのですが、プレゼンテーション層でヘルパー/マネージャー クラスを作成して Web を操作する必要があります。 -サービス。これにより、サービスに追加したいオブジェクトに対してアクションを実行していたすべての場所で、コードの変更が必要になります。この問題を攻撃する正しい方法は何ですか?
とりとめのないすべての場所に正当な質問があるかどうかさえわかりませんが、誰かが役立つ言葉を提供できれば、私は大いに感謝します.
ありがとう!!
asp.net - Asp.Net - ページ自体ではなく、別のアプリケーション層から Web サービスを非同期的に呼び出す
私は Async Page を読みましたが、その使用法は単純に見えます:
[更新]ここから取得:
しかし、次の問題に頭を悩ませることはできません。
ページのコード ビハインドから直接ではなく、ビジネス レイヤーから非同期操作/Web サービスを呼び出したい場合はどうすればよいですか? ネット上でそれに関する情報を見つけることができないようです。
一言で言えばシナリオ:
Request
--> Page handler
--> Business layer service
- || ->External webservice
私が考えることができる問題の 1 つの解決策は、外部 Web サービスの呼び出しに必要な時間だけ、スレッド プールから 2 番目のスレッドを利用して、ビジネス レイヤー サービスを非同期で呼び出すこと
Request
ですPage handler
。-> Business layer service
- || -> External webservice
. [UPDATE ->]基本的に、まったく同じパターンを使用して、上記のアプローチをビジネスレイヤーサービスに拡張することを考えました。[<-終了]
この場合、両方のスレッドがスレッド プールに解放され (またはそう推測されます)、他の着信要求を処理できます。Web サービスからの応答が返されると、最初にスレッドがビジネス レイヤー サービスを処理するためにバインドされ、次にページのレンダリングを完了するために別のスレッドがバインドされます。しかし、それはかなりのオーバーヘッドのように思えます - コーディングとおそらく実行時の両方で。
別の解決策は、最初のものを変更することです。つまり、外部 Web サービス呼び出しをトリガーすると、クライアントに未完成の応答を返し、その結果を要求のコンテキストではなく、単にアプリケーション内で処理します。次に、もちろん、クライアントはサーバーにポーリングして、どこかに保存されているはずの結果を取得する必要があります。これは基本的に、@emfurry がAsync Web Service Callsでレイアウトしたアイデアです。
私が考慮していない他の実行可能なオプションはありますか?
hibernate - 階層化アーキテクチャの共通サービス
レイヤード アーキテクチャでは、レイヤーはその下のレイヤーによって提供されるサービスのみを使用する必要があることを多くの本で読みました。エンタープライズ アプリケーションで一般的に使用されるレイヤーは次のとおりです。
- プレゼンテーション
- 仕事
- 持続性
つまり、ビジネス レイヤー (ビジネス ロジックを含む) のサービスは、永続レイヤーによって提供されるサービスにのみアクセスする必要があります。
ユーザーにメッセージを送信する MessageService があります。オブジェクトの状態に重大な変化があった場合は常に、関連するすべてのユーザーにその変化について通知する必要があります。これは、変更を識別したビジネス レイヤーのサービスが MessageService を使用してメッセージを送信する必要があることを意味します。しかし、messageService はそれ自体がビジネス レイヤーにあるため、同じレイヤーの他のサービスがそれにアクセスすることはできません。
では、コードのアーキテクチャに違反せずに MessageService を使用するにはどうすればよいでしょうか?
c# - レイヤ アーキテクチャのベスト プラクティスは何ですか?
現在、VB6 で開発された非常に大きな銀行ソリューションに取り組んでいます。アプリケーションは大部分がフォーム ベースであり、階層化されたアーキテクチャがありません (データ アクセス、ビジネス ロジック、およびフォーム操作のすべてのコードは単一のフォーム クラスにあります)。私の仕事は、このコードをリファクタリングすることです。私は適切なビジネス ロジック レイヤーとデータ アクセス レイヤーを C# で作成していますが、フォームは VB のままです。
コード スニペットは次のとおりです。
District Entity クラス、なぜその拡張子が DAO なのか、よくわかりません。
データベース クエリの処理を担当する DistrictGateway クラス ビジネス層になりました。
これは、ビジネス層のコードです。
私の質問は次のとおりです。
- 完璧なデザインですか?
- そうでない場合、ここでの欠陥は何ですか?
- 私は、try catchブロックが重複しているこのコードだと思います
- この実装に適した設計とは
n-tier-architecture - 3層アーキテクチャのビジネスレイヤー
面接に行ったところ、ビジネスレイヤーのアーキテクチャを紹介するように依頼されました。私は3層アーキテクチャについていくつかの考えを持っていますが、インタビュアーの前で何を書くべきかについては実際にはわかりません。それで、私のプロジェクトが組織の従業員を扱っているとしたら、私はそこに何を書いただろうか。それは私が作成すべきどんな種類の図か、それともコーディング部分でしょうか。私はC#フレームワーク3.5で作業しました。この質問で他に何を言うべきか本当にわかりませんので、何か必要なことがあれば教えてください。ありがとう。
編集 私はwinformsで作業しました。私はビジネスレイヤーが何であるかを知っていますが、ビジネスレイヤーにはコードがあり、明らかに私のプロジェクトは少し大きかったので、インタビュアーに何を伝えるべきかわかりませんでした。だから私はそこに何を書くべきでしたか?
php - CakePHP ビジネスロジックレイヤー
CakePHP は、アプリのビジネス ロジック層とデータ アクセス層の分離について言及していないようです。これは私の最初の MVC アプリであり、私の "ファット モデル" は非常にファットであることが判明しています。これは、同じデータベースへのアクセスを必要とする唯一の共通点であるあらゆる種類のビジネス ロジックが含まれているためです。
ビジネス ロジックをコントローラーからモデルに移動するという提案を聞いたとき、そのような状態になってしまうことは本当に許容できるのでしょうか? CakePHP は、フレームワークの一部として別のビジネス ロジック レイヤーの構造を提供しますか?
ありがとう、ブライアン