Я должен исправить свой комментарий сверху. Ваш dataView
должен быть типа [TableSection: [Category]]
.
Теперь несколько слов о вашей setData
функции. В вашем цикле вы используете оператор объединения нулей ??
при инициализации категории. Может быть, я что-то упустил, но я не вижу, как это может привести к фатальной ошибке. В категории нет сбойного инициализатора. Сейчас я точно не знаю, что такое datas
и откуда оно берется, но если некоторые из свойств там являются необязательными, я бы рекомендовал сделать их необязательными и в категории.
Затем попробуйте поработать с map
для преобразования ваших данных. Вот пример:
var dataView = [TableSection: [Category]]()
var dataViewLoop = (0 ..< 10).map { i -> Category in
let status = i % 2 == 0 ? "confirmed" : "request"
return Category(clientName: "\(i)", appType: "\(i)", appDateTime: "nil", status: status, photo: nil)
}
dataView[.appointments] = dataViewLoop.filter({ [110].status == "confirmed" })
dataView[.requests] = dataViewLoop.filter({ [110].status == "request" })
Мне лично не нравится, когда мои объекты распространяются через слои. Мой POCO's возврата DAL (конечно, это часто означает дополнительную работу, но я нашел этот намного более чистый - возможно, что это будет более просто в следующей версии.NET ;-)).
Вопрос не так прост и существует большое другое размышление о предмете (я продолжаю спрашивать меня тот же вопрос, что Вы).
Возможно, Вы могли смотреть на демонстрационное приложение Витрины MVC: Мне нравится сущность понятия (отображение, которое происходит в слое данных особенно).
Надеюсь, это поможет.
Я возвращаю IQueryable POCOs от моего DAL (который использует LINQ2SQL), таким образом, никакой объект объекта Linq никогда не оставляет DAL. Эти POCOs возвращаются к службе и уровням UI, и также используются для пасования назад данных в DAL для обработки. Linq обрабатывает это очень хорошо:
IQueryable<MyObjects.Product> products = from p in linqDataContext.Products
select new MyObjects.Product //POCO
{
ProductID = p.ProductID
};
return products;
Для большинства проектов мы используем LINQ для объектов SQL как наши бизнес-объекты.
LINQ разработчику SQL позволяет Вам управлять доступностью классов и свойств, которые это генерирует, таким образом, можно ограничить доступ к чему-либо, что позволило бы потребителю нарушать бизнес-правила и обеспечивать подходящие общедоступные альтернативы (которые уважают бизнес-правила) в частичных классах.
Существует даже статья о реализации Вашей бизнес-логики этот путь на MSDN.
Это сохраняет Вас от записи большого количества утомительного шаблонного кода, и можно даже сделать объекты сериализуемыми, если Вы хотите возвратить их из веб-сервиса.
Создаете ли Вы отдельный слой для бизнес-логики, действительно зависит от размера Вашего проекта (с большими проектами, обычно имеющими большее изменение между бизнес-логикой и уровнями доступа к данным).
Я верю LINQ к попыткам Объектов предоставить универсальное решение этой загадки путем поддержания двух отдельных моделей (концептуальная схема для бизнес-логики и схема устройства хранения данных для доступа к данным).
Существует подобное сообщение здесь, однако, я вижу, что Ваш вопрос больше, о каком необходимо сделать, а не как необходимо сделать это.
В небольших приложениях я нахожу секунду ПОСТЕПЕННО реализацией, чтобы быть расточительным в объемных приложениях (особенно те, которые реализуют веб-сервисы), ПОСТЕПЕННО, объект (обычно Объект Передачи данных) полезен.
Если Ваше приложение попадает в более поздний случай, можно хотеть посмотреть на Услуги передачи данных ADO.NET.
Надежда, которая помогает!
Следует иметь в виду, что Linq к SQL не является перспективной технологией. Это было выпущено, это интересно играть с, но Microsoft не берет его нигде. У меня есть чувство, что это не будет поддерживаться навсегда также. Смотрите на Платформу объекта (EF) Microsoft, которая включает некоторые Linq к совершенству SQL.
Я использую пользовательский генератор LinqToSQL, положился на тот, который я нашел в Интернете вместо MSLinqToSQLGenerator по умолчанию. Для создания моих верхних уровней независимыми от таких объектов Linq я создаю интерфейсы, чтобы представить каждого из них и затем использовать такие интерфейсы в этих слоях. Пример:
public interface IConcept {
long Code { get; set; }
string Name { get; set; }
bool IsDefault { get; set; }
}
public partial class Concept : IConcept { }
[Table(Name="dbo.Concepts")]
public partial class Concept
{
private long _Code;
private string _Name;
private bool _IsDefault;
partial void OnCreated();
public Concept() { OnCreated(); }
[Column(Storage="_Code", DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true)]
public long Code
{
//***
}
[Column(Storage="_Name", DbType="VarChar(50) NOT NULL")]
public string Name
{
//***
}
[Column(Storage="_IsDefault", DbType="Bit NOT NULL")]
public bool IsDefault
{
//***
}
}
Конечно, существует намного больше, чем это, но это - идея.
Я на самом деле боролся с этим, также. Используя простой ванильный LINQ к SQL, я быстро отказался от инструментов DBML, потому что это связало объекты с плотно к DAL. Я боролся за более высокий уровень незнания персистентности, хотя Microsoft не сделала его очень легким.
То, что я закончил тем, что делал, было почерком, который слой незнания персистентности, при наличии DAL наследовали от моего POCOs. Наследованные объекты выставили те же свойства ПОСТЕПЕННО, это наследовалось, поэтому в то время как в слое незнания персистентности, я мог использовать атрибуты для отображения на объекты. Названный затем мог бросить наследованный объект назад к его базовому типу или иметь DAL, делают это для них. Я предпочел последний случай, потому что он уменьшил объем броска, который должен был быть сделан. Предоставленный, это было, прежде всего, реализацией только для чтения, таким образом, я должен буду пересмотреть ее для более сложных сценариев обновления.
Объем ручного кодирования для этого является довольно большим, потому что я также должен вручную поддержать (после кодирования, для начала) контекст и поставщика для каждого источника данных, сверх объектного наследования и отображений. Если бы этот проект удерживался от использования, то я определенно переместился бы в больше надежного решения.
С нетерпением ожидая Платформы Объекта, незнание персистентности является обычно требуемой функцией согласно блогам дизайна для команды EF. Тем временем, если Вы решаете пойти путем EF, Вы могли бы всегда смотреть на предварительно прокрученный инструмент незнания персистентности, как проект EFPocoAdapter на MSDN, для помощи.