Приложение базы данных N-layered, не используя ORM, как UI указывает что это потребности данных отобразиться?

Если Вы знаете размер типа, Вы могли бы сделать что-то как:

uint i = 17;
uint j = i << 1 | i >> 31;

..., который выполнил бы циклический сдвиг 32 битовых значений.

, Поскольку обобщение к циклическому сдвигу, оставленному n биты, на b, укусило переменную:

/*some unsigned numeric type*/ input = 17;
var result = input  << n | input  >> (b - n);

@The комментарий, кажется, что C# действительно рассматривает высокий бит значений со знаком по-другому. Я нашел некоторую информацию об этом здесь . Я также изменил пример для использования uint.

6
задан Lasse V. Karlsen 6 October 2009 в 08:47
поделиться

2 ответа

Используйте концепция модели представления (или объектов передачи данных), которые являются вариантами использования пользовательского интерфейса. Задача BLL - взять эти объекты и, если данные неполные, запросить дополнительные данные (которые мы называем моделью). Затем BLL может принять правильные решения о том, какие модели представления возвращать. Не позволяйте особенностям вашей модели (данных) проникать в пользовательский интерфейс.

UI <-- (viewmodel) ---> BLL <-- (model) --> Peristence/Data layers

Эта развязка позволяет лучше масштабировать ваше приложение. Независимость от персистентности, я думаю, естественно выпадает из этого подхода, поскольку создание и спецификация моделей представления можно гибко выполнять в BLL с помощью linq2ql или другой технологии orm.

1
ответ дан 17 December 2019 в 07:06
поделиться

Это совсем не простая проблема. Я видел много попыток (включая описанный вами подход IQueryable), но ни одна из них не была идеальной. К сожалению, мы все еще ждем идеального решения. А до тех пор нам придется мириться с несовершенством.

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

Даже если у вас нет роскошь переопределения технологии доступа к данным в вашем текущем проекте, это все еще помогает думать о модели предметной области с точки зрения постоянства незнания. Следствием Persistence Ignorance является то, что каждый объект домена представляет собой автономную единицу, которая не имеет понятия о таких вещах, как столбцы базы данных. Лучше всего обеспечить интеграцию данных в качестве инвариантов в таких объектах, но это также означает, что у созданного объекта Домена будут загружены все составляющие его данные. Это предложение «либо - либо», поэтому ключевым моментом становится поиск хорошей модели предметной области, которая гарантирует, что каждый объект предметной области содержит (и должен быть загружен) «соответствующий» объем данных.

Слишком детализированные объекты могут привести к болтливому DAL. интерфейсов, но слишком грубые объекты могут привести к загрузке слишком большого количества нерелевантных данных.

Очень важным упражнением является анализ и правильное моделирование агрегатов модели предметной области, чтобы они находили правильный баланс. Книга Domain-Driven Design содержит очень полезный анализ моделирования агрегатов.

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

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

3
ответ дан 17 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

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