Его простейшая простая проблема с тремя уровнями. Я просто хочу убедиться, что мы используем для этого наилучшую практику, и я еще не настолько популярен со структурами.Где объекты объединяются/объединяются в трехмерную модель?
У нас есть 3 уровня:
- GUI: ASP.NET для презентационного слоя (первая платформа)
- BAL: Бизнес-слой будет обработка логики на веб-сервере в C#, поэтому мы оба можем использовать его для webforms/MVC + webservices
- DAL: LINQ to SQL на уровне данных, возвращая BusinessObjects не LINQ.
- DB: SQL будет Microsoft SQL-server/Express (еще не принят).
Давайте подумаем о настройке, где у нас есть база данных [Персон]. Они могут иметь несколько [Адрес], и у нас есть полный список всех [PostalCode] и соответствующих имен городов и т. Д.
Сделка заключается в том, что мы объединили множество подробностей из других таблиц.
{отношения}/[Таблица]
- [Человек]: 1 --- Н: {PersonAddress}: М --- 1: [адрес]
- [адрес]: N --- 1: [PostalCode]
Теперь мы хотим построить DAL для Person. Как должен выглядеть PersonBO и когда происходит объединение? Проблема бизнес-уровня для получения всех имен города и возможных адресов. Человек? или должен ли DAL завершить все это до возвращения PersonBO в BAL?
Class PersonBO
{
public int ID {get;set;}
public string Name {get;set;}
public List<AddressBO> {get;set;} // Question #1
}
// Q1: восстанавливаем ли мы объекты перед возвратом PersonBO и, если это будет массив? или это совершенно неправильно для n-level/3-level?
Class AddressBO
{
public int ID {get;set;}
public string StreetName {get;set;}
public int PostalCode {get;set;} // Question #2
}
// Q2: мы делаем поиск или просто оставляем PostalCode для последующего поиска?
Может ли кто-нибудь объяснить, в каком порядке тянуть какие предметы? Конструктивная критика очень приветствуется. : o)
Спасибо за ваше время и усилия, я знаю о принципе ленивой нагрузки, я думаю, что это больше вопрос о том, где поставить какой код или какой класс должен выполнять какие действия для того, чтобы быть «хорошим уровнем» дизайна. Я бы хотел отделить уровни «лучшей практикой», но мне трудно понять, как функция PersonBAL.GetAll() будет возвращать данные, и если это действительно «unLINQed» элементы, поскольку это может быть веб-сервис, запрашивающий данные + как h *** мы сохраняем объект/ID для сохранения/обновления при возврате GUI-уровня? – BerggreenDK
@Berggreen: Я уверен, что я ответил на этот вопрос; код lazy-loading идет в самой коллекции или в getter (если это ассоциация 1: 1). Если вы пытаетесь разоблачить этот тип API через веб-службу, вы делаете это неправильно; веб-службы выставляют операции, а не данные. Сказав, что для тех редких случаев, когда вам нужно возвращать глубоко вложенные отношения через веб-службу, типичным решением является позволить потребителю указать в запросе, какие ассоциации загружать, а остальные оставить как «null» '/ empty (без ленивой загрузки). – Aaronaught
хорошо, я мог бы просто не понять ваш ответ полностью, но тогда я буду отмечать его как ответ. : o) Еще раз спасибо !! – BerggreenDK