BLL はデータに関するものだと思います。SendEmail というメソッドを含めないでください。BLL は、データをキャッシュし、操作し、ビジネスに関連する計算を行うための場所です。電子メールの送信はビジネス プロセスですが、実際に電子メールを送信するコードは BLL 名前空間の外にある必要があります。
BLL はデータのみですか?
BLL はデータに関するものだと思います。SendEmail というメソッドを含めないでください。BLL は、データをキャッシュし、操作し、ビジネスに関連する計算を行うための場所です。電子メールの送信はビジネス プロセスですが、実際に電子メールを送信するコードは BLL 名前空間の外にある必要があります。
BLL はデータのみですか?
BLL はデータに関するものではなく、データに対して何を行う必要があるかに関するものです。
ユーザーは、アプリケーションのフロントエンド プレゼンテーション フォームとのみ対話します。これは、一般にプレゼンテーション レイヤーとして知られています。
データは、さまざまなデータ ソースからこのレイヤーへの入力/出力として表示または交換されます。これらのソースは、データベースまたはWeb サービスです。これらのデータを実際にフェッチしたり、それぞれのデータ ソースに送信したりするコードは、DAL (データ アクセス層) と呼ばれるものです。
その間に、アプリケーションはアプリケーション要件またはユーザーニーズと呼ばれる特別な操作を行います。アプリケーションのこの戦略的な部分はBLLと呼ばれ、アプリケーションを開発しているクライアントのニーズに実際に対応します。
データをデータベースに格納する必要がある場合、BLL は DAL を基になるレイヤーとして使用します。
BLLは、データのソースと、データがどのようにフェッチまたはデータソースに送信されるかを認識しません。そのためにDALがあります。BLL はデータについてのみ知っています。それは、より頻繁にビジネス オブジェクトの形式になり、データ ビジネス オブジェクトで操作されます。
BLLは、ユーザーが Web サイトを使用しているか、デスクトップ アプリケーションを使用しているかも認識しません。そのためのプレゼンテーション層があります。
BLL は、ビジネス ロジック層を表します。ビジネスロジックレイヤーに関連するものをすべて処理する必要があります。SendEmail は、ある種のユーティリティ クラスでより優れている可能性がありますか?
また、BLL に電子メール メカニズムについて伝えると、情報が多すぎます (緊密に結合され、関数のデメテルの法則に従い、wiki/google で検索します)。あなたの BLL は電子メールを気にしませんし、気にする必要もありません。
Dataについて言及したとき、おそらく DAL (Data Access Layer) を求めています。これは、データベースなどのリソースへのデータの挿入/更新などを処理するレイヤーです。
BLL はデータに関するものではなく、ビジネスに関するものです (したがって、ビジネスロジック層)。
DAL はすべてデータに関するものです。
おそらく、SendMail メソッドを Utility クラスに移動したいと思いますが、BLL から SendMail を呼び出す必要があることは完全に正当です。
レイヤーの観点から見ると、電子メールの送信は、ビジネスロジックやデータレイヤーよりもプレゼンテーションレイヤーに適しています。
ただし、電子メールの送信のトリガーはビジネスレイヤーから発生する可能性があり、ビジネスレイヤーはプレゼンテーションレイヤーを呼び出すべきではありません。
この場合、潜在的な解決策は、ビジネスレイヤーが電子メールキューを管理し、プレゼンテーション層が電子メールのピックアップと送信を管理するようにすることです。
パターンに厳密に準拠すると、解決しようとしているよりも多くの問題が発生する場合があります。特定の実装が現在機能していて、短中期的に問題が発生せず、「完璧な」ソリューションの調査と実装のコストが高すぎる場合は、入手したものを使用してください。
ビジネス層には、ビジネス情報を保持するクラスが含まれている必要があります。このレイヤーのクラスは、ソフトウェアでのビジネスを表す必要があります。メソッドには、ビジネス ルールを含める必要があります。ビジネス層はデータを保持、検証、操作しますが、基盤となるデータ アクセス層 (DAL) は、データベースからデータを追加、削除、取得、更新する方法を知っています。ビジネス層もプレゼンテーションを気にする必要はありません。
過去のチームでは、独自の汎用クラス/メソッドで電子メールを送信するなど、あらゆるプログラム/ビジネスに表示される個別の機能に常に取り組んできました。BLL クラスが電子メールに関連しているのを見たのは、ビジネス ルールが電子メールを送信するように記述されたときだけです。この場合、BLL は送信する電子メールのテキストを認識していましたが、電子メールを送信するために一般的な電子メール クラスをインスタンス化しました。
ビジネス ロジック レイヤーは、ビジネスに関連するものを処理する必要があります。ビジネス レイヤーがデータのみに関するものであると言うのは、正確ではありません。たとえば、多くの人がパフォーマンス上の理由からデータをキャッシュする必要があるため、キャッシュがビジネス固有であると言うのは正しくありません。
ただし、特定の計算 (見積もりの計算など) は、ビジネスにのみ固有であるため、間違いなくビジネス ロジックとしてカウントできます。
電子メールの送信はビジネス ロジックではありません。これはかなり一般的な要件であり、ビジネスや業界に固有のものではありません。