2015-01-02 2 views
2

는 내가 모든 중요한 작업에 대한 사용자 정의 이벤트를 정의하고 다음을 제기하고 내 서비스 계층에서 asp.net MVC 5.사용하여 이벤트 대리자는 멀티 테넌트 웹 응용 프로그램에

를 사용하여 멀티 테넌트 n 계층 웹 응용 프로그램을 개발하고 있어요 이벤트가 일단 실행되면 예를 들어,

Public event EventHandler EntityCreated; 

Public void Create(Entity item) { 
    Save(item); 
    ...... 
    EntityCreated(this, item); 
} 

이러한 이벤트에 비즈니스 규칙 및 알림을 연결하려고합니다. 이벤트를 사용하려는 주된 이유는 로직을 분리하고 서비스 레이어를 수정하지 않고 더 많은 이벤트 핸들러를 쉽게 플러그인 할 수 있기 때문입니다.

질문 : asp.net에서 이벤트 및 대리인을 사용하는 것이 합리적입니까?

온라인으로 찾은 대부분의 예는 win forms 또는 wpf입니다. 다중 스레드 응용 프로그램의 경우 장점이 있습니다. 또한 이벤트는 양식에 한 번 정의되며 양식 수명 동안 활성화됩니다.

그러나 내 경우에는 이벤트는 http 요청에 따릅니다. 이러한 이벤트를 정의하는 오버 헤드가 무엇입니까?

+0

내 솔루션을 블로그에 한 당신이 술집 서브 시스템이 필요 것처럼 들린다. 이것들은 당신을 위해 그것을하지 않을 것입니다. –

+0

응용 프로그램에서 유용하다면 사용하십시오. 그렇지 않다면하지 마십시오. 귀하의 신청서에 대해 아무 것도 모른 채, 귀하의 신청서를 유용하게 사용할 수 있는지 여부는 말할 수 없습니다. – Servy

+0

@Yash 누가 그 이벤트를 구독하나요?새로운 엔티티가 생성되면 다른 모든 브라우저에 통보 할 계획입니까? – Win

답변

0

@Imran이 가리키는대로 Udi Dahan의 구현을 구현했지만 몇 가지 변경 사항이 있습니다.

내 이벤트는 서비스 레이어에서 발생하며 정적 클래스 dint를 사용하는 이벤트는 옳은 것처럼 보입니다. 또한 async/await에 대한 지원이 추가되었습니다.

이벤트도 내려갑니다. & 위임 경로가 제대로 작동했지만 요청 당 이벤트를 등록하는 오버 헤드가 느껴졌습니다.

여기 http://www.teknorix.com/event-driven-programming-in-asp-net

2

다른 사람들은 pub/sub 또는 event bus가 하나의 해결책이라는 것을 지적했습니다. 또 다른 해결책은 당신이 여기에서하려고하는 것과 비슷하지만 더 공식적으로 만들어야합니다.

고객 만들기에 대한 구체적인 예를 들어 봅시다. 새 고객이 애플리케이션에 생성되면 환영 이메일을 보내려고합니다. 도메인은 고객을 생성하고 db에 저장하는 것 뿐이며 이메일 발송과 같은 다른 세부 사항은 저장하지 않아야합니다. 그래서 CustomerCreated 이벤트를 추가합니다. 이러한 유형의 이벤트를 버튼 클릭과 같은 사용자 인터페이스 이벤트와 대조되는 도메인 이벤트라고합니다.

CustomerCreated 이벤트가 발생할 때 필요없는 작업을 수행 할 수 있도록 코드 어딘가에서 처리해야합니다. 언급 한대로 EventHandlerService를 사용할 수 있지만 (너무 많은 이벤트가 발생하면 곧 처리 될 수 있습니다) Udi Dahan이 말하는 패턴을 사용하십시오. 나는 많은 DI 컨테이너와 함께 Udi의 방법을 성공적으로 사용했으며, 패턴의 아름다움은 수업이 SRP와 호환된다는 것입니다. 리플렉션을 사용하여 응용 프로그램 부트 스트랩 시간에 특정 인터페이스와 등록 코드를 구현하기 만하면됩니다.

이 주제와 관련하여 도움이 더 필요하시면 알려 주시기 바랍니다. 코드 스 니펫을 사용하여 공유 할 수 있습니다.

+0

이것은 단지 이벤트 나 위임자를 사용하지 않는 패턴 일뿐입니다? C# 이벤트를 사용하지 않는 이유는 무엇입니까? 예를 들어, CustomerService에 대한 하나의 도메인 서비스 만 처리하는 작은 클래스로 EventHandlerService를 분할하려는 경우 이벤트를 노출하고 CustomerServiceEventHandler가 이러한 이벤트를 구독하게됩니다. – Yashvit

+0

글쎄, 물론 당신이하려고하는 것처럼 이벤트를 사용할 수 있습니다. 필자가 앞서 언급 한 패턴을 프로덕션 응용 프로그램에서 성공적으로 사용했으며 개별 처리기 클래스에서 종속성 주입을 사용하여 단위 테스트를 쉽게 수행 할 수 있도록 지원했습니다. 당신이 시도하고있는 어떤 패턴의 장애물을 극복 할 수 있다면 그것은 물론 첫 번째 선택이되어야합니다. 그렇지 않다면 적어도 좋은 대안이 있습니다. –

+0

의존성 주입에 관한 한, 필자는 자신의 접근 방식을 사용할 수 있다고 확신합니다. 나는 나의 접근 방식이 얼마나 좋은지 나쁜지에 대해 더 알고 싶다. asp.net에서 이벤트와 대리자를 사용하는 많은 예제를 보지 못했습니다. 요청 수명주기 당 이벤트를 등록하는 것은 매우 큰 오버 헤드입니까? 응용 프로그램 시작 당 한 번 등록하는 방법이 있습니까? – Yashvit

관련 문제