MVC: репозитории и сервисы

(полный) SVD приближает вас. Это дает для матрицы 3x3 A

A = U*S*V'

, где все матрицы 3x3, S диагональна, а U и V ортогональны. К сожалению, U и V не могут быть вращениями, то есть они могут иметь определитель -1.

Один из возможных способов - вычислить определитель U и, если он равен -1, заменить его на

U~ = U * diag(-1,1,1) (ie negate the first col of U)

и заменить S на

S~ = S*diag( -1, 1, 1) (ie negate the top left elt of S)
[117 ] И затем аналогично для V (хотя сейчас, из-за транспонирования вы хотите отрицать первый ряд V)

5
задан Jim G. 4 October 2009 в 03:31
поделиться

3 ответа

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

Репозиторий может - и если - создают сложные объекты комбинации, содержащие несколько связанных объектов. В управляемом доменом дизайне их называют, агрегируется - наборы связанных объектов, организованных в некоторую связную структуру. Ваш код не должен звонить GetCustomer(), GetOrdersForCustomer(), GetInvoicesForCustomer() отдельно - Вы просто звоните myCustomerRepository.Load(customerId), и Вы возвращаете глубокий клиентский объект с теми свойствами, которые уже инстанцируют. Я должен также добавить, что, если Вы возвращаете отдельные объекты на основе определенных таблиц базы данных, затем это - совершенно допустимый подход, но это не действительно репозиторий в с - это - просто уровень доступа к данным.

С одной стороны существует убедительный аргумент, что Linq-SQL возражает с их 'умными' свойствами и их задержанным выполнением (т.е. не загружающийся Клиент. Заказы, пока Вы на самом деле не используете его) абсолютно допустимая реализация шаблона репозитория, потому что Вы на самом деле не выполняете код базы данных, Вы выполняете операторы LINQ (которые затем переводятся в код DB базового поставщика LINQ),

С другой стороны, как сообщение Matt Briggs указывает, L2S справедливо сильно связывается к Вашей структуре базы данных (один класс на таблицу) и имеет ограничения (никакие много-много отображений, например) - и можно быть более обеспеченным использованием L2S для доступа к данным в репозитории, но затем отобразить объекты L2S на собственные объекты модели предметной области и возвратить их.

11
ответ дан 18 December 2019 в 12:02
поделиться

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

При использовании этого вида шаблона можно хотеть к ре, думают L2S. Это генерирует уровень доступа к данным для Вас, но действительно не обрабатывает несоответствие импеданса, необходимо сделать это вручную. При рассмотрении чего-то как NHibernate то отображение сделано более устойчивым способом. L2S больше для 2 приложений уровня, где Вы хотите быстрый и грязный DAL, на котором можно расшириться легко.

2
ответ дан 18 December 2019 в 12:02
поделиться

При использовании LINQ затем, я верю, что репозиторий должен быть контейнером для синтаксиса LINQ. Это дает Вам уровень абстракции стандартных программ доступа к базе данных от Вашего взаимодействия через интерфейс объекта модели. Как Dylan упоминает выше существуют другие представления о вопросе, некоторым людям нравится возвращать IQueryable, таким образом, они могут продолжить запрашивать базу данных позже после репозитория. Нет ничего неправильно ни с одним из этих подходов, пока Вы ясны в своих стандартах для Вашего приложения. Существует больше informaiton на лучших практиках, которые я использую для репозиториев LINQ здесь.

2
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: