В DDD, где сохранить созданные файлы пользователем? - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть следующая архитектура в моем проекте:

Интерфейс пользователя -> Приложение -> Домен -> Инфраструктура (4 уровня)

Мне нужно разрешить пользователю загружать изображения, где лучше хранить файлы, сгенерированные пользователем? В папке в проекте пользовательского интерфейса?

Обновление:

Вот моя структура папок:

enter image description here

Спасибо за ответ, но я тоже хочу знать, где сохранить физический файл.

Обновление 2:

Мое приложение представляет собой CMS, и эти изображения представляют собой контент, созданный пользователем.

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Пусть инфраструктура обрабатывает эти детали. Если требуется какой-либо вид валидации или бизнес-правила, тогда просто работайте с ними, как с обычными данными, потому что это все, что есть. Разница лишь в том, что вы, вероятно, сохраняете эти данные в другом месте, но это деталь реализации.

Позже вы можете захотеть сохранить эти файлы в базе данных или в системе управления версиями ... все же подробности реализации, которые можно абстрагировать на уровень инфраструктуры.

Обновление: Хорошо, где физически сохранить файл на диске. Если бы это был я, не запомнил бы их в моем коде, потому что кажется, что это может быстро усложниться. Скажем, вы хотели начать хранить эти файлы в системе управления версиями, теперь вы смешиваете код в одной системе управления версиями с данными в другой в одном и том же месте. Я бы, вероятно, выбрал место, хотя бы немного отделенное от вашего кода:

Две мысли:

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-файлов, и я сделал , чтобы сохранить файлы в папке, подобной второй, и какое-то время все получалось, но потом я решил, что эти файлы лучше хранить в базе данных как текст, а затем записывать только при необходимости экспорта.

1 голос
/ 29 сентября 2011

Я думаю, это зависит от характера загружаемых файлов изображений. Каково их предназначение, как долго они должны храниться. Для кратковременных изображений, которые не должны присутствовать слишком долго, TEMP - это великолепное место для них.

Если они предназначены для долговременных / постоянных файлов, вам нужно подумать о том, как они вписываются в модель вашего домена. Если ваш домен сконцентрирован на работе с изображениями пользователей, то, возможно, они заслуживают места в папке вашего домена (имейте в виду, что вы не можете забыть о аспектах безопасности при копировании загруженного пользователем файла в место, недоступное для общего доступа из веб-сервер, но я предполагаю, что вы позаботитесь об этом).

Однако, если эти изображения не так важны для домена и, возможно, они используются для украшения / настройки веб-интерфейса пользователя, то, возможно, они принадлежат где-то в папке пользовательского интерфейса.

DDD - это разработка решения, максимально точно моделирующего проблемную область; Вы должны знать свой домен лучше, используйте свое лучшее суждение.

0 голосов
/ 04 октября 2011

С точки зрения того, где их физически хранить, я бы лично сохранял их в базе данных, сохраняя их как двоичные в одном из типов двоичных данных, предоставляемых базой данных.

Вы можете просто иметь свойство Image для вашего объекта / DTO, которое вы конвертируете в байты при сохранении.

По моему опыту, хранение всех пользовательских данных в базе данных, а не использование физических файлов, намного меньшехлопот, потому что вам не нужно беспокоиться об уникальных именах файлов, разрешениях, перемещении серверов / развертывании и т. д. проще, потому что все они содержатся в базе данных, которую вы можете легко создавать и перемещать.

...