問題タブ [business-logic]

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 投票する
5 に答える
466 参照

domain-driven-design - 貧血ドメインモデルまたは「ロジックを配置する場所」

これは、「分析による麻痺」が定着しているように見えるシナリオの 1 つです。アドバイスをお願いします。

プロジェクト

部品の参照、どの車両に適合するかなどの詳細を含む、自動車製品のかなり単純なリスト。

フロント エンドは、asp.net MVC アプリケーションです。

バックエンドは SQL で、Subsonic を使用して製品をドメイン オブジェクトに投影します。

機能性

私たちの画面の 1 つは、製品の詳細画面です。ASP.NET MVC コントローラーは、製品リポジトリを呼び出して製品の詳細を取得し、これらの詳細を (viewModel への自動マッピングを介して) ビューに返します。

ここで重要なのは、Web サイトに 2 つまたは 3 つのチャネルがあることです。チャネルに応じて、ユーザーは異なる部品番号を確認する必要があります。

たとえば、小売チャネルの場合、部品番号はデータベースにあるとおりですが、ユーザーが貿易チャネルを通じてサイトにアクセスした場合、部品参照の先頭は別の番号に置き換えられます。

たとえば、0900876 は、Trade チャネルを介して表示された場合、1700876 になります。

私が苦労しているのは、パーツ参照 (および変更される可能性のあるその他の詳細) に関する「チャネル規則」をカプセル化する場所を決定することです。

これらの代替案を検討しました。

ロジックをドメイン オブジェクトに直接書き込む

Productクラスでは、翻訳されたパーツ参照を取得するためのメソッド/プロパティを持つことができます。

このシナリオでは、 Product インスタンスはチャネルについて知っている必要がありますが、これは私には間違っているようです。

ロジックを別のオブジェクトにカプセル化する

このパーツ参照の変換を処理するクラスを作成するか、このロジックを含むChannelクラスを作成することができます。

私が理解していないのは、2つのクラスを調整する方法です。

コントローラがリポジトリを呼び出して製品を取得する場合、使用されたチャネルを特定して部品参照を変換する必要がありますか? その場合、翻訳された部品参照を含む製品をビューに戻すにはどうすればよいですか?

また、この部品参照は検索結果や他のシナリオにも表示される必要があることも注目に値します。そのため、ドメイン内のどこかにきちんと含まれている必要があると思います。

0 投票する
6 に答える
2975 参照

documentation - ビジネスルールのドキュメントを収集するための優れたソリューションは何ですか?

私は、ビジネスルールのドキュメントが電子メール、ドキュメント(現在は古くなっている)、およびIMに分散しているという状況に直面しています。これは悪臭を放ちます。

私は2つの選択肢を考えることができます:Sharepoint(それを嫌う、検索機能はひどいです)またはwiki。

私が理想的な解決策で見たいと思ういくつかのこと:

  • 簡単に更新可能:ドキュメントを更新するためにWordを起動させないでください
  • 差分ビュー:新しいものだけを確認する必要がある場合があります
  • 購読可能:ページごとの新しい変更の通知
  • ロールベース:ページの編集と表示をロールに関連付けることができます
  • 添付ファイル:モックアップ、ファイルなどを簡単に含めることができます。
  • 検索:これはポストグーグルの世界です。すぐに検索して見つけられるようにしたいと思います-使用するものが正しく構成されていない限り、Sharepointはこのカテゴリで負けます
  • 添付ファイルの制限:理想的には、このソリューションでは、ドキュメントと呼ぶ一連のWordドキュメントをアップロードできません。ドキュメントに一貫性のある(そして単純な)形式を持たせたいのですが。添付ファイルをPDF、txtなどとして適用します。

私のウィキコメントをフォローアップすると、私がやりたいことを実行するウィキが少なくとも3つあるようです(インセンティブ、SharePoint-Wiki-Plus、ThoughtFarmer)。ThoughtFarmer、その名前が大好きです。

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

java - ファサードセッションBeanを使用する場合、なぜビジネスセッションBeanも使用する必要があるのですか?

ファサードデザインパターンを使用してアプリケーションのビジネスEJBレイヤーを構造化する場合、実際のビジネスロジックにセッションBeanを使用する必要があるのはなぜですか。プレーンなJavaクラスを使用しない特別な理由はありますか(コンテナー管理のインジェクションが必要ない場合)?プレーンJavaクラスとセッションBeanのパフォーマンスはどうですか?ビジネスセッションBeanをバイパスすると、パフォーマンスが向上しませんか?

2つのオプションを要約すると、次のようになります。

  1. クライアント->ファサード->セッションビーン
  2. クライアント->ファサード->通常のJavaクラス

なぜ2ではなく1を使用するのですか?

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

asp.net-mvc - ASP.NET MVC でのモデル検証のベスト プラクティスは何ですか?

クライアント側の検証やモデル バインディングに関する回答には興味がありません。実際、この質問は MVC 以外のデータ アクセス クラス ライブラリにも当てはまりますが、問題は似ていると思います。

現在、エンティティ (モデル) でのデータ アクセスにリポジトリ パターンを使用しています。現在、リポジトリはすべての CRUD 操作を処理していますが、検証を行うためにモデルが自分自身を保存する責任があると思います。これをどのように処理すればよいですか?

リポジトリがモデルを保存する前にすべてのビジネス ロジックを実行できる IsValid メソッドをモデルに追加できますが、リポジトリがこの検証ロジックを呼び出すことを強制するものはありません。

モデルに Save メソッドを持たせたい場合、モデルが自分自身を保存する適切な方法は何ですか? リポジトリにコールバックするべきではありませんか?

これをどのように処理すべきかについて何か考えはありますか?

ありがとう!

0 投票する
13 に答える
4226 参照

business-logic - なぜ「ビジネスロジック」と呼ばれるのですか?この用語はどこから来たのですか?

私はあらゆる種類の WPF ドキュメントを調べていますが、不必要に混乱しています。「ビジネス ロジック」という用語が随所に散りばめられており、誰もがそれが何であるかを知っている必要があるかのようです。

ここでの質問によれば、ビジネス ロジックとは何かがわかり ます。アプリケーションの「ビジネス ロジック」とは正確には何ですか?

しかし、この用語はどこから来たのでしょうか。なぜ「ビジネス ロジック」と呼ばれ、「コア ロジック」や「メイン アルゴリズム」などの一般的な用語ではないのでしょうか。私が書いているプログラムの中で「ビジネス ロジック」と関係があるものはほとんどありません。「ビジネス ロジック」について考えるときは、クレジット カード トランザクションや顧客データベースのメンテナンスなどを処理するものを思い浮かべます。言い換えれば、コンピューター サイエンス全体の一部に関連するものです。私がイメージング アプリケーションを作成するときは、「ビジネス」、顧客、金銭に基づく取引などは関係ありません。「ビジネス ロジック」があると言うと、本当に混乱します。私はビジネスを行っているのではなく、画像を処理しているからです。

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

business-logic - ビジネスとアプリケーションのロジック?

Web 開発に関して、「ビジネス ロジック」や「アプリケーション ロジック」というフレーズをよく目にします (Web 開発だけでなく、プログラミング全般にも当てはまると思います)。

これは私にとって非常に新しいので、それが何を意味するのかよくわかりません.誰かがこれが正確に何を意味するのか説明してもらえますか? プログラマーが使う単なる「バズワード」ですか?または?

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

.net - 本番環境でワークフローなしで WF ルール エンジンを使用する - 実装の経験

私は、カスタマイズ可能で柔軟なビジネス ルールを必要とするタイプのケース管理システム用のアプリケーションを設計しています。ワークフローなしで WF ルール エンジンを使用することを計画しています (他の例の中でも、こちらを参照してください)。

私のクライアントが提起したポイントの 1 つ (当然のことながらそうです!) は、ルール エンジンをワークフローのないビジネス ルール エンジンに使用する例が現存するかどうかです。

もちろん、私の質問は次のとおりです。これまでに本番アプリケーションで WF ルール エンジンなしのワークフローを使用したことがある人はいますか?

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

sql - タイムスタンプが季節的な営業時間内にあるかどうかを判断する最良の方法は何ですか?

特定のタイムスタンプがビジネスの営業時間内にあるかどうかを確認する SQL クエリが必要です。これらの営業時間は時期(季節営業時間)によって異なり、特定の祝日は営業をお休みします。これらの日付のリストがありますが、変更される可能性があります。

私が欲しいのは、この情報をデータベースに格納するための適切な構造と、次のような関数です。

plpgsql違いがあれば、PostgreSQL 8.2.x でこれを書きます。

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

database-design - データベース イベントの長所と短所

アプリケーションのデータ モデル更新メソッドの一部を書き直して、データベースからのイベントへの登録をサポートすることを検討しています。これが悪い考えになる理由はありますか?CRUD 操作によって起動されたイベントの受信に制限する必要がありますか?それとも、イベント通知に関するビジネス ロジックをさらにプログラムすることができますか? 潜在的な落とし穴は何ですか?

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

c# - ORM を使用しない N 層データベース アプリケーションで、UI は表示するデータに必要なものをどのように指定しますか?

ここでポインタと情報を探しています。正しい答えが 1 つもないと思われるので、この CW を作成します。これは C# 用であるため、以下で Linq を参照します。また、長文失礼いたしました。ここで質問を要約させてください。その後、完全な質問が続きます。

概要: UI/BLL/DAL/DB の 4 層アプリケーションで、ユーザー インターフェイスを変更して、より多くの列 (グリッドなど) を表示し、ビジネス ロジック層からデータ アクセス層へのリークを回避するにはどうすればよいでしょうか。表示するデータを取得します (既にデータベースにあると仮定します)。


3(4) 層の階層化されたアプリケーションを想定してみましょう。

  • ユーザー インターフェイス (UI)
  • ビジネス ロジック層 (BLL)
  • データ アクセス層 (DAL)
  • データベース(DB;第4層)

この場合、DAL は SQL ステートメントを作成し、データベースに対して実行してデータを返します。

そのようなレイヤーを「正しく」構築して常に「select *」を実行する唯一の方法はありますか? 私にはそれは大したことではありませんが、なぜ私が疑問に思っているのかを説明させてください.

UI に、有効な雇用記録を持つすべての従業員を表示したいとしましょう。「アクティブ」とは、雇用記録の from-to の日付に今日が含まれていることを意味します (または、ユーザー インターフェイスで設定できる日付も含まれている可能性があります)。

この場合、これらすべての人に電子メールを送信したいとします。そのため、BLL には、同じ人にまだ電子メールを送信していないことを確認するコードがあります。

BLL の場合、最小限のデータが必要です。おそらく、データ アクセス層を呼び出してアクティブな従業員のリストを取得し、次に、送信した電子メールのリストを取得する呼び出しを呼び出します。次に、それらを結合して新しいリストを作成します。おそらく、これはデータ アクセス層の助けを借りて行うことができますが、これは重要ではありません。

重要なことは、ビジネス層にとって必要なデータはそれほど多くないということです。おそらく、両方のリストの各従業員の一意の識別子が必要であり、一致してから、「これらはアクティブで、まだメールを送信していない従業員の一意の識別子です」と言うだけです。次に、ビジネス層が必要とするものだけを取得する SQL ステートメントを構築する DAL コードを構築しますか? すなわち。「SELECT id FROM employees WHERE ...」だけですか?

では、ユーザー インターフェイスはどうすればよいでしょうか。ユーザーにとっては、メールを送信する理由に応じて、より多くの情報を含めることがおそらく最善でしょう。たとえば、基本的な連絡先情報、勤務先の部署、マネージャーの名前などを含めたいと思うかもしれませんが、少なくとも名前と電子メール アドレスの情報を表示することは言うまでもありません。

UI はそのデータをどのように取得しますか? UI に十分なデータを返すように DAL を変更する必要がありますか? BLL を変更して、UI に十分なデータが返されるようにする必要がありますか? DAL から BLL に返されたオブジェクトまたはデータ構造を UI にも送信できる場合、おそらく BLL はあまり変更する必要はありませんが、UI の要件は、通信する必要があるレイヤーを超えてレイヤーに影響を与えます。 . また、2 つの世界が異なるデータ構造で動作する場合は、おそらく両方に変更を加える必要があります。

そして、UI が変更された場合、さらに列を追加してユーザーをさらに支援するには、UI を変更するためにどのくらい深くする必要がありますか? (データがデータベースに既に存在すると仮定しているため、そこで変更する必要はありません。)

出てきた 1 つの提案は、Linq-To-SQL と IQueryable を使用することです。これにより、何 (データの種類など) と理由 (WHERE 句など) を処理する DAL が IQueryable を返した場合、BLL はUI にそれらを返す可能性があり、必要なデータを取得する Linq クエリを作成できます。ユーザー インターフェイス コードは、必要な列を取得できます。IQuerables を使用すると、UI が実際にクエリを実行し、「select new { X, Y, Z }」を使用して必要なものを指定し、必要に応じて他のテーブルに結合できるため、これは機能します。

これは私には面倒に見えます。Linq フロントエンドの背後に隠されている場合でも、UI が SQL コード自体を実行すること。

ただし、これを行うには、BLL または DAL がデータベース接続を閉じることを許可しないようにする必要があります。また、IoC タイプの世界では、DAL サービスは UI コードが望むよりも少し早く破棄される可能性があります。 Linq クエリは、「破棄されたオブジェクトにアクセスできません」という例外で終了する場合があります。

だから私はポインタを探しています。私たちはどれくらい離れていますか?これにどう対処していますか?UI の変更が BLL を介して DAL に漏れるという事実は、非常に悪い解決策だと思いますが、今のところ、改善できるようには見えません。

私たちがどれほど愚かであるか教えてください。私が間違っていることを証明してください。

また、これはレガシー システムであることに注意してください。データベース スキーマの変更はまだ何年も前から行われていないため、「select *」と本質的に同等の処理を行う ORM オブジェクトを使用するソリューションは、実際にはオプションではありません。レイヤーのリスト全体をプルアップしたくない大きなテーブルがいくつかあります。