ASP.NET MVC : 응용 프로그램 데이터를 어디에서 보관해야합니까?

StackOverflow https://stackoverflow.com/questions/806167

  •  03-07-2019
  •  | 
  •  

문제

방금 ASP.NET MVC로 응용 프로그램을 포팅하기 시작했으며 응용 프로그램 상태를 보유하는 객체를 보유하고 있습니다 (시스템에서 실행중인 특정 프로세스를 추적하고 필요에 따라 시작하고 중지하고 MSMQ 메시지를 보내거나 수신합니다).

이 개체는 어디에 보관해야합니까? 내 현재 응용 프로그램 (httplistener 기반)에서는 싱글 톤이지만 싱글 톤은 테스트가 어렵다는 것을 알고 있습니다. 적어도 MVC 응용 프로그램 자체의 맥락 에서이 객체를 조롱하거나 테스트하는 것은 어려울 것이며 어쨌든 응용 프로그램 외부에 자체 테스트 세트가 있습니다. 그러나 테스트를 위해 스터브로 교체해야 할 수도 있습니다.

객체는 여러 컨트롤러에서 사용할 수 있어야합니다. 이 객체는 어디에 저장해야하며 컨트롤러가 어떻게 사용할 수 있습니까? 나는 내가 본 ASP.NET MVC 예제에 설명 된 이와 같은 사례를 본 적이 없다.

업데이트:

이 데이터를 데이터베이스에 저장할 수없는 이유를 설명해야한다고 생각합니다. 먼저 응용 프로그램이 무엇을하는지 설명해야합니다.

이 응용 프로그램은 서버에서 실행되는 프로세스 인 다수의 "엔진"에 의해 동적으로 생성되는 이미지를 제공하며, MSMQ를 통해 통신합니다. EnginEmanager에 대한 질문을하는 객체를 호출하겠습니다. 프로세스는 다음과 같습니다.

  1. 클라이언트는 서버에 XML 요청을 게시하여 사용될 "엔진"이름과 이미지를 설명하는 여러 매개 변수를 제공합니다.
  2. 응용 프로그램은 EnginEmanager가 해당 엔진이 작동하는지 확인합니다. 그렇지 않다면 시작합니다.
  3. 응용 프로그램은 MSMQ 메시지를 엔진에 게시하고 응답을 기다립니다.
  4. 응용 프로그램은 생성 된 이미지를 클라이언트로 다시 보냅니다.
  5. 어느 시점에서 엔진이 종료되거나 충돌하는 경우, 해당 엔진에 대한 다음 요청에서 다시 시작할 수 있도록 응용 프로그램은이를 알고 있어야합니다.
  6. 응용 프로그램이 종료되면 모든 엔진도 종료됩니다.

이러한 요청을 처리하는 여러 컨트롤러가 있으며 각각 약간 다른 작업을 수행합니다. 그들 모두는 특정 상황에서 다른 자원에 대한 액세스를 동기화 해야하는 동일한 EnginEmanager와 통신해야합니다.

보시다시피, 일반적인 데이터베이스 지원 웹 서버는 아닙니다.

도움이 되었습니까?

해결책

이 객체가 모든 사용자가 사용할 수있게하려면 세션별로 구체적이지 않으면 응용 프로그램 상태에 저장할 수 있습니다.

http://msdn.microsoft.com/en-us/library/bf9xhdz4(vs.71).aspx

그러나 Application State에는 위의 링크 된 페이지에 나열된 몇 가지 단점이 있으므로 해당 경로를 내려 가기 전에 이러한 문제가 영향을 미치지 않도록하십시오. 일반적으로 나는 Applciation State에서 명확하게 조종하고 응용 프로그램 데이터를 백엔드 DB에 저장합니다. 이 경로를 내려 가고 싶지 않기 때문에 응용 프로그램 상태는 괜찮을 수 있습니다.

다른 팁

객체를 각각의 생성자에게 전달해야합니다. Controller 인스턴스 및 컨트롤러 동작 메소드는 모두 전달 된 객체 인스턴스를 사용해야합니다. Controller 인스턴스 생성자.

기본값 ControllerFactory ASP.NET MVC와 함께 배송하면이를 수행 할 수 없습니다. 그러나이 스타일의 프로그래밍을 허용하는 무료 Addon 프레임 워크 (내가 좋아하는 것은 Autofac)가 있습니다.

응용 프로그램 데이터를 데이터베이스에 유지하고 모델 계층별로 액세스하십시오. 클라이언트는 세션 ID 만 유지합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top