2012-05-13 3 views
1

내 웹 사이트에 대한 설정 페이지를 만들었습니다. 이 페이지에서 사용자는 조작 할 수있는 많은 사이트 설정이 제공됩니다. 사용자가 설정을 선택할 때 페이지가 자동으로 Ajax 요청을 실행하여 설정을 데이터베이스로 전송합니다. 내 질문은 내가 어떻게하는지에있다.MVC 3/디자인 패턴 문제

처음에는 방금 저장소를 호출했습니다. 한 번 호출하여 데이터를 다시 가져 와서 ViewModel에 넣은 다음 해당 ViewModel을 View에 제공하고 Ajax 컨트롤러가 방금 설정을 데이터베이스로 다시 보냈습니다. 이 방법은 필요하다면 가짜 저장소에 전달할 수 있기 때문에 처음에는 단위 테스트 목적으로 가장 좋았던 것처럼 보였습니다. 그런 다음 사용자가 설정을 가져 오기 위해 방금 저장소를 호출하고 원하는 설정 이름을 전달합니다.

나는 밝은 아이디어를 가지고있었습니다. SiteWideSettings라는 싱글 톤 클래스를 만들었고 사이트의 각 가능한 설정은 사이트의 속성이었습니다. 처음으로 SiteSettings를 호출하면 모든 설정이로드됩니다. 어떤 속성에서 Set가 호출되면 저장소 기능을 호출하여 설정을 보냅니다. 이제 설정보기에서 SiteWideViewOptions.Current를 전달하는 중이고 아약스 호출에서 변경된 속성을 업데이트하고 있습니다. 이것은 나를 위해 일하고있다. 그러나 생성자가 private이기 때문에 싱글 톤의 생성자에 저장소를 실제로 전달할 수 없으므로 단위 테스트는 불가능하다. 현재 가지고있는 것은 정상적으로 작동하지만 최선의 솔루션이라고는 생각하지 않습니다. 단위 테스트는 실제로 불가능합니다.

나는 다음 중 하나를 생각하지만 어떤 것이 가장 좋을지 모르겠다.

  • 전혀 이것에 대한 싱글 톤을 사용하고 그냥 내가 전에 무엇을하고 있었는지에 돌아갈 저장소에 전달하는 SiteWideSettings 클래스에 기능을 추가 SiteWideSettings 클래스
  • 에 저장소 속성을 추가 나는이 아이디어를 가지고 있었다.

이것에 대한 모든 의견은 크게 감사하겠습니다.

참고 : 알고 있습니다. 나는 내가 처음으로 시험을 치르지 않았기 때문에이 경우 단위 테스트를 잘못하고 있다는 것을 알고있다. 나는 그 점을 꾸짖지 말아라. 나는 이미 자신을 꾸짖었다. 그리고 내 다음 과제로 나는 다시는하지 않을 것이다. 약속 :

답변

1

는 "그 때 나는 밝은 생각을했다. 내가 ... SiteWideSettings와라는 싱글 톤 클래스를했다"

이 나쁜 생각처럼 들린다. 현재 데이터베이스를 유지해야하는 일부 메모리 내 캐시가 아니라 설정이 무엇인지에 대해 데이터베이스를 토대로합니다. 성능 향상을 위해 ORM을 캐싱하도록하십시오. 그렇지 않으면 여러 서버에서 사이트를 실행하려고 할 때 특히 문제가 추가되는 경우가 있습니다.

컨트롤러를 단순화하여 컨트롤러에 "설정"및 "분해"코드가 없도록하려면 IOC (예 : Autofac)를 사용하고 필요한 종속성을 삽입하십시오 (예 : DataContext 또는 Repository)을 http-request 단위로 제공합니다.

컨트롤러를 인스턴스화하고 (생성자를 사용하여 수동으로 종속성을 주입하는) 간단한 메소드를 호출 할 수 있기 때문에 액션 메소드를 더 쉽게 테스트 할 수 있습니다.

+0

지금까지 최신 정보를 유지하는 것만으로도 걱정하지 않습니다. 왜냐하면 데이터베이스에서 또는 데이터베이스로의 모든 SiteSettings 데이터 액세스가이 클래스에서 수행되기 때문입니다. 여러 서버에서 실행하는 데 문제가있을 수 있다고 말했습니까? 나는 아직도 Sr.에 없다.웹 개발과 관련하여 개발자 수준이 너무 커서 웹 서버 클러스터가 아닌 어떤 종류의 문제가 있을지 궁금합니다. 우리가 웹 서버 클러스터에 배포 한 마지막 개발 상점 이었지만 문제가 없었습니다. 나는 당신이 본 것과이 상황이 어떻게 문제에 직면 할 수 있는지 궁금 할뿐입니다. 빠른 응답을 주셔서 감사합니다 –

+1

단일 서버로 작업하기가 쉽고 로컬로 캐시 할 수 있고 걱정할 필요는 없지만 데이터베이스를 업데이트하는 시스템이 여러 개있을 경우 처리해야합니다. 더 중요한 것은, 깨달았 듯이, 싱글 톤에는 다른 문제, 특히 테스트 가능성에 관한 문제가 있습니다. –

+0

조언 해 주셔서 감사합니다! –