Лучшие практики слоя данных

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

Одна точка зрения состоит в том, что слой данных должен знать о бизнес-объектах (наши собственные классы, которые представляют объект), и быть в состоянии работать с тем объектом исходно.

Противостоящая точка зрения состоит в том, что слой данных должен быть объектным агностиком и просто обработать простые типы данных (строки, bools, даты, и т.д.)

Я вижу, что оба подхода могут быть допустимыми, но моя собственная точка зрения состоит в том, что я предпочитаю первого. Тот путь, если носитель данных изменяется, бизнес-слой, должен не (обязательно) измениться для размещения нового слоя данных. Это поэтому была бы тривиальная вещь измениться от хранилища данных SQL до сериализированного xml хранилища файловой системы.

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

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

TIA

10
задан ZombieSheep 14 August 2008 в 10:23
поделиться

8 ответов

Это действительно зависит от Вашего представления мира - я раньше был в разъединенном лагере. DAL был только там к данным по запасам к BAL - конец истории.

С появляющимися технологиями, такими как Linq к SQL и Платформе Объекта, становящейся немного более популярной, затем, грань между DAL и BAL была стерта немного. В L2S особенно Ваш DAL вполне сильно связывается к Бизнес-объектам, поскольку объектная модель имеет отображение 1-1 на Ваше поле базы данных.

Как что-либо в разработке программного обеспечения нет никакого права, или неправильно ответьте. Необходимо понять требования и будущее requirments и работать оттуда. Я больше не использовал бы Феррари на съезде Dakhar, поскольку я буду Рендж Ровер в день дорожки.

5
ответ дан 4 December 2019 в 01:32
поделиться

Превосходная книга, которую я имею, который затрагивает эту тему, является Шаблонами Доступа к данным Клифтонской Зарубкой. Это имеет много хороших объяснений и хороших идей о том, как отделить Ваш бизнес-слой от слоя персистентности. Действительно необходимо дать ему попытку. Это - одна из моих любимых книг.

1
ответ дан 4 December 2019 в 01:32
поделиться

У Вас могут быть оба. Позвольте слою данных не знать о Ваших бизнес-объектах и сделать его способным к работе больше чем с одним типом источников данных. При предоставлении единого интерфейса (или абстрактный класс) для взаимодействия с данными у Вас могут быть различные реализации для каждого типа источника данных. Шаблон "фабрика" подходит здесь.

3
ответ дан 4 December 2019 в 01:32
поделиться

Jeffrey Palermo записал хорошее сообщение об этом. Он назвал это Луковой Архитектурой.

1
ответ дан 4 December 2019 в 01:32
поделиться

Проверьте Linq к SQL, если бы я создавал новое приложение прямо сейчас, то я рассмотрел бы доверие полностью, Linq основывал слой данных.

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

0
ответ дан 4 December 2019 в 01:32
поделиться

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

public IList<Foo> GetFoosById(int id) { ... }

Я делаю это:

public void GetFoosById(IList<Foo> foos, int id) { ... }

Это позволяет мне передать в простом Списке, если это - все, в чем я нуждаюсь, или более интеллектуальная реализация IList <T> (как ObservableCollection <T>), если я планирую связать с ним от UI. Эта техника также позволяет мне возвратить материал из метода как ValidationResult, содержащий сообщение об ошибке, если один произошел.

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

0
ответ дан 4 December 2019 в 01:32
поделиться

В приложениях, где мы используем NHibernate, ответ становится "где-нибудь промежуточным" в этом, в то время как XML отображающиеся определения (они указывают, какая таблица принадлежит, к которому объекту и какие столбцы принадлежат, к которому полю, и т.д.), находятся ясно в уровне бизнес-объекта.

Они передаются универсальному менеджеру сеансов данных, который не знает ни об одном из бизнес-объектов; единственное требование - то, что бизнес-объекты, переданные ему для CRUD, должны иметь отображающийся файл.

0
ответ дан 4 December 2019 в 01:32
поделиться

Старое сообщение, но поиск подобной информации, я столкнулся с этим, которое объясняет это приятно.

0
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

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