.NET 3.0, 3.5, 4.0 WCF, WPF, WF, CardSpace, LINQ, Task Parallel
Net 3.0 & Linq
-
Upload
constantin-kichinsky -
Category
Technology
-
view
4.183 -
download
2
description
Transcript of Net 3.0 & Linq
.NET 3.0 и LINQ
Константин Кичинский[email protected]://zelo-stroi.livejournal.com
.NET 3.0 и LINQобзор
.NET 3.0 и LINQобзор обзор
.NET 3.0 и LINQобзор обзор
.NET 3.5
.NET
.NET
.NET
.NET
.NET
.NET
.NET
.NET
Windows Presentation
Foundation
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Преимущества для пользователя
ИнтерактивностьОптимизация под форм факторы
ЧитабельностьПроизводительность – GPUКрасота - эмоциональность
Преимущества для разработчикаПростота разработкиУниверсальность работы с графикой & MediaБогатство возможностей платформыИнструментарий
Эффект UX
МотивацияПродуктивность
УдовлетворенностьПоложительные эмоции
Повторное использование
User Experience в ПО, как выйти на новый уровень?
Windows VistaWindows Vista Office 2007Office 2007
Эволюция программного обеспечения
GDI/GDI+•Радует нас уже второе десятилетие•Гибкость даётся большими усилиями•Сложно реализовывать динамический интерфейс•Полноценно не использует возможности GPU
Windows 1.0 Windows 3.0 Windows 95 Windows XP
Проблемы разработки интерфейса
• Разработчики и дизайнеры• Функционал и красота
• UX не считается важным требованием
• Корпоративные приложения (фокус – функционал)
• Сложность разработки!!!
Windows Presentation Foundation
• Универсальность подхода к работе с пользовательским интерфейсом, документами и медиа-источниками
• Интегрирования, векторная подсистема отрисовки– Использование ресурсов GPU
• Декларативная разработка– Вовлечение дизайнеров в
разработку реальных интерфейсов
• Легкость разворачивания– Возможность администраторам
легко и безопасно разворачивать и управлять приложениями
Взаимодействие дизайнера и разработчика
Создает дизайнСоздает дизайн Добавляет бизнес логикуДобавляет бизнес логику
Дизайнер Разработчик
Взаимодействие дизайнера и разработчика
Дизайнер Разработчик
Взаимодействие дизайнера и разработчика
Дизайнер Разработчик
Взаимодействие дизайнера и разработчика
С помощью С помощью XAML XAML дизайнерыдизайнеры и разработчики и разработчики
могут выйти на новый могут выйти на новый уровень взаимодействияуровень взаимодействия
Дизайнер Разработчик
Взаимодействие дизайнера и разработчика
• Инструментарий Инструментарий Microsoft Microsoft для для дизайнеров и разработчиковдизайнеров и разработчиков
• Декларативная разработка с помощью Декларативная разработка с помощью XAMLXAML
• Инструменты других производителейИнструменты других производителей (e.g. Aurora by Mobiform, ZAM 3D by (e.g. Aurora by Mobiform, ZAM 3D by Electric Rain)Electric Rain)
Дизайнер Разработчик
Представление интерфейса с помощью XAML
XAML = Extensive Application Markup Language
•Легко инструментируемый язык, декларативная разметка•Разделение кода и представления•Может функционировать в browser или как в
скомпилированном виде независимое приложение
<Button Width="100"> OK <Button.Background> LightBlue </Button.Background></Button>
XAML
Button b1 = new Button();b1.Content = "OK";b1.Background = new SolidColorBrush(Colors.LightBlue);b1.Width = 100;
C#
Dim b1 As New Buttonb1.Content = "OK"b1.Background = New _ SolidColorBrush(Colors.LightBlue)b1.Width = 100
VB.NET
Property Engine
Input / Eventing System
.NET Framework 2.0
Desktop Windows Manager
Media Integration Layer
DirectX
Windows Vista Display Driver (LDDM)
Windows Media Foundation
Composition Engine
Print Spooler
ManagedUnmanaged
Application Services
Deployment Services
Databinding
USER INTERFACE SERVICES
XAML
Accessibility
Property System
Input & Eventing
BASE SERVICES
DOCUMENT SERVICES
Packaging Services
XPS Documents
Animation
2D
3D
AudioImaging
Text
VideoEffects
Composition Engine
MEDIA INTEGRATION LAYER
Controls
Layout
Win
dow
s Pr
esen
tatio
n Fo
unda
tion
XPS
View
er
Application Services
Deployment Services
Databinding
USER INTERFACE SERVICES
XAML
Accessibility
Property System
Input & Eventing
BASE SERVICES
DOCUMENT SERVICES
Packaging Services
XPS Documents
Animation
2D
3D
AudioImaging
Text
VideoEffects
Composition Engine
MEDIA INTEGRATION LAYER
Controls
Layout
Архитектура WPF
Что дает WPF• DirectX (Direct 3D vector) rendering• Layouts• Библиотека элементов управления (Controls library)
– Events routing• Animations• Styles• DataBinding• Visual Brush• Media• Text• Reading• 3D
Где найти?
• http://netfx3.com• http://windowsclient.net/
• Expression Studiohttp://microsoft.com/expression/
• Visual Studio 2008 “Orcas”http://msdn2.microsoft.com/en-us/evalcenter/bb655864.aspx
WCF & WWF
&CardSpace
.NET 3.0 Part 2
Следующая пятница!
.NET 3.0 и LINQобзор обзор
Эволюция C#
C# 1.0
C# 2.0
C# 3.0
Управляемый код (сборка мусора, reflection, …)
Generics (родовое программирование, статическая параметризация типов)
Декларативное программированиеLanguage Integrated Query
Что же нового в C# 3.0?
LINQ
Language Integrated Query
LINQ LINQ to to
EntitiesEntities
LINQ LINQ to to
EntitiesEntities
LINQ LINQ ToTo
SQLSQL
LINQ LINQ ToTo
SQLSQL
LINQLINQ toto
XMLXML
LINQLINQ toto
XMLXML
C# C# C# C# VB.NetVB.NetVB.NetVB.Net Others…Others…Others…Others…
LINQ LINQ ToTo
DatasetDataset
LINQ LINQ ToTo
DatasetDataset
LINQ LINQ ToTo
ObjectsObjects
LINQ LINQ ToTo
ObjectsObjects
LINQ-enabled ADO.NET
Query Expressionsvar L = new List<Person> {
new Person{ Name="Vasya", Age=16, Speciality=1 }, new Person{ Name="Petya", Age=20, Speciality=2 },new Person{ Name="Kolya", Age=20, Speciality=1 } };
var Spec = new List<Speciality>{ new Speciality{Code=1, Title="Math"}, new Speciality{Code=2, Title="CS"} };
var res = from x in L where x.Age>16 select x.Name;
var res = from s in L join sp in Spec on s.Speciality equals sp.Code select new { s.Name, sp.Title };
var res2 = from s in L group s by s.Speciality into g select new { SpecCode=g.Key, NoOfStudents = g.Count(),
Students = from x in g select x };
Query Expressions — синтаксис
from id in source{ from id in source | join id in source on expr equals expr [ into id ] | let id = expr | where condition | orderby ordering, ordering, … } select expr | group expr by key[ into id query ]
Начинается с fromНачинается с from
0 или более from, join, let, where или orderby
0 или более from, join, let, where или orderby
Заканчивается select или group byЗаканчивается select или group by
into позволяет продолжить запрос
into позволяет продолжить запрос
ОперацииОграничение Where
Проекция Select, SelectMany
Упорядочивание OrderBy, ThenBy
Группировка GroupBy
Joins Join, GroupJoin
Квантификация Any, All
Разбиение Take, Skip, TakeWhile, SkipWhile
Множественные Distinct, Union, Intersect, Except
Выбор элементов First, Last, Single, ElementAt
Агрегирование Count, Sum, Min, Max, Average
Преобразование ToArray, ToList, ToDictionary
Приведение типов OfType<T>, Cast<T>
44
• Встроенный в язык доступ к данным– Проецирование таблиц и записей в классы и
объекты– Построен на ADO.NET и .NET транзакциях
• Отображение - Mapping– Декларативное (Encoded in attributes)– Авто-генерация или генерация вручную– ОR-М (Relationships map to properties)
• Сохранение Состояния (Persistence)– Автоматическое отслеживание изменений
Automatic change tracking– Модификации через SQL или хранимые
процедуры
DLInQ для реляционных данных
Доступ к реляционным данным
var result = from x in students select{ x.Name, AvgGrade = (int)
(from g in grades where g.STUD_ID == x.STUD_IDselect g).Average(g=>g.GRADE)
}
var db = new StudDbDataContext(connStr);
var students = db.GetTable<STUDENT>();
var grades = db.GetTable<GRADES>();
Доступ к данным сегодня и завтраSqlConnection c = new SqlConnection(connStr);c.Open();SqlCommand cmd = new SqlCommand( @"SELECT s.Name, s.Group FROM Students s WHERE s.Speciality = @p0");cmd.Parameters.AddWithValue("@p0", “1“);DataReader dr = c.Execute(cmd);while (dr.Read()) { StudList.Add(new Student(dr.GetString(0), dr.GetInt(1)));}dr.Close();
var db = new StudDbDataContext(connStr);var students = db.GetTable<STUDENT>();var StudList = from s in students where s.Speciality=1 select new Student(s.Name, s.Group);
47
XLInQ для данных в XML• LInQ для XML
– Мощь и эффективность XPath / XQuery,но используя языки C# or VB
– Использует лучшее из DOM– Ориентация на элементы, а не документы– Симметрия в API между элементами и
аттрибутами– Functional construction– Текстовые ноды – просто строки (strings)– Упрощенная поддержка пространств имен XML– Быстрее, потребляет меньше ресурсов
Доступ к данным XML<?xml version="1.0" encoding="utf-8" ?><Students>
<Student Name="Petya" Age="20" Speciality="Math"> <Grades>
<Grade Subject="Math" Value="5" /> <Grade Subject="CS" Value="3" />
</Grades> </Student> <Student Name="Vasya" Age="16" Speciality="CS">
<Grades> <Grade Subject="Math" Value="4" /> <Grade Subject="CS" Value="4" />
</Grades> </Student>
</Students>
Список всех студентов: сегодня
var xdoc = new XmlDocument();xdoc.Load("students.xml");foreach (XmlElement x in
xdoc.SelectNodes("//Students/Student")){
int s=0, n=0;foreach (XmlElement y in
x.SelectNodes("Grades/Grade")){
n++; s += int.Parse(y.Attributes["Value"].Value);
}Console.WriteLine("{0} -> {1}", x.Attributes["Name"].Value, s/n);
}
С использованием XLinq
var db = XElement.Load("students.xml");var st = from x in db.Descendants("Student")
select new { Name = (string)x.Attribute("Name"),Avg = (from y in x.Descendants("Grade")
select int.Parse((string)y.Attribute("Value")) ).Average()
};
Генерация XML сегодняXmlDocument doc = new XmlDocument();XmlElement students = doc.CreateElement(“students");foreach (Student s in studentsList) { XmlElement e = doc.CreateElement(“student"); XmlElement name = doc.CreateElement("name"); name.InnerText = s.Name; e.AppendChild(name); XmlElement group = doc.CreateElement(“group"); group.InnerText = s.Group; e.AppendChild(group); students.AppendChild(e); }doc.AppendChild(students);
<students> <student> <name>Petya</name> <group>806</group> </student> …</students>
<students> <student> <name>Petya</name> <group>806</group> </student> …</students>
Императивная модель
Императивная модель
Ориентация на документ
Ориентация на документ
Нет встроенных запросов
Нет встроенных запросов
Требования к памяти
Требования к памяти
Генерация XML в XLinqvar studs = new List<Student> {
new Student{Name="Vasya", Age=10, Speciality="CS"},new Student{Name="Petya", Age=16, Speciality="Math"}};
var XDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),new XComment("Student List"),new XElement("Students",
from x in studsselectnew XElement("Student",
new XAttribute("Name", x.Name),new XAttribute("Age", x.Age))));
Console.WriteLine(Xdoc);
<!--Student List--><Students> <Student Name="Vasya" Age="10" /> <Student Name="Petya" Age="16" /></Students>
XML-трансформация
<html> <body>
<h1>Student List</h1> <ul>
<li>Petya</li> <li>Vasya</li>
</ul> </body>
</html>
<Students> <Student Name="Petya" Age="20“ /> <Student Name="Vasya" Age="16“ />
</Students>
54
Проект LINQ• Встроенный язык запросов для .NET
– Язык запросов внутри C# 3.0 и VB 9.0
• Стандартные операторы запросов– SQL-подобные запросы для любых коллекций
в .NET
• DLinq– Среда для работы с реляционными данными
при помощи запросов
• XLinq– Быстрый,мощный XML DOM с встроенным
языком запросов
Где?
• The LINQ Projecthttp://msdn2.microsoft.com/en-us/netframework/aa904594.aspx
• Cgfcb,j!
• Спасибо!
.NET 3.0 и LINQ
Константин Кичинский[email protected]://zelo-stroi.livejournal.com