2011-07-28 4 views
1

MVC3 및 Razor 웹 사이트에서 작업하고 있습니다. 사용자는 마침내 데이터를 작업하기 전에 몇 가지 선택을 통해 길을 선택해야합니다. 예를 들어Requests 간 데이터 지속 MVC3 및 면도기

: 클라이언트 목록 -> (클라이언트에 의해 필터링) 버전 목록 -> 기타은 (버전에 의해 필터링)

사용자가 클라이언트를 선택하면, 그들은 클라이언트의 버전을 선택합니다. 그래서 클라이언트 ID를 쿼리 문자열에 전달합니다. 버전의 컨트롤러의 각 모드에 대해 클라이언트 ID를 전달합니다. 뷰에서 클라이언트 이름을 보여주고 싶습니다. 클라이언트에 대한 데이터베이스를 쿼리하여 ViewBag에 채워 넣습니다. 이것은 매우 비효율적 인 것처럼 보입니다. 쿠키를 사용하여 클라이언트 ID 인 &의 이름을 사용할 수있는 것 같습니다. 지금은 내 버전 컨트롤러가 난 이후의 각 컨트롤러와 다시 같은 패턴에 직면하고있어,하지만 지금은 클라이언트와 버전을 모두 유지해야 할 가지고 있음을

... 선호하는 방법은 무엇

이러한 요청을 가로 질러 이와 같은 정보를 지속시키기 위해서?

답변

1

이 매우 비효율적 인 것 같습니다

데이터베이스가 만들어 필드를 기반으로 => 쿼리 데이터를 최적화하고 해당 필드에 인덱스를 넣어 경우가 screamingly 빠르게 될 것입니다 무엇이다

. 물론 세션, 쿠키, 캐시는 데이터베이스에 대한 쿼리 수를 제한하기 위해 사용할 수있는 몇 가지 일반적인 기술이지만 가능한 경우 staleness 데이터를 얻는 것으로 가정해야합니다 (다른 스레드/프로세스 더 이상 올바른 결과를 얻지 못한 데이터베이스의 데이터를 수정했습니다.

조숙 한 최적화를 수행하기 전에 다음과 같이 추천합니다. 데이터베이스가 실제로 응용 프로그램의 병목 지점이라는 것을 알기 전까지 데이터베이스를 망치십시오. 데이터베이스는 애리조나드 기술 중 하나 (또는 ​​제대로 작성되지 않은 일부 애플리케이션)에 의존해야하지만 매우 짧은 트래픽 애플리케이션에서 병목 현상을 일으킬 수 있습니다.

+0

내가 귀하의 의견은 조기 최적화에 관한 동의이 비슷한 질문을 참조 모든 TempData에 대한 좋은 기사가 있습니다. 나는 단지 내가 게임에 익숙하고 선수를 모르기 때문에 전례가없는 미친 어리석은 일을하지 않았는지 확인하고 싶었습니다 ... 저는 지금 당신의 대답을 고를 것입니다. 하지만 @brodie가 추천 한 TempData 범위를 지정합니다. 이 접근 방식은 단지 "느껴"잘못되었습니다 ... –

0

TempData을 사용해야 현재 HTTP 요청과 다음 HTTP 요청간에 데이터를 전달할 수 있습니다. 세션을 사용한다는 점에 유의하십시오.

그렉 족쇄는 here

MVC3 multi step form - How to persist model object

+0

세션에 대한 내 ASP 클래식 혐오감으로 인해 이미 계획을 가지고 있고 몇 개의 컨트롤러 만 남았 기 때문에 지금은 피하고 있습니다 ...하지만 TempData를 살펴볼 것입니다. 내 대답이 업데이트되면 업데이트하십시오. –

관련 문제