2011-09-29 4 views
2

나는 내 프로젝트에서 다음 아키텍처있다 :DDD에서 사용자가 생성 한 파일을 저장할 위치는 어디입니까?

UI -> 응용 프로그램 -> 도메인 - 나는 사용자가 이미지를 업로드 할 수 있도록> 인프라 (4 계층)

을 필요로하는 곳에 더 나은 곳으로 사용자가 생성 한 파일을 유지 하시겠습니까? UI 프로젝트의 폴더에 있습니까?

업데이트 :

가 여기 내 폴더 구조입니다 : 답변

enter image description here

감사합니다,하지만 난 어디 심령 파일을 저장하는 방법도 알고 싶어요.

업데이트 2 :

내 애플은 CMS이며, 이러한 이미지는 사용자가 생성 한 콘텐츠입니다.

답변

3

인프라 스트럭처에서 이러한 세부 사항을 처리하도록하십시오. 어떤 종류의 유효성 검사 또는 비즈니스 규칙이 필요한 경우 일반 데이터처럼 처리하십시오. 이것이 그 전부이기 때문입니다. 유일한 차이점은이 데이터를 다른 장소에 저장하는 것이지만 이는 구현 세부 사항입니다.

나중에이 파일을 데이터베이스 또는 버전 관리에 저장할 수 있습니다. 구현 세부 정보는 인프라 계층으로 추상화 할 수 있습니다.

업데이트 : 확인 : 실제로 파일을 드라이브에 저장합니다. 그것이 나라면,은 복잡한 코드를 신속하게 만들 수있는 것처럼 보입니다. 버전 관리에이 파일들을 저장하기를 원한다고하자. 이제 한 버전 제어 시스템의 코드와 다른 곳의 다른 버전의 데이터를 혼합 할 것입니다.

두 가지 생각 :

Venus.Application 
Venus.Domain 
Venus.Infra 
Venus.Tests 
Venus.UI.Web 
Venus.Files (or Data) 

또는

Venus.Application 
Venus.Domain 
Venus.Infra 
    \Files (or Data) 
Venus.Tests 
Venus.UI.Web 

내가 사용자 xml 파일을 업로드 같은 것을 할, 그리고 않았다 나는 아마 적어도 약간의 코드에서 분리 된 장소를 선택할 것 두 번째 폴더와 같은 폴더에 파일을 저장했는데 잠시 동안 문제가 해결되었습니다. 그런 다음 파일을 내보낼 때 텍스트가 기록 될 때 데이터베이스에 저장하는 것이 더 좋습니다.

+0

업데이트를 참조하십시오. –

1

업로드되는 이미지 파일의 문자에 따라 다르다고 생각합니다. 그들의 의도 된 용도는 무엇이며 얼마나 오래 저장할 필요가 있습니다. 아주 오래 동안있을 필요가없는 단기적인 이미지의 경우, TEMP는 훌륭한 위치입니다.

장기적/영구적 파일 인 경우 도메인 모델에 맞는 방법을 고려해야합니다. 도메인이 사용자의 이미지 작업에 중점을 두는 경우 도메인 폴더에 위치 할 자격이 있습니다 (사용자가 업로드 한 파일을 다른 사용자가 공개적으로 액세스 할 수없는 위치로 복사하는 보안 측면을 잊지 마세요. 웹 서버,하지만 당신이 그걸 돌보고 있다고 가정합니다).

그러나 이러한 이미지가 도메인에별로 중요하지 않으며 사용자의 웹 경험을 아름답게/사용자 정의하는 데 사용되는 이미지 인 경우 UI 폴더의 어딘가에있을 수 있습니다.

DDD는 문제 도메인을 최대한 가깝게 모델링하는 솔루션을 설계하는 데 관한 것입니다. 최선의 판단으로 도메인을 가장 잘 알아야합니다.

+0

사실입니다. 도메인과 밀접하게 모델링하고 싶습니다. 인프라 스트럭처에 이러한 세부 정보를 처리하게하는 것이 가장 중요하다는 것을 강조 할 것입니다. – Steve

+0

@ 대니 내 앱은 CMS이며 이러한 이미지는 사용자가 생성 한 콘텐츠입니다. 어디에서 구할 것인가? –

+0

이미지가 CMS의 도메인과 관련된 사용자 생성 콘텐츠 인 경우 다음과 같이 UserContent 폴더가 적절할 수 있습니다. –

0

실제로 물리적으로 저장하는 측면에서 데이터베이스에서 제공하는 바이너리 데이터 유형 중 하나에 바이너리로 저장하여 데이터베이스에 저장합니다.

개체/DTO에 저장할 때 바이트로 변환하는 Image 속성 만 있으면됩니다.

실제 파일을 사용하는 것이 아니라 데이터베이스에 모든 사용자 데이터를 저장 한 경험으로 볼 때 고유 한 파일 이름, 사용 권한 및 이동 서버/배포 등에 대해 걱정할 필요가 없으므로 모든 사용자 데이터가 포함되어 있기 때문에 훨씬 쉽습니다. 데이터베이스를 백업하고 쉽게 이동할 수 있습니다.

관련 문제