Передача HttpFileCollectionBase на бизнес-уровень - плохо? - PullRequest
3 голосов
/ 25 мая 2010

надеюсь, есть простое решение для этого.

У меня есть проект MVC2, который позволяет загружать файлы определенных форм. Я стараюсь держать свои контроллеры в тонусе и обрабатывать их на бизнес-уровне такого рода вещей.

Тем не менее, HttpFileCollectionBase, очевидно, находится в сборке System.Web.

В идеале я хочу позвонить примерно так:

UserService.SaveEvidenceFiles(MyUser user, HttpFileCollectionBase files);

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

Но, кажется, немного странно иметь слой с моими моделями со ссылкой на System.Web с точки зрения разделения интересов и т. Д.

Итак, у нас есть (о чем я знаю) несколько вариантов:

  1. веб-проект справился с этим, и мои контроллеры стали толще
  2. отображение HttpFileCollectionBase на то, что нравится моему бизнес-уровню
  3. прохождение коллекции и принятие ссылки на System.Web из моего бизнес-проекта

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

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

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

http://www.heartysoft.com/post/2010/05/06/ASPNET-MVC-ModelBinding-Multiple-File-Uploads-to-an-Array.aspx

Разъяснение - Я считаю, что связыватели моделей и другие методы перехвата являются удобным способом разделения логики между контроллерами и отдельно обслуживаемыми контейнерами - это код инфраструктуры / веб-логика, и поэтому он не принадлежит бизнес-логика и, следовательно, может счастливо ссылаться на System.Web и т. д.

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

0 голосов
/ 25 мая 2010

при условии, что вы не можете легко смоделировать HttpFileCollectionBase, вы можете передать что-то вроде словаря , где MyFile переносит HttpPostedFile. если HttpFileCollectionBase может быть легко смоделирован для модульных тестов, я не вижу смысла.

...