21. User Experience в ПО, как выйти на новый уровень ? Преимущества для пользователя Интерактивность Оптимизация под форм факторы Читабельность Производительность – GPU Красота - эмоциональность Преимущества для разработчика Простота разработки Универсальность работы с графикой & Media Богатство возможностей платформы Инструментарий Windows Vista Office 2007 Эффект UX Мотивация Продуктивность Удовлетворенность Положительные эмоции Повторное использование
31. 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 Managed Unmanaged 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 Audio Imaging Text Video Effects Composition Engine MEDIA INTEGRATION LAYER Controls Layout Windows Presentation Foundation XPS Viewer
32. Архитектура WPF 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 Audio Imaging Text Video Effects Composition Engine MEDIA INTEGRATION LAYER Controls Layout
33.
34.
35. WCF & WWF &CardSpace .NET 3.0 Part 2 Следующая пятница!
40. Language Integrated Query LINQ to Entities LINQ To SQL LINQ to XML C# VB.Net Others… LINQ To Dataset LINQ To Objects LINQ-enabled ADO.NET
41. Query Expressions var 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 };
42. 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 0 или более from , join , let , where или orderby Заканчивается select или group by into позволяет продолжить запрос
43. Операции Ограничение 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.
45. Доступ к реляционным данным var result = from x in students select { x.Name, AvgGrade = (int) ( from g in grades where g.STUD_ID == x.STUD_ID select g).Average(g=>g.GRADE) } var db = new StudDbDataContext(connStr); var students = db.GetTable <STUDENT> (); var grades = db.GetTable <GRADES> ();
46. Доступ к данным сегодня и завтра 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.
48.
49. Список всех студентов: сегодня 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); }
50.
51. Генерация 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> Императивная модель Ориентация на документ Нет встроенных запросов Требования к памяти
52. Генерация XML в XLinq var studs = new List <Student> { new Student {Name= "Vasya" , Age= 10 , Speciality= "CS" }, new Student {Name= "Petya" , Age= 1 6, Speciality= "Math" }}; var XDoc = new XDocument ( new XDeclaration ( "1.0" , "utf-8" , "yes" ), new XComment ( "Student List" ), new XElement ( "Students" , from x in studs select new 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 >
53.
54.
55.
56.
57.
58. .NET 3.0 и LINQ Константин Кичинский [email_address] http://zelo-stroi.livejournal.com