Kurumsal Yazılım Geliştirme ve Visual Studio 2008


Published on

Published in: Technology
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Think of EscalateToManager as a blocking activity. While it is waiting, it no longer needs to take CPU or system resources. It only needs a small stub to wait for a reply. It could also time out. DecrementInventory could fail and a whole set of compensating activities could need to occur as a result. Three are a few styles. Start at the top and go to the bottom. Or states can be transitioned between and actions can be taken when events occur. You can create other styles as well.
  • Speaker Notes These are the what we refer to as the three pillars of Indigo . They are the three design goals of Indigo that really sum up what that technology is all about. They’re what we’ll be drilling into for the remainder of this presentation. <click> The first design goal is productivity . When we talk about productivity, we’re talking about bringing together the various technologies available today for building distributed applications (COM+ and .NET Enterprise services, MSMQ, .NET Remoting, ASP.NET Web Services, Web Services Enhancements (WSE)) into a single, unified programming model. Why is this important? First, it reduces complexity by allowing us to focus on a single programming model rather than learn multiple programming models. Second, it allows us to compose/combine the functionality of today’s technologies in ways that we can’t today. Finally, it allows us to use a single programming model for building distributed applications that communicate with one another on a single machine, across multiple machines, and across the Internet. <click> The second design goal is interoperability and integration . We talk about interoperability and integration on two different pivots. First, Indigo enables you to build services that speak advanced Web services protocols (WS-*), enabling your application to communicate with other WS-* compliant services running on other platforms. Second, we built Indigo to provide a smooth upgrade and interop story for your distributed applications built on today’s technologies (WSE, ASMX, .NET Enterprise Services, System.Messaging, .NET Remoting). Why are Interop and Integration important? First, the ability to communicate with applications running on other platforms provides you with the flexibility you need when working in a heterogeneous environment. Second, the ability to communicate with existing applications protects your investments and provides you with an optional, incremental upgrade path to Indigo. <click> The third design goal is all about service orientation . Indigo provides developers with a highly productive programming model for building service-oriented applications. By using Indigo’s attribute-based programming to define your services, you can dramatically reduce the amount of code you write to build secure, reliable services. Indigo also facilitates the development of applications that adhere to the “four tenets of service-orientation” that we’ll drill into later in the presentation. These tenets help ensure that your services are extremely flexible and resilient to change, thereby reducing long-term maintenance costs. Transition to next slide: We’ll spend the rest of this presentation drilling into these 3 concepts.
  • Speaker Notes Today, when we build distributed applications, we have a choice of programming models. Each programming model has a different set of APIs, different feature sets, and a different core set of scenarios: ASP.NET Web Services (ASMX) – Our current Web services stack provides basic Web services support and interoperability with Web services running on non-Microsoft platforms. Web Services Enhancements (WSE) – A supported extension to the .NET Framework that provides end-to-end standards-based security for Web services. System.Messaging – This namespace in the .NET Framework provides managed APIs to MSMQ, enabling developers to build asynchronous reliable distributed applications. Enterprise Services – Provided through the System.EnterpriseServices namespace in the .NET Framework, Enterprise Services (or “ES”) provides managed APIs to COM+. COM+ provides component-based programming for doing enterprise critical functionality such as transactions. Remoting – Provided through the System.Remoting namespace in the .NET Framework, .NET Remoting exposes the CLR type system remotely and provides location transparency for objects. While these technologies provide a wide range of functionality, they exist in silos – isolated from one another. This creates an impedance mismatch across the technologies hindering our ability as developers to “compose” or combine functionality across them. For example: You want to use .NET Remoting for it's rich extensibility model, but you want a ES-style transaction to flow. How do you do this? You want to use ASMX for its interoperability, but you want to provide direct reliable messaging guarantees. How is this accomplished? Today, scenarios like these that involve the combination of functionality across these technologies are more of a challenge than it should be. They often involve hundreds and sometimes thousands of lines of code to accomplish. With Indigo, the challenges of silo programming models becomes a thing of the past… Indigo provides you with a unified programming model that brings together the best aspects of existing Microsoft technologies. What this means is that, with Indigo, you will no longer need to wonder “which technology do I use (ASMX, Remoting, etc)” when building a connected system. All of the application-to-application and intra-application communication for your connected will be handled by Indigo. This unified programming model is exposed to you through the System.ServiceModel namespace. Since Indigo provides all of the features of these existing Microsoft technologies, Indigo supports all of the scenarios currently supported by these technologies. In addition, Indigo enables new scenarios that are currently not possible or very hard to implement with existing technologies because Indigo allows you to compose functionality across these existing technologies. For example, this means that you’ll be able to achieve secure, reliable, transacted Web services by combining/composing the functionality that previously existed in silos. On a related note, we’re also doing a lot of work to preserve your existing investments in ASMX, ES, and other existing technologies shown on this slide. We do this through a number of mechanisms including the ability to communicate between Indigo services and existing ES-based applications for example. We’ll talk about this more later in the presentation.
  • Windows Presentation Foundation (WPF) is a productive, unified approach to UI, Media, and Documents that you can use to deliver unmatched user experiences to your customers.
  • Stands for Extensive Application Markup Language Easily toolable, declarative markup Build applications in simple declarative statements Can be used for any CLR object hierarchy Code and content are separate Streamline collaboration between designers and developers Developers add business logic, while designers design Can be rendered in the browser (as part of a web page) or as a standalone application XAML WPF introduces a new role to the rich client software development team – that of professional designer. Gone are the days of boring gray buttons and poorly designed applications: with the declarative programming model enabled by XAML, you can split off presentation and logic in the same way as with a web application. XAML is a markup language that is inherently toolable, allowing for designers and developers to use independent tools. XAML (which stands for "Extensible Application Markup Language") provides an XML-based way to specify declaratively a hierarchy of objects with properties and logic. We're positioning XAML as a user interface design language, because it is ideal for generating the kind of code that traditionally resided in a hidden #region area and was hard to maintain by both developers and tools. If you've ever wanted to edit the auto-generated blocks of code created by Visual Studio but been dissuaded by the warning comments writ large, or you've gone ahead regardless and been burnt badly when your tools refused to load your changes, you'll appreciate XAML. XAML is not Avalon, and Avalon is not XAML. It so happens that they come out of the same team at Microsoft, but they are not intrinsically wedded together. I've been asked before "where can I go to get the XSD for XAML?" and hopefully it's now clear that this question doesn't make much more sense than asking for the C# schema. XAML gets compiled into an object definition.
  • Kurumsal Yazılım Geliştirme ve Visual Studio 2008

    1. 2. <ul><ul><li>Kurumsal Yazılım Geliştirme </li></ul></ul><ul><ul><li>2008 Teknolojileri genel bakış </li></ul></ul><ul><ul><li>C# 3.0 Dil Yenilikleri – LINQ </li></ul></ul><ul><ul><li>Object Relational Mapping </li></ul></ul><ul><ul><li>LINQ to SQL, Entity Framework </li></ul></ul><ul><ul><li>Asp.Net 3.5 </li></ul></ul><ul><ul><li>.Net Framework 3.0 Teknolojileri </li></ul></ul><ul><ul><li>Tavsiyeler </li></ul></ul>
    2. 3. <ul><ul><li>Kurumsal yazılımlar genellikle kalıcı veri ile uğraşır. Ki bu yazılımlar yıllarca veri saklamaya ihtiyaç duyarlar. Ancak bu yazılımlar yıllar boyunca değişir. Çoğu zaman üzerinde çalışması için hazırlandığı donanımlar, işletim sistemi ve derleyiciler değişir. Çoğu zaman tutulan veriler eskilere dokunulmadan genişletilir. </li></ul></ul>
    3. 4. <ul><ul><li>Çoğu zaman kullanıcılar veriye eş zamanlı(concurrency) erişir. </li></ul></ul><ul><ul><li>Çoğu zaman Kurumsal yazılımların birden çok fazla Kullanıcı Arayüzü bulunur. </li></ul></ul><ul><ul><li>Kurumsal yazılımlar çok nadiren tek başına çalışır. Çoğunlukla başka uygulamalar ile çalışmak zorundadır. </li></ul></ul><ul><ul><li>Çoğu zaman &quot; mantık dışı &quot; İş Mantığı kodları nedeniyle yazılım yapmak tamamen işkence haline dönüşür. </li></ul></ul>
    4. 5. Microsoft’un 2008 yazılım geliştirme ürünleri daha çok C#’ın kullanım alanları göz önüne alınarak oluşturuldu. Genel bir dilden çok Kurumsal Yazılım Geliştirme alanına yöneldi.
    5. 6. <ul><ul><li>Nesneye Dayalı Programlama geliştirmeleri </li></ul></ul><ul><ul><ul><li>Extension Methods </li></ul></ul></ul><ul><ul><ul><li>Anonymous Types </li></ul></ul></ul><ul><ul><ul><li>Lambda Expressions </li></ul></ul></ul><ul><ul><ul><li>LINQ </li></ul></ul></ul><ul><ul><li>Veri erişim geliştirmeleri </li></ul></ul><ul><ul><ul><li>LINQ to SQL </li></ul></ul></ul><ul><ul><ul><li>Entity Framework </li></ul></ul></ul>
    6. 7. <ul><ul><li>Servis Tabanlı Yazılım Geliştirme </li></ul></ul><ul><ul><ul><li>Windows Communication Foundation(WCF) </li></ul></ul></ul><ul><ul><li>İş Akışlarını Yazılımlara Yerleştirme </li></ul></ul><ul><ul><ul><li>Windows Workflows Foundation(WF) </li></ul></ul></ul><ul><ul><li>Kullanıcı Deneyimi Geliştirme </li></ul></ul><ul><ul><ul><li>Windows Presentation Foundation </li></ul></ul></ul>
    7. 8. Language INtegrated Query .Net dilleri içinde SQL tarzı sorgu yazılmasına izin veren bir teknolojidir.
    8. 9. SqlConnection c = new SqlConnection(…); c.Open(); SqlCommand cmd = new SqlCommand( @&quot;SELECT c.Name, c.Phone FROM Customers c WHERE c.City = @p0&quot; ); cmd.Parameters.AddWithValue(&quot;@po&quot;, &quot;London&quot;); DataReader dr = c.Execute(cmd); while (dr.Read()) { string name = dr.GetString(0); string phone = dr.GetString(1); DateTime date = dr.GetDateTime(2); } dr.Close(); Sorgu tırnak içinde Zayıf-bağlı Parametre Hatalar, derleme anında alınamaz Tip-Güvenli olmayan alanlar
    9. 10. public class Customer { public int Id; public string Name; public string Phone; … } Table<Customer> customers = db.Customers; var contacts = from c in customers where c.City == &quot;London&quot; select new { c.Name, c.Phone }; Sınıflar Veritabanı kayıtlarını tanımlar Tablolar Tip-Güvenli koleksiyonlardır Sorgu dilin doğal bir parçası Derleyici sizi hatalardan korur
    10. 11. IQueryable<Telefon> findTelefons(string ad) { TelDBDataContext ctx = new TelDBDataContext(); IQueryable<Telefon> tel = from c in ctx.Telefons where c.Kisi.AdSoyad == ad select c; return tel; } private void Form_Load(…) { GridView1.DataSource = findTelefons(ad); kayitSayisi.Text = findTelefons(ad).Count() .ToString(); } Verileri henüz kullanmadan hazırlanmış sorgular Gelen kayıt sayısını aynı sorgu üzerinden çek “ Select * From Telefon …” üretir “ Select Count(*) From Telefon …” üretir
    11. 12. LINQ Query Objects SubmitChanges() SQL Query Rows SQL or Stored Procs Linq Linq2Sql ya da Bir ORM Aracı ile DB Engine from c in db.Customers where c.City == &quot;London&quot; select new { c.Name, c.Phone } select Name, Phone from customers where city = 'London' Application Servisler: - Değişim yönetimi - Concurrency control
    12. 13. <ul><ul><li>Type-Safe Sorgular ve Intellisense Desteği </li></ul></ul><ul><ul><li>Yeniden Kullanılabilir sorgular </li></ul></ul><ul><ul><ul><li>Sayfalama </li></ul></ul></ul><ul><ul><ul><li>Özetleme(Standart sorgu kullanılarak sadece gerekli kolonları çağırma) </li></ul></ul></ul><ul><ul><ul><li>DB Değişikliklerin kolay implemente edilmesi </li></ul></ul></ul><ul><ul><li>Herhangi bir IQueryable implemente etmiş nesne sorgulanabilir. </li></ul></ul><ul><ul><li>DB Inheritance için sorgular </li></ul></ul><ul><ul><ul><li>Persistence for Inherited Objects desteği </li></ul></ul></ul>
    13. 14. <ul><ul><li>İlişkisel verileri, nesne tanımlarına dönüştürerek onlar üzerinde Nesneye Dayalı uygulama geliştirebilmemizi sağlayan araçlardır. </li></ul></ul>
    14. 15. <ul><ul><li>Şu 4 temel özelliği vardır: </li></ul></ul><ul><ul><ul><li>Temel CRUD fonksiyonlarını gerçekleştirebilmek için bir API </li></ul></ul></ul><ul><ul><ul><li>Nesneler üzerinde sorgular oluşturabilmemiz için sağlanmış bir sorgu dili ya da bir API </li></ul></ul></ul><ul><ul><ul><li>Mapping(Eşleme) tanımlarını yapabilmek için bir araç </li></ul></ul></ul><ul><ul><ul><li>ORM gerçekleştirimi yapacak Transactional veri kalıcılığı, lazy-load ilişkilerin getirilmesi vb. işlemleri gerçekleştirecek bir framework… </li></ul></ul></ul>
    15. 16. <ul><ul><li>Yararları </li></ul></ul><ul><ul><ul><li>Daha yüksek üretkenlik </li></ul></ul></ul><ul><ul><ul><ul><li>Konsantrenizi CRUD işlemlerinden İş Mantığına yöneltebilmenizi sağlar. </li></ul></ul></ul></ul><ul><ul><ul><li>Daha kolay bakım </li></ul></ul></ul><ul><ul><ul><ul><li>Daha az satır kod, her zaman yazılımı daha anlaşılabilir kılar, daha önemlisi de daha kolay “ refactor” edilir. Kodlar daha çok İş Mantığından oluşur. </li></ul></ul></ul></ul>
    16. 17. <ul><ul><li>Yararları </li></ul></ul><ul><ul><ul><li>Marka bağımsız DB </li></ul></ul></ul><ul><ul><ul><ul><li>ORM aracılığıyla yazılan DB erişim kodları sayesinde kolaylıkla farklı Database’ler üzerinde çalıştırılabilir. </li></ul></ul></ul></ul><ul><ul><ul><li>Performans </li></ul></ul></ul><ul><ul><ul><ul><li>Daha iyi yönetilebilir Caching sayesinde daha yüksek peroformansa erişilebilir. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>(Örn: Distributed caching) </li></ul></ul></ul></ul>
    17. 18. Linq 2 Sql Vs 2008 ile piyasaya çıkan zayıf ancak kullanımı çok kolay bir ORM aracı
    18. 19. Linq to Sql <ul><ul><li>Attribute tabanlı olarak çalışıyor. </li></ul></ul><ul><ul><li>Vs2008 içinde Wizard desteği var. </li></ul></ul><ul><ul><li>CRUD Fonksiyonları çok hızlı gerçekleştirilebiliyor. </li></ul></ul><ul><ul><li>SP ve Function desteği devam ediyor. </li></ul></ul><ul><ul><li>Batch işlemler gerçekleştirilebiliyor. </li></ul></ul><ul><ul><li>Association(Relation)’lar kullanılabiliyor. </li></ul></ul><ul><ul><li>Concurrency kontrol için TimeStamp kullanabiliyor. </li></ul></ul>
    19. 20. Linq to Sql Tablolar Fonksiyon ya da Stored Procedure’ler Entity’s Associations (Relations)
    20. 21. Yeni Veri Girişi TelDBDataContext ctx= new TelDBDataContext(); Kisi ali = new Kisi() { AdSoyad = &quot;Cin Ali&quot; }; ali.Telefons.Add(new Telefon(){TelefonNo=&quot;123456789&quot;}); ctx.Kisis.InsertOnSubmit(ali); ctx.SubmitChanges(); Object Initializing Tüm İşlemleri gerçekleştirir Insert işlemi
    21. 22. Association üzerinden veri ekleme TelDBDataContext ctx= new TelDBDataContext(); var kisi = (from c in ctx.Kisis where c.AdSoyad.Contains(“ Ali Veli “) select c).First(); kisi.Telefons.Add(new Telefon() { TelefonNo = &quot;1234567&quot; } ); ctx.SubmitChanges(); Tablolar Tip-Güvenli koleksiyonlar String içinde taratma işlemi Değişiklikleri takip eder. Tüm değişiklikleri tek seferde kaydeder.
    22. 23. Linq to Sql - Dezavantajları <ul><ul><li>Sadece SqlServer destekleniyor. </li></ul></ul><ul><ul><li>Sadece table-per-hierarchy (TPH) inheritance destekleniyor. </li></ul></ul>
    23. 24. Entity Framework Microsoft’un sağladığı Haziran 2008 dolaylarında piyasaya çıkacak olan LINQ tabanlı güçlü bir ORM aracı
    24. 25. Entity Framework <ul><ul><li>XML tabanlı olarak çalışıyor. </li></ul></ul><ul><ul><li>Beraberinde Wizard desteği geliyor. </li></ul></ul><ul><ul><li>CRUD Fonksiyonları çok hızlı gerçekleştirilebiliyor. </li></ul></ul><ul><ul><li>Batch işlemler gerçekleştirilebiliyor. </li></ul></ul><ul><ul><li>Association(Relation)’lar kullanılabiliyor. </li></ul></ul><ul><ul><li>Concurrency kontrol için TimeStamp kullanabiliyor. </li></ul></ul>
    25. 26. Entity Framework <ul><ul><li>Conceptual Model ile sanal ilişkiler oluşturabilme </li></ul></ul><ul><ul><ul><li>Nesnesel bazda inheritance’ın DB’de belirtilmesi vb. </li></ul></ul></ul><ul><ul><ul><li>Belli bir kolonun farklı isimdeki bir kolona map edilmesi </li></ul></ul></ul><ul><ul><li>String bazlı sorgulama dili: EntitySQL </li></ul></ul>Store .NET Provider V2.0 Conceptual Model .NET Provider (EntitySQL) ORM and LINQ V3.0 Mapping
    26. 27. Entity Framework <ul><ul><li>SP ve Function desteği var. </li></ul></ul><ul><ul><ul><li>İstenirse CRUD fonsiyonları Stored Procedure’lere bağlanabiliyor. </li></ul></ul></ul><ul><ul><li>Sql Server harici veritabanları içinde provider yazılabiliyor. </li></ul></ul><ul><ul><li>Table-per-hierarchy ve Table-per-Type Inheritance desteği var. </li></ul></ul>
    27. 28. EF – Dezavantajları <ul><ul><li>Açık kaynak kodlu değil </li></ul></ul><ul><ul><ul><li>İhitiyaçlara göre özelleştirmek çok fazla mümkün değil </li></ul></ul></ul><ul><ul><li>Henüz Beta seviyesinde </li></ul></ul><ul><ul><li>Microsoft sadece SQL Server Provider’ı yazıyor. Diğer providerlar, başkaları ya da siz tarafından implemente edilmeli </li></ul></ul><ul><ul><li>Caching mimarisi hiç düşünülmemiş(Beta 3 itibariyle) </li></ul></ul>
    28. 29. Asp.Net 3.5 <ul><ul><li>Asp.Net Ajax ve LINQ desteği </li></ul></ul>
    29. 30. ASP.NET 2.0 vs. ASP.NET 3.5 <ul><ul><li>ASP.NET 1.1 sürümünden ASP.NET 2.0 sürümüne geçişe göre daha az yenilikler bulunmaktadır </li></ul></ul><ul><ul><li>ASP.NET 2.0’daki kontroller ve mimari aynen korunmaktadır </li></ul></ul><ul><ul><li>AJAX ile bütünleşik görsel olarak zengin içerikli sayfalar hedeflenmektedir </li></ul></ul><ul><ul><li>LINQ ve yeni veri kontrolleri ile daha gelişmiş veri işlemleri </li></ul></ul>
    30. 32. AJAX Entegrasyonu <ul><ul><li>ASP.NET AJAX artık .NET Framework ile bütünleşik hale geldi </li></ul></ul><ul><ul><li>Önceki sürümdeki eksiklikler ve sorunlar giderilerek tutarlı bir yapıya kavuştu </li></ul></ul><ul><ul><li>Control Toolkit ile gelen kontrollerle çok kolay şekilde daha zengin arayüzler tasarlanabilir (Extender) </li></ul></ul>
    31. 33. Yeni Veri Kontrolleri <ul><li>ListView </li></ul><ul><ul><li>ListView kontrolü ile daha gelişmiş veri görüntüleme </li></ul></ul><ul><ul><li>GridView ve DataList kontrolünün harmanlanması </li></ul></ul><ul><ul><li>Veri sayfalama, sıralama, güncelleme, seçme, silme işlemleri yapılabilir </li></ul></ul><ul><ul><li>Görüntülenen veri esnek şekilde formatlanabilir </li></ul></ul>
    32. 34. Yeni Veri Kontrolleri <ul><li>DataPager </li></ul><ul><ul><li>Veri sayfalama işleminin ne şekilde yapılacağını belirler </li></ul></ul><ul><ul><li>ListView ile bütünleşik kullanılabilir </li></ul></ul><ul><ul><li>Kolay şekilde özelleştirilebilir </li></ul></ul>
    33. 35. Yeni Veri Kontrolleri <ul><li>LinqDataSource </li></ul><ul><ul><li>Linq to SQL class’ları ile oluşturulan entity katmanları üzerinde sorgulamalar yapılmasını sağlar </li></ul></ul><ul><ul><li>Tüm veri kontrollerine veri sağlar </li></ul></ul><ul><ul><li>Veri sayfalama işlemlerinde diğer DataSource kontrollerine göre performans kazancı sağlar </li></ul></ul>
    34. 36. Asp.Net 3.5 Extensions Dynamic Data, Data Services, Asp.Net MVC
    35. 37. Dynamic Data <ul><ul><li>Linq-To-Sql yardımı ya da direk App_Data içinde bulunan bir Database üzerinde herhangi bir &quot;İş Akışı&quot; söz konusu olmadan verilere, erişim kolay bilgi değişimi gibi kolaylıklar sağlayan bir sistemdir. </li></ul></ul><ul><ul><li>Linq2Sql Context'i oluşturduğunuzda basit bir ayar ile bütün listeleme, ayrıntıları incelme, Delete-Insert-Update gibi işlemleri otomatik oluşturur. </li></ul></ul>
    36. 38. Dynamic Data <ul><ul><li>Eğer direk DB üzerinden çalışacak isek de, herhangi bir ayar dahi gerekmez... Tablolar arasındaki assosaciton'ları otomatik olarak gerçekleştirir. Mesela Product listesinde; Category kolonu altına tıklandığında O Category'e ait tüm ürünler listelenir; ya da edit modda Category kolonu altına otomatik olarak bir dropdownList içinde tüm Category'ler listelenir. </li></ul></ul><ul><ul><li>Hatta veritabanında Image olarak belirtilen kolonlar; direk olarak Image tipinde gösterilir, Insert yapmak istediğinizde Upload tagını görürsünüz. </li></ul></ul>
    37. 39. Dynamic Data <ul><ul><li>Elbette ki yine sadece Sql Server’ı destekler </li></ul></ul><ul><ul><li>Geliştirilebilir olup olmayacağı hakkında herhangi bir bilgi yoktur. </li></ul></ul>
    38. 40. Data Services <ul><ul><li>WebService gibi bir Servis üzerinden Javascript yardımıyla Query’ler gerçekleştirebilmeni sağlayan bir Client-Side API ve kendi servisleri... Micrsoft’un Ajax Library’si üzerinde bir ek olarak çalışıyor. </li></ul></ul><ul><ul><li>Svc denilen bir Server dosyası var. Bu svc üzerinde LINQ’nun C# tarafında yaptığına benzer şekilde Javascript ile sorgulamalar gerçekleştirebilmemizi sağlıyan alt yapı. </li></ul></ul>
    39. 41. Asp.Net MVC <ul><ul><li>Asp.Net’in Model-View-Controller implementasyonu... C# Generics kullanımı ile Type-Safe kod yazımını sağlıyor. Tüm kodları elle yazıyorlar, sürükle-bırak desteği henüz geliştirilmemiş. Microsoft MVP’lerinden Scott Guthrie ve Rob Conery geliştirmekte. </li></ul></ul><ul><ul><li>Herhangi bir Server Control yazılmamış durumda. </li></ul></ul><ul><ul><li>Gelişmesi uzun sürecek... </li></ul></ul>
    40. 42. .Net Framework 3.0 Microsoft’un IT Sektörü ihtiyaçları doğrultusunda hazırladığı, 4 temel parçadan oluşan Framework
    41. 43. .NET At The Core
    42. 44. Windows Workflow Foundation İş Akışı tabanlı uygulamalar geliştirmek için tasarlanmış bir programlama modeli, motoru ve araçları bütünü.
    43. 45. İş akışı nedir? <ul><ul><li>Bir takım “aktivite”ler ile tanımlanabilen programlar </li></ul></ul><ul><ul><ul><li>İnsanları ve yazılımları koordine edebilir </li></ul></ul></ul><ul><ul><ul><li>Gerçek zamanlı bir kontrol-akışına sahiptir </li></ul></ul></ul><ul><ul><ul><li>Sürekli ve şeffaf çalışır </li></ul></ul></ul><ul><ul><ul><li>Dinamik değişimlere izin verir ve tolere edebilir </li></ul></ul></ul>Akış diyagramı.. Durum diyagramı.. Kural tabanlı..
    44. 46. Workflow Foundation <ul><ul><li>İş akışlarını modellemek için kullanılan bir altyapıdır. </li></ul></ul><ul><ul><li>İnsan ya da Sistem prosesleri modellenebilir; </li></ul></ul><ul><ul><ul><li>İhityaç çerçevesinde özelleştirilmeli ve kodlanmalıdır. </li></ul></ul></ul><ul><ul><li>WS-BPEL’den farkı </li></ul></ul><ul><ul><ul><li>Activity’ler Web Servisi değil kodlanmış Assembly’dir. </li></ul></ul></ul><ul><ul><ul><li>.Net Framework üzerinde herhangi bir uygulamada host edilir, tek ihtiyacı Frameworktür. </li></ul></ul></ul><ul><ul><ul><li>BPEL server birden fazla vardır </li></ul></ul></ul><ul><ul><ul><ul><li>Microsoft –BiztalkServer </li></ul></ul></ul></ul><ul><ul><ul><ul><li>IBM – WebSphere </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Apache - ODE </li></ul></ul></ul></ul>
    45. 47. Workflow Foundation <ul><ul><li>İş akışlarını daha kolay modelleyebilmemiz ve uzun kod akışlarını yönetebilmemiz için bir çatı. </li></ul></ul><ul><ul><li>Tam olarak bir Workflow yazılımı değildir. </li></ul></ul><ul><ul><li>Yazılım geliştiricilere bir çatı sunar. Biraz daha kod akışı sağladığı söylenebilir. Geniş uygulamalardaki iş akışlarının bir kısmını kodun içersinden kurtarmayı hedeflemiştir. </li></ul></ul>
    46. 48. WF’ının Yapısı Bütün workflow örnekleri , process dahilindeki runtime içerisinde yaratılırlar ve işlem görürler. Aynı application Domain içerisinde birden fazla runtime oluşturulabilir ve bu runtime motorları tutarlı çalışacak şekilde bir çok Workflow örneğini çalıştırabilir. Bir workflow derlendikten sonra, bir windows prosesinde, bir web uygulamasında veya bir web servisinde host edilebilir ve bu uygulama ile kolayca iletişimde bulunabilir. Host eden uygulama olmadan workflow’larımız çalıştırılamaz.
    47. 49. WF’nin Yapısı <ul><ul><li>Workflow’lar aktivitelerin toplamıdır. </li></ul></ul><ul><ul><li>Workflow’lar bir Host process üzerinde çalışırlar . Bu bir uygulama veya server olabilir. </li></ul></ul><ul><ul><li>Uygulama geliştiriciler kendi aktivite kütüphanelerini oluşturabilirler. </li></ul></ul><ul><ul><li>Base Activity Library: Kullanabileceğimiz aktiviteleri ve kendi aktivitelerimizi oluşturabileceğimiz base’leri teşkil eder. </li></ul></ul><ul><ul><li>Runtime Engine: Workflow’ların çalıştırılmasından ve state yönetimininde sorumludur. </li></ul></ul><ul><ul><li>Runtime Services: Hosting esnekliğini ve iletişimi sağlar. </li></ul></ul><ul><ul><li>Visual Designer: Grafiksel ve kod tabanlı üretim </li></ul></ul>
    48. 50. İş Akışı Tipleri(Sequential) <ul><ul><li>Sequential Workflow : Sürekli tekrar eden , tahmin edilebilir,aktiviteleri daha önceden değişmeyecek şekilde kesin bir şekilde sıralanmış iş süreçleri için ideal olanıdır . Belirli bir sırada dizilen aktiviteler çeşit kurallar ve olaylarla dallanarak yukarıdan aşağı doğru bir akış izler. </li></ul></ul>
    49. 51. İş Akışı Tipleri(State Machine) <ul><ul><li>State Machine Workflow : State’lerden oluşur . Bir state başlangıcı bir state de bitişi temsil eder. Sequential Workflow’dan daha esnek bir yapıya sahiptir . Aktivitelerin sıralı bir şekilde işleyiş gösterdiği Sequential Workflow’un aksine ,State Machine aktiviteleri dış olaylara dayalı bir şekilde işleyiş gösterirler. Bir olayin meydana gelmesiyle state’ler arası geçiş gerçekleşir. Son bitiş state’ine geçiş yapıldığı vakit , workflow tamamlanmış olur . </li></ul></ul>
    50. 52. Runtime Servisleri Host Application App Domain Runtime Services Workflow PersistenceService TrackingService WorkflowScheduler Service WorkflowCommitWork BatchService Bir thread üzerinde Workflow’un çalışmasını zamanlar Transaction’ları Commit eder Process’in bulunğu durum ya da adımla ilgili değişiklikleri tutar Workflow Instance’ını veritabanına saklar
    51. 53. Workflow Servisleri <ul><ul><li>Servisler ihtiyaç duyulduğu gibi eklenebilirler </li></ul></ul><ul><ul><li>Bazı servisler varsayılan olarak eklenir ama sonradan üzerine başka bir servis yazılarak deiştirilebilirler </li></ul></ul><ul><ul><li>Servisler “Provider Pattern” kullanılarak yaratılırlar </li></ul></ul><ul><ul><li>Persistence Service </li></ul></ul><ul><ul><li>Tracking Service </li></ul></ul><ul><ul><li>Scheduler Service </li></ul></ul><ul><ul><li>Kendi yarattığınız servisler </li></ul></ul><ul><ul><li>Servisler aracılığıyla WF ve host iletişim kurulur </li></ul></ul><ul><ul><li>Başlangıçta ExternalDataExchangeService runtime’a eklenir </li></ul></ul><ul><ul><li>Servisler iletişim için soyut araçtır </li></ul></ul><ul><ul><li>Örneğin bir mail servisiyle mail gönderdiğiniz vakit , mailin gideceğini bilirsiniz ama nasıl gideceği sizi ilgilendirmez. Bunu servis sağlayıcının sağlaması gerekir. </li></ul></ul>
    52. 54. Tracking Tracking Service Host Application Activities Workflow Instance Profile <ul><ul><li>Kullanımı </li></ul></ul><ul><ul><ul><li>State görselliği </li></ul></ul></ul><ul><ul><ul><li>KPI bilgisi </li></ul></ul></ul><ul><ul><ul><li>Arşivleme </li></ul></ul></ul><ul><ul><ul><li>Denetleme </li></ul></ul></ul><ul><ul><li>Data takibi </li></ul></ul><ul><ul><ul><li>State ve data değişimleri </li></ul></ul></ul><ul><ul><ul><li>Koddan izleme bilgisinin emilmesi </li></ul></ul></ul><ul><ul><ul><li>Dinamik değişiklikler </li></ul></ul></ul><ul><ul><li>Tracking Profile </li></ul></ul><ul><ul><ul><li>Neyin track edileceğini belirler </li></ul></ul></ul><ul><ul><ul><li>XML formatında serileşir </li></ul></ul></ul><ul><ul><li>Tracking Service </li></ul></ul><ul><ul><ul><li>Profilleri yönetir </li></ul></ul></ul><ul><ul><ul><li>Track edilecek olayları yakalar </li></ul></ul></ul><ul><ul><ul><li>Workflow üzerinde çalışır </li></ul></ul></ul>
    53. 55. Persistence Persistence Service Host Application Workflow Instance Persist Load Unload <ul><ul><li>Kullanım </li></ul></ul><ul><ul><ul><li>Workflow örneğini ,timer’ları ve kuyrukları DB’de depolar </li></ul></ul></ul><ul><ul><li>Persist </li></ul></ul><ul><ul><ul><li>Örnek WorkflowPersistenceService </li></ul></ul></ul><ul><ul><ul><li>kullanılarak kaydedilir. </li></ul></ul></ul><ul><ul><ul><li>Transactional aktiviteler </li></ul></ul></ul><ul><ul><ul><ul><li>TransactionScope </li></ul></ul></ul></ul><ul><ul><ul><ul><li>CompensatableTransactionScope </li></ul></ul></ul></ul><ul><ul><li>Load </li></ul></ul><ul><ul><ul><li>WorkflowPersistenceService kullanılarak örnek oluşturulur. </li></ul></ul></ul><ul><ul><li>UnLoad </li></ul></ul><ul><ul><ul><li>Örneğin state’ini kaydederek geçici bellekten çıkartır. </li></ul></ul></ul><ul><ul><ul><li>Policy WorkflowPersistenceService veya host application tarafında kontrol edilir </li></ul></ul></ul>
    54. 56. XAML Markup XAML C#/VB Markup + kod C#/VB Sadece kod Workflow derleyicisi C#/VB derleyicisi XAML Markup NET Assembly Workflow Runtime Workflow Instance Geliştirme Seçenekleri
    55. 57. Windows Communication Foundation Servis Tabanlı Yazılımları hızlıca geliştirebilmek için Tümleşik Altyapı
    56. 58. Windows Communication Foundation Birlikte çalışabilirlik Üretkenlik Servis tabanlı yazılım geliştirme <ul><ul><li>WS-* tanımlamalarına geniş çaplı destek </li></ul></ul><ul><ul><li>Geçmiş MS tabanlı dağıtık sistem çözümleri ile tam uyumlu </li></ul></ul><ul><ul><li>Günümüz dağıtık sistem teknolojilerini birleştirir </li></ul></ul><ul><ul><li>Özellik tabanlı geliştirme sağlar </li></ul></ul><ul><ul><li>Visual Studio 2005 ile entegre </li></ul></ul><ul><ul><li>“ Loosely Coupled” servisler geliştirmeye imkan tanır </li></ul></ul><ul><ul><li>İletişim yetenekleri konfigürasyon tabanlı </li></ul></ul>
    57. 59. Bütünleşik Programlama Modeli Farklı platformlarla çalışma ASMX Olay tabanlı programlama Enterprise Services WS-* Protokolleri WSE Mesaj tabanlı programlama System.Messaging Mekan bağımsız nesneler .NET Remoting
    58. 60. WCF Sürüm Uyumluluğu Yan Yana çalışma Birlikte çalışma Kolay upgrade imkanları
    59. 61. Windows Communication Foundation <ul><ul><li>Yazılım mimarilerinde birden fazla mesajlaşma stili var. Bu nedenle yazılım geliştirme zorlaşabiliyor. Kolay kullanım sağlanabilmesi için WCF Mimarisi kurulmuştur. </li></ul></ul><ul><ul><li>WCF .Net Remoting, MSMQ, WS-* vb. Protokollerin kolay kullanılabilmesi için soyut bir arayüz sağlamaktadır. </li></ul></ul><ul><ul><li>Asıl fikir SOA tabanlı yazılımları kolay gerçekleşetirebilmektir. Özellikle WebService’leri üzerine yoğunlaşmıştır. Atomic Transaction, WS-Security gibi konularda ciddi kolaylıklar sağlamaktadır. </li></ul></ul>
    60. 62. Windows Presentation Foundation Benzersiz bir kullanıcı deneyimi oluşturmak için UI ve medya kavramlarını kapsayan bütünleşik ve üretkenlik sağlayan bir framework
    61. 63. Windows Presentation Foundation <ul><ul><li>Windows tabanlı yazılımlarada kullanıcı deneyimini maksimuma çıkartmak adına hazırlanan bir framework. XAML (eXtensible Application Markup Language) denilen bir altyapı ile Web ya da Windows’a gömülebilen görsellik öğelerini sunan bir altyapı. </li></ul></ul><ul><ul><li>Form öğelerini bu XAML yapısı sayesinde tanımlamamızı sağlıyor. </li></ul></ul>
    62. 64. XAML ve tanımsal programlama XAML = Extensible Application Markup Language <ul><ul><li>Kolayca araçlar geliştirilebilir </li></ul></ul><ul><ul><li>Kod ve içerik ayrı </li></ul></ul><ul><ul><li>Tarayıcılarda veya kendi başına çalışabilir </li></ul></ul><Button Width=&quot;100&quot;> OK <Button.Background> LightBlue </Button.Background> </Button> XAML Button b1 = new Button(); b1.Content = &quot;OK&quot;; b1.Background = new SolidColorBrush(Colors.LightBlue); b1.Width = 100; C# Dim b1 As New Button b1.Content = &quot;OK&quot; b1.Background = New _ SolidColorBrush(Colors.LightBlue) b1.Width = 100 VB.NET
    63. 65. Windows Presentation Foundation <ul><ul><li>Microsoft Expression Blend ile tasarlanan tasarım öğelerini Windows programlarınızda kullanmanızı sağlar. </li></ul></ul><ul><ul><li>Expression Blend ürünü; Adobe’un Flash yazılımına çok benzer olduğunu söyleyebiliriz. Böylece Windows yazılımlarına Tasarım etkenini koyabilir ve daha kolay kullanımlı yazılımlar üretebiliriz. </li></ul></ul>
    64. 66. Cardspace <ul><ul><li>Windows tabanlı kimliklendirme altyapısı. </li></ul></ul><ul><ul><li>.Net Passport’un mimarisinin server’larını kendimizin kurabildiği bir sistem. </li></ul></ul><ul><ul><li>Bir server’dan aldığınız kimlik sayesinde başka yazılımlara istekte bulunuyorsunuz, aldığınız token hakkındaki ayrıntılara; token’ı aldığınız server gidip yazılım kendisi soruyor. </li></ul></ul><ul><ul><li>Böylece tekrar üyelik işlemleriyle uğraşmamış oluyorsunuz. </li></ul></ul>
    65. 67. IDE Yenilikleri <ul><ul><li>LINQ desteği </li></ul></ul><ul><ul><li>.Net Framework’ün bazı kütüphaneleri’nin kaynak kodları açılmış </li></ul></ul><ul><ul><li>Bütün yeni teknolojiler için arayüzler sağlanmış </li></ul></ul>
    66. 68. IDE Yenilikleri – Web Editor <ul><ul><li>Design ve Source penceresine ek olarak Split ekranı koyulmuş; böylece görsel öğelerle uğraşırken aynı zamanda Html ve Server Control taglarını da yönetebiliyor; hızlıca çeşitli değişiklikler gerçekleştirebiliyorsunuz. </li></ul></ul><ul><ul><li>CSS Manage Styles penceresi ile Sayfa içine gömülü ve link edilmiş uzak .css dosyalarını yönetebiliyorsunuz. </li></ul></ul>
    67. 69. IDE Yenilikleri – Web Editor <ul><ul><li>CSS Properties penceresi ile de belli bir tag’ı miras aldığı kurallar, ve miras aldığı özellikleri ile birlikte gösterilir; eğer miras alınan özellik değiştirilmişse; üzeri çizgi olarak gösterilir. </li></ul></ul><ul><ul><li>AJAX uygulamaları için güçlendirilmiş Debug araçları... </li></ul></ul><ul><ul><li>Daha güçlü javascript Intellisense </li></ul></ul>
    68. 70. 2008 ve Tavsiyeler Microsoft’un 2008 vizyonu ve Firmamızda uygulanması
    69. 71. 2008 ve Tavsiyeler <ul><ul><li>2008 teknolojileri daha çok genel problemleri çözmeye yönelmiş; ancak sağlam bir entegrasyon bulunmuyor. </li></ul></ul><ul><ul><li>Hedef daha çok alt yapıları sunup, tam çözüm ve entegrasyonun şirketlerin IT Staratejisi çerçevesinde geliştirilmesi </li></ul></ul><ul><ul><li>Firmamız adına güçlü bir Application Framework altında gerekli teknolojiler birleştirilebilir. </li></ul></ul>
    70. 72. Application Framework Hedefleri <ul><ul><li>Daha az satır kod barındıran </li></ul></ul><ul><ul><li>Daha hızlı </li></ul></ul><ul><ul><li>Bakımı kolay </li></ul></ul><ul><ul><li>Kolay entegre edilebilir </li></ul></ul>Yazılım geliştirmek…
    71. 73. NHibernate <ul><ul><li>Bir ORM aracı </li></ul></ul><ul><ul><li>15’den fazla Database’i SQL Syntax’ı ile beraber destekler. </li></ul></ul><ul><ul><li>Açık kaynak kodlu </li></ul></ul><ul><ul><li>Güçlü Caching mimarisi </li></ul></ul><ul><ul><li>String bazlı yada ICriteria API’si ile hızlı veri çekimi </li></ul></ul>
    72. 74. Linq to NHibernate <ul><ul><li>NHibernate’in tek kötü yanı dil sınırları nedeniyle çoğu noktada string bazlı çalışması idi. </li></ul></ul><ul><ul><li>Eğer ki Linq NHibernate’e uygulanırsa(ki internette bazı örnekleri bulunuyor) çok güçlü bir altyapı sağlayacaktır. </li></ul></ul><ul><ul><li>Linq’nun yararları + NHibernate’in gücü </li></ul></ul>
    73. 75. Windows Workflow Foundation <ul><ul><li>Yazılım geliştirmenin en zor kısmı İş Mantığı kodlarını yerleştirmektir. </li></ul></ul><ul><ul><li>Sağlanan bu altyapıyı ihtiyaçlarımız doğrultusunda özelleştirilerek çok daha hızlı şekilde yazılım geliştirebilmemize yardımcı olabilir. </li></ul></ul><ul><ul><li>Visio çizimlerimizin bir Framework tarafında çalıştırılması gibi </li></ul></ul>
    74. 76. Aspect Oriented Programming <ul><ul><li>Kodun kesişen yönlerini ortak olarak toplamaya yarayan bir teknik. </li></ul></ul><ul><ul><li>2 yılı aşkın süredir Java tarafında büyük projelerde kullanılıyor. </li></ul></ul><ul><ul><li>Ciddi kolaylaştırmalar sağlanıyor. </li></ul></ul>
    75. 77. Aspect Oriented Programming
    76. 78. Aspect Oriented Programming <ul><ul><li>GetFoo komutunu çağırdığınızda diğer tüm işlemleri standart hazırlanan fonksiyonlar size ek kod yazdırmadan halledebilmenizi sağlıyor. </li></ul></ul><ul><ul><li>Hatta bir sınıfa genel olarak bir Aspect’i uygulayabilmemizi sağlayan yapılar dahi var. </li></ul></ul>
    77. 79. Spring.Net Framework <ul><ul><li>NHibernate, Dependency Injection, AOP, MVC gibi konularda destek sağlayan komple bir Open Source Framework </li></ul></ul><ul><ul><li>İhtiyaçlarımıza göre özelleştirilebilir. </li></ul></ul>
    78. 80. UI Bileşenleri <ul><ul><li>Kullanıcıya daha yüksek görsellik ve kullanışlılık sağlayabilecek; </li></ul></ul><ul><ul><li>Yazılımcıya ise daha hızlı Kullanıcı Arayüzü geliştirebilmesini sağlayacak bir framework; kaynak kodları ile satın alınıp ihtiyaçlara göre özelleştirilebilir. (Mesela: DevXpress) </li></ul></ul><ul><ul><ul><li>Security ayarlarını kendi framework’umuz ile entegre etmek </li></ul></ul></ul><ul><ul><ul><li>Mesela NHibernate ve Workflow Foundation ile birlikte kullanmak için FODatasource </li></ul></ul></ul>
    79. 81. Windows Communication Foundation <ul><ul><li>Sistemlerin entegrasyonu ve Service Oriented Architecture’a hazırlık yapılması açısından önemli olacaktır. </li></ul></ul><ul><ul><li>İhtiyaçlar çerçevesinde sistemlerimize entegre edilebilir. </li></ul></ul>
    80. 82. Application Framework Modülleri <ul><ul><li>ORM aracı </li></ul></ul><ul><ul><ul><li>Nhibernate & LINQ </li></ul></ul></ul><ul><ul><li>Windows Workflow Foundation </li></ul></ul><ul><ul><li>Spring </li></ul></ul><ul><ul><ul><li>Dependency Injection </li></ul></ul></ul><ul><ul><ul><li>Aspect Oriented Programming </li></ul></ul></ul><ul><ul><ul><li>MVC Framework Entegrasyonu </li></ul></ul></ul><ul><ul><li>UI Componentler </li></ul></ul><ul><ul><li>Windows Communication Foundation </li></ul></ul>
    81. 83. <ul><ul><li>MSDN </li></ul></ul><ul><ul><li>Hibernate in Action, Manning 2005 </li></ul></ul><ul><ul><li>Patterns of Enterprise Application Architecture, Martin Fowler, Adisson Wesley 2002 </li></ul></ul><ul><ul><li>Spring.Net Application Framework Reference Guide </li></ul></ul>