kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 ZombieSheep
ZombieSheep
Вопрос

Передовые методы работы на уровне данных

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

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

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

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

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

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

TIA

10 2008-08-14T10:23:05+00:00 8
Программирование
.net
n-tier-architecture
Решение / Ответ
 JamesSugrue
JamesSugrue
14-го августа 2008 в 10:38
2008-08-14T10:38:04+00:00
Дополнительно
Источник
Редактировать
#8414765

Это действительно зависит от Вашей точки зрения на мир - я раньше был в недвойном лагере. DAL был только там к данным по запасам к ШАХТЕ - конец истории.

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

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

5
0
Serhat Ozgel
Serhat Ozgel
14-го августа 2008 в 10:28
2008-08-14T10:28:43+00:00
Дополнительно
Источник
Редактировать
#8414762

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

3
0
Mario Marinato
Mario Marinato
14-го августа 2008 в 10:27
2008-08-14T10:27:50+00:00
Дополнительно
Источник
Редактировать
#8414759

У меня есть отличная книга, которая охватывает эту тему, - Data Access Patterns, автор Клифтон Нок. В ней есть много хороших объяснений и идей о том, как отделить бизнес-слой от слоя персистентности. Вам действительно стоит попробовать. Это одна из моих любимых книг.

1
0
 jfs
jfs
14-го августа 2008 в 10:30
2008-08-14T10:30:21+00:00
Дополнительно
Источник
Редактировать
#8414763

Джеффри Пэлермо написал хорошее сообщение об этом. Он назвал его Луковой Архитектурой.

1
0
 Simon
Simon
11-го октября 2008 в 1:24
2008-10-11T13:24:06+00:00
Дополнительно
Источник
Редактировать
#8414767

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

0
0
Jon Limjap
Jon Limjap
14-го августа 2008 в 10:30
2008-08-14T10:30:51+00:00
Дополнительно
Источник
Редактировать
#8414764

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

Они переданы к универсальному сеансовому администратору данных, который не знает ни об одном из деловых объектов; единственное требование - то, что у деловых объектов, переданных к нему для СВЕРНУВШЕГОСЯ МОЛОКА, должен быть файл отображения.

0
0
Matt Hamilton
Matt Hamilton
14-го августа 2008 в 10:28
2008-08-14T10:28:08+00:00
Дополнительно
Источник
Редактировать
#8414760

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

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

я делаю следующее:

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

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

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

0
0
 Keith
Keith
14-го августа 2008 в 10:28
2008-08-14T10:28:20+00:00
Дополнительно
Источник
Редактировать
#8414761

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

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

0
0
Похожие сообщества 12
DotNetRuChat
DotNetRuChat
6 630 пользователей
Чат русскоязычного .NET сообщества http://dotnet.ru/ Правила: https://t.me/DotNetRuChat/704399 Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia, @DotNetRuJobs, @uwp_ru Флуд в @dotnettalks
Открыть telegram
Вакансии .NET
Вакансии .NET
3 530 пользователей
Правила: https://t.me/DotNetRuJobs/123 Канал с вакансиями - https://t.me/DotNetRuJobsFeed Вам могут быть интересны: @dotnetruchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia Флуд в @dotnettalks
Открыть telegram
pro.net
pro.net
1 820 пользователей
Обсуждение .NET и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). https://t.me/pro_net/34653 Флудилка: @dotnettalks
Открыть telegram
var chat = new Chat();
var chat = new Chat();
1 428 пользователей
Обсуждение вопросов по .NET Правила чата – https://blog.devdigest.today/chat-rules Чат для флуда – https://t.me/+zwxI91RGG6s2YzAy
Открыть telegram
.NET Talks - День сурка
.NET Talks - День сурка
1 324 пользователей
Свободный чат .NET разработчиков. Правила: https://t.me/dotnettalks/548269 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @DotNetRuJobs, @uwp_ru, @AvaloniaRu, @dotnettalksenglish
Открыть telegram
Чат конференции DotNext
Чат конференции DotNext
987 пользователей
Канал конференции: @dotnext_channel Ближайшая конференция — DotNext 2022 Autumn, даты будут анонсированы позднее Билеты https://tinyurl.com/DotNext2023Autumn Саппорт: @JUGConfSupport_bot
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 4 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией