それで、今日、ASP.NET MVCアプリのどこにユーティリティクラスを配置しますか?ユーティリティクラスとは、静的であり、機能を実行するためにのみ使用されるクラスを意味します。メールアドレス、件名、本文を引数として受け取るメールを送信するクラスのように。
別のフォルダと名前空間を作成するだけで十分だと思いますが、みんなの意見を聞きたかったです
あなたはしません。そして、あなた自身の例は、なぜそうでないかを示すのに最適なものです。
メールを送りたいですよね?そのため、静的クラスCommunicationUtilities
に静的SendEmail()
をどこかに作成します。一連の処理を行うクラスからこのメソッドを使用します。たとえば、ユーザーのパスワードをリセットし、新しいパスワードをメールで送信します。完璧です。
では、クラスを単体テストしたい場合はどうなりますか?パスワードをリセットするメソッドをテストするたびに、データベースが変更され(単体テストには適していません)、さらに電子メールが送信されるため(これはさらに悪いことです)。
制御の反転について読んだことがあるかもしれません。これには、単体テストを簡単にする利点があります。 IoCに関する記事では、次のようなことをする代わりに、
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
あなたがやる:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
モックとスタブを使用できます。
IoCをCommunicationUtilities
に適用してみてください。そうですね。それが壊れている理由です。
与えられた例がそうでなくても、質問は有効なものです。 Mainaの答えは完璧です。非常に具体的なコンテキストでは、私にとってはそうではありません。前述の"utility"クラスの適切なコンテキストです。
個人的には、フォルダHelpers
を作成します。ここには、拡張機能など、どこからでも呼び出せる単純な関数を配置します。この場合、静的関数です。
さて、より良い方法があれば、私は学ぶことがうれしいですが、これまでのところ:
さて、拡張機能は単なる構文上の砂糖であり、古典的な関数である可能性もあります。
以前に与えられた答えのどれも実際の質問に対処していません。 user60812は、MVCプロジェクト内のどこにユーティリティクラスを配置するかを単に尋ねました。誰もがその特異な例を思いつき、当面の質問以外のすべてについて怒鳴りました。
@ user60812、必要な抽象化のレベルに応じて、次のようにします。
ここにリンクがあります より良い答えを持つ同様の質問へ。
私見では
ユーティリティの静的クラスを作成しないでください。静力学はほとんどの場合悪い。マネージャーとも呼ばないでください。作業している内容が何であれ、論理名前空間に配置する必要があります。
例えば:
namespace Application.Notifications.Email
{
public interface ISendEmailCommand
{
void Execute(Email email);
}
}
メールアドレス、件名、本文は別の問題なので、そのためのクラス構造があるので、なぜEmail email
上記の例では。