그래서 오늘 궁금합니다. ASP.NET MVC 앱에서 유틸리티 클래스를 어디에 두겠습니까? 유틸리티 클래스 란 정적 일 수 있고 함수를 수행하는 데 사용되는 클래스를 의미합니다. 이메일 주소, 제목 및 본문을 인수로 사용하는 이메일을 보내는 클래스와 같습니다.
별도의 폴더와 네임 스페이스를 만드는 것이 충분할 것이라고 생각하지만 모든 사람의 의견을 얻고 싶었습니다.
그래서 오늘 궁금합니다. 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
. 그렇습니다. 그것이 고장난 이유입니다.
이전에 제공된 답변 중 실제 질문에 대한 답변은 없습니다. user60812는 MVC 프로젝트 내부에 유틸리티 클래스를 어디에 둘 것인지 물었습니다. 모든 사람들은 단수의 예를 찾아 가서 당면한 질문을 제외한 모든 것에 대해 도망 쳤다.
@ user60812, 원하는 추상화 수준에 따라 다음을 수행합니다.
다음은 더 나은 답변이있는 유사한 질문에 대한 링크 입니다.
이모
유틸리티에 대한 정적 클래스를 작성하지 마십시오. 대부분의 경우 정적은 좋지 않습니다. 그들도 관리자라고 부르지 마십시오. 어떤 작업을하든 논리적 네임 스페이스에 배치해야합니다.
예를 들면 다음과 같습니다.
namespace Application.Notifications.Email
{
public interface ISendEmailCommand
{
void Execute(Email email);
}
}
이메일 주소, 제목 및 본문은 별도의 관심사이므로 클래스 구조가 있으므로 Email email
위의 예에서 사용한 이유 입니다.