DDD, работа с файлами

Обсуждаем, как правильно строить приложения
Ответить
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

DDD, работа с файлами

Сообщение Bio man » 2018.02.09, 12:56

У сущности есть файл. Я его хочу сохранять в сервисном слое (ибо больше негде. в контроллере еще можно), но для этого мне нужно инжектить стороннюю библиотеку Filesystem.
Это норм, что в сервисном слое участвуют такие инфраструктурные зависимости?
Или по канонам DDD выходит, что мне нужен доменный интерфейс FilesystemInterface, а в инфраструктуре его реализация?

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: DDD, работа с файлами

Сообщение zelenin » 2018.02.09, 13:38

в доменом слое у тебя будет VO с путем до файла например (я предпочитаю файловое хранилище абстрагировать например через minio и в доменном слое соотстветственно держать что-то типа File(id, provider_type, provider_id, getUrl()). Сам файл загружаешь/сохраняешь в сервисном слое.

таблица file(id, provider_type, provider_id)
1 minio 15
2 fs 27

таблица file_minio(id, bucket, path)
15 images /cats/cat.jpg

таблица file_fs(id, path)
27 /var/www/upload/cat.jpg

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: DDD, работа с файлами

Сообщение Bio man » 2018.02.09, 13:54

zelenin писал(а):
2018.02.09, 13:38
в доменом слое у тебя будет VO с путем до файла например (я предпочитаю файловое хранилище абстрагировать например через minio и в доменном слое соотстветственно держать что-то типа File(id, provider_type, provider_id, getUrl()). Сам файл загружаешь/сохраняешь в сервисном слое.
Ты буквально описал то, что уже сделано :D Конечно, minio я не использую, мне достаточно локального хранилища (пока что), но с возможностью смены адаптера. Благо есть готовые библиотеки ФС с кучей адаптеров.

Вернемся к вопросу. Меня немного смущает то, что в сервисах участвует инфраструктура (сторонняя библиотека league/flysystem, например), но я склоняюсь к тому, что бы не выделять доменный интерфейс для работы с ФС (и потом писать под него адаптер, что бы использовать в сервисах), а напрямую использовать эту библиотеку в сервисах (application layer).

Наверное, это риторический вопрос, и в данной ситуации верным решением будет использовать либу напрямую, чем городить интерфейсы и адаптеры ради DDD. DDD ради DDD мне не надо.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: DDD, работа с файлами

Сообщение zelenin » 2018.02.09, 14:42

Bio man писал(а):
2018.02.09, 13:54
Вернемся к вопросу. Меня немного смущает то, что в сервисах участвует инфраструктура (сторонняя библиотека league/flysystem, например)
инфраструктура - инфраструктура в общем смысле. Она обслуживает все слои.
Bio man писал(а):
2018.02.09, 13:54
но я склоняюсь к тому, что бы не выделять доменный интерфейс для работы с ФС (и потом писать под него адаптер, что бы использовать в сервисах), а напрямую использовать эту библиотеку в сервисах (application layer).

Наверное, это риторический вопрос, и в данной ситуации верным решением будет использовать либу напрямую, чем городить интерфейсы и адаптеры ради DDD. DDD ради DDD мне не надо.
проблему не понял.

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: DDD, работа с файлами

Сообщение Bio man » 2018.02.09, 15:16

zelenin писал(а):
2018.02.09, 14:42
проблему не понял.
Наверное, проблемы и нет. Точнее, она надумана.

Аватара пользователя
ElisDN
Сообщения: 4999
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: DDD, работа с файлами

Сообщение ElisDN » 2018.02.09, 16:39

Bio man писал(а):
2018.02.09, 13:54
но с возможностью смены адаптера
Если со сменой, то сделать интерфейс в приложении/домене и реализацию в инфраструктуре.

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: DDD, работа с файлами

Сообщение Bio man » 2018.02.09, 17:29

ElisDN писал(а):
2018.02.09, 16:39
Bio man писал(а):
2018.02.09, 13:54
но с возможностью смены адаптера
Если со сменой, то сделать интерфейс в приложении/домене и реализацию в инфраструктуре.
Есть готовые либы с адаптерами. Не вижу смысла заниматься выделением интерфейсов, когда есть готовые сторонние решения/интерфейсы

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: DDD, работа с файлами

Сообщение zelenin » 2018.02.09, 17:46

Bio man писал(а):
2018.02.09, 17:29
ElisDN писал(а):
2018.02.09, 16:39
Bio man писал(а):
2018.02.09, 13:54
но с возможностью смены адаптера
Если со сменой, то сделать интерфейс в приложении/домене и реализацию в инфраструктуре.
Есть готовые либы с адаптерами. Не вижу смысла заниматься выделением интерфейсов, когда есть готовые сторонние решения/интерфейсы
это одно и то же. сделать интерфейс = написать интерфейс самому или воспользоваться готовым.

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: DDD, работа с файлами

Сообщение Bio man » 2018.02.09, 20:47

Я вот гадаю, что делать с временным файлом (не факт, что он был загружен через форму, так что полагаться на GC нельзя)? Удалять его в сервисе или же возложить ответственность за подчистку тому коду, который создал файл (контроллеру, например)?

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: DDD, работа с файлами

Сообщение Bio man » 2018.02.10, 01:12

В сервисе удалять нельзя. Ибо у сервиса нет информации, будет ли файл использоваться где-то еще в приложении. Так что, оставляем эту заботу тому, кто передал файл в сервис.

Ответить