ahmet kaymaz ceturk etkinlik 7 subat yazilim surecleri
DESCRIPTION
TRANSCRIPT
http://www.ahmetkaymaz.com
Yeni Nesil Veri Erişim:ADO.NET Entity Framework(E/R Model, ORM, LINQ . . .)
Ahmet [email protected] http://www.ahmetkaymaz.com
http://www.ahmetkaymaz.com
Ajanda
Yazılım geliştirme süreçleri (Şelale Modeli)
Veri Modelleme
Varlık-İlişki (Entity-Relationship, ER) Modeli
Nesne-İlişki Haritalama (Object-Relational Mapping - ORM)
ADO.NET Entity Framework
LINQ giriş
http://www.ahmetkaymaz.com
Yazılım Geliştirme Süreçleri
Analiz
Tasarım
Kodlama
Sistem testi
Bakım
Şelale Modeli(Waterfall Model)
Yazılım yaşam döngüsü. . .
girdi
çıktı
http://www.ahmetkaymaz.com
Çözümleme ve Gereksinimlerin Tanımlanması (Analysis & Requirements Specification)
Gereksinim, gerçekleştirilmesi istenilen ihtiyaçların tanımlanmasıdır. Gereksinimler bir yazılımın temel kaynağını oluşturur. Bu evre yazılımın amacının ve işlevinin tanımlandığı, donanım veya yazılım
tabanlı gereksinimlerin belirlendiği, kısıtlamaların oluşturulduğu, maliyetlerin hesaplandığı, yazılım evi ve müşteri arasındaki iş bölümünün sağlandığı evredir.
Kavramsal modelin oluşturulması. Sistem gereksinimi, Kullanıcı gereksinimi Gereksinimler tam ve net bir şekilde ifade edilmelidir. Gereksinim Mühendisliği (Requirements Engineering) sorumluluğundadır.
http://www.ahmetkaymaz.com
Yazılım ve Sistem Tasarımı (Software & System Design)
Gereksinimler listesi referans alınarak yazılımın mimari tasarımı oluşturulur.
Bu evrede alt sistemler ve aralarındaki ilişkiler belirlenir ve onlara ait ara-yüzlerin nasıl olacağı tasarlanır.
Gereksinimler uygulamanın neler yapabileceğini tanımlarken Tasarım uygulamanın bunu nasıl yapacağını ifade eder.
Tasarım sürecinde aşağıdaki aktiviteler gerçekleştirilir; Mimari tasarım Bileşen ve Kullanıcı Ara yüz tasarımı Veri yapısı ve Algoritma tasarımı Veritabanı tasarımı
Yazılım Tasarım Mühendisi (Software Design Engineer) sorumluluğundadır
http://www.ahmetkaymaz.com
Gerçekleştirim (Implementation)
Tasarım Bilgisayar programı Kodlamanın yapıldığı süreç Kodlama, önceki evrede kurulmuş olan algoritmanın C#, VB.NET, Java gibi
bir dil aracılığıyla ifade edilmesidir. Programcı (Programmer) sorumluluğundadır
http://www.ahmetkaymaz.com
Bütünleştirme ve Hata Ayıklama / Test İşlemi (Integration and Debugging / Testing)
Bileşenler sınama işleminden geçilerek bütünleştirilir. Bütünleştirme işlemi bittikten sonra test işlemleri başlar. Bileşen testi, bütünleştirme testi ve kullanıcı testi gibi test işlemleri yapılır. Kullanıcı tarafındaki sınama işlemi Validation(Geçerleme) ve
Verification(Doğrulama) olarak gerçekleştirilir. Yazılım Test Mühendisi (Software Test Engineer) sorumluluğundadır. Aynı
zamanda kullanıcı da önemli rol oynar. Bu süreçte artık program kullanıcıya, müşteriye teslim edilmek üzere
olmuştur.
http://www.ahmetkaymaz.com
Kurulum ve Bakım(Operation and Maintenance)
Programın kullanıcılara kurulması ve yazılımın yaşamını devam etmesi için gerekli bakımlar, güncellemeler yapılır.
Bu süreçte hatalar çıkabilir ve önceki adımlarda olduğu gibi düzenlemeler yapılabilir.
Evolution (Evrimleştirme)
http://www.ahmetkaymaz.com
Yazılım Geliştirme SüreçleriAnaliz
Tasarım
Kodlama
Sistem testi
Bakım
•Her süreç bitiminde doğrulama (verification) işlemi yapılır. Amaç; sürecin doğru gerçekleşip gerçekleşmediğini netleştirmektir.
•Ayrıca her süreçte o sürece ait belgelendirmenin yapılmış olması lazım. •Büyük bir yazılım projesini gerçekleştirmek için .NET veya Java bilmek yeterli olmaz.•Bilgisayar Destekli Yazılım Mühendisliği (CASE-Computer Assisted Software Engineering) araçları •Analiz ve tasarım aşamasında IBM’in Rational Rose veya MS’nin Visio ürünü
http://www.ahmetkaymaz.com
Veri Modelleme
Günümüz uygulamalarının temelinde “veri” denilen sayısal veya mantıksal değerler mevcuttur.
Veritabanı sistemleri verileri mimari olarak mantıksal (table, view, procedure, user) ve fiziksel (dosya sistemi) olmak üzere iki seviyede sunar.
http://www.ahmetkaymaz.com
Veri Modelleme
Veritabanlarının amacı veri depolamak iken yazılımların amacı verileri bilgiye dönüştürmektir.
Veritabanına dayalı uygulamalar katmanlı mimari (multi-tier architecture) üzerine kurulur. Genellikle veri (data), iş (business logic) ve sunum (presentation) olmak üzere üç tür katmandan oluşur.
Çok katmanlı kurumsal uygulamaların ilk adımı veri modelleme işlemidir. “Veri modelleme, verileri mantıksal düzeyde düzenlemek için kullanılan
kavramlar, yapılar ve işlemler bütünüdür.” Veri modeli kullanılarak veritabanının tasarım ve şemaları oluşturulur.
http://www.ahmetkaymaz.com
Veri Modelleme Veri modelleme, veritabanı verilerinin ve bunların arasındaki ilişkinin organizasyon içindeki herkesin rahatlıkla anlayabileceği metin ve
şekillerle ifade edilmesidir. Organizasyon içindeki kullanıcı, tasarımcı ve programcı gibi teknik veya teknik olmayan kişilerin veriye bakış açıları ve veriyi
tanımlamaları farklıdır. Ortak dil; gerçek dünya varlıklarıdır. Veritabanı modellemenin üç türü vardır.
Kavramsal tasarım (Conceptual design): Veritabanının hangi verileri içereceği ve bu veriler arasındaki ilişkilerin belirlendiği aşamadır. en çok kullanılan yöntem Varlık-İlişki (Entity-Relationship, ER) modelidir.
Mantıksal tasarım (Logical design): VTYS’nin tanımlandığı aşamadır. Kavramsal tasarımda modellenen yapı, karar verilmiş olan VTYS’ye uygun şemaya dönüştürülür.
Fiziksel tasarım (Physical design): Verilerin hangi disk veya başka fiziksel depolama sistemlerinde nasıl tutulacağı belirlenir. Kısaca, kavramsal ve mantıksal tasarım aşamasında, veritabanı şemasına karar verildiğini, fiziksel tasarım aşamasında da
veritabanının fiziksel yapısına karar verildiğini söyleyebiliriz.
http://www.ahmetkaymaz.com
Varlık-İlişki (Entity-Relationship, ER) modeli
Kavramsal veri modelini herhangi bir VTYS şemasına bağlı kalmadan ana hatlarıyla ER diyagramı üzerinde şematik olarak gösterme tekniğidir.
ER diyagramları için farklı notasyonlar kullanılsa da en çok UML notasyonu tercih edilir.
http://www.ahmetkaymaz.com
Varlık-İlişki (Entity-Relationship, ER) modeli ER modeli, teknik olarak varlıklar (entities) ve ilişkiler (relationships) koleksiyonundan oluşur Varlık soyut veya somut olarak var olan ve benzerlerinden ayırt edilebilen herşeydir (insanoğlu, araba, devlet
…). Nesne tabanlı programlamada sınıflar, veritabanı yönetim sisteminde de tablolar varlık kümesi olarak
nitelendirilir. Her varlık, kendisini diğer varlıklardan ayırt eden öznitelik olarak bilinen karakteristiklere sahiptir. Örneğin bir e-ticaret projesinde “Musteri” bir varlık, onun “AdSoyad” bilgisi, bu varlığa ait bir nitelik olarak
tanımlanabilir. “AdSoyad” bilgisinin “Murat Şensoy” olarak belirlenmesi bu niteliğin değeridir (data value). Özniteliğin alabileceği veya aldığı değerler etki alanı (domain) olarak tanımlanır.
ER diyagramında varlıklar dikdörtgen şeklinde, ilişkiler baklava biçiminde, öznitelikler oval şeklinde gösterilir. Varlık-İlişki çizelgeleri;
Varlık Kümesi Nitelik
İlişki Kümesi
Zayıf Varlık Kümesi Anahtar Nitelik Türetilen
Nitelik
Bağımlı Varlık Kümesi
http://www.ahmetkaymaz.com
Varlık-İlişki (Entity-Relationship, ER) modeli VTYS’ler varlık kümesi ve onların arasındaki etkileşimden oluşur. Varlıklar arasındaki
etkileşim varlık ilişkisi olarak tanımlanır. Varlıklar arasında üç tür ilişki kurulur:Birden çoğa ilişki (one-to-many relationship): Bir tablonun bir kaydına karşılık ikinci tabloda birden fazla kaydın olmasıdır. “Siparis” ve “Musteri” tabloları arasındaki ilişkidir. Bu ilişki 1:M ile temsil edilir.
Çoktan çoğa ilişki (many-to-many relationship): Bir tablonun birden fazla kaydı, diğer tablonun birden fazla kaydıyla ilişkilidir. M:N ile temsil edilen bu ilişki genellikle üçüncü bir tablo üzerinde oluşturulur. “Ogrenci” ve “Kurs” tabloları.
Birden bire ilişki (one-to-one relationship): Bir tablo ilişkisinden ziyade ikinci tablonun birinci tablonun uzantısı olmasıdır. “Müşteri” ve “Şifre” tabloları.
Many-to-Many1-to-1 1-to Many Many-to-1
http://www.ahmetkaymaz.com
Varlık-İlişki (Entity-Relationship, ER) modeli
ETicaret isimli bir veritabanının örnek ER şeması ve tabloları;
FaturaMüşteri
Ödeme
olur
yapılır
Düzen-lenir ürün
Ürün Grubu
olur
kimlikNotarih
soyad
adres telefon
FaturaNoad
ad
model
özellik
ödediği
garantiSüre
ürünNo
stokMiktarı
taksitNo
Tarih
birimFiyat
miktar
satışFiyat
1 n nm
1
n
1
n
ürünGrubuNo
marka
http://www.ahmetkaymaz.com
Varlık-İlişki (Entity-Relationship, ER) modeli
Tasarım aşamasında varlık ve onlara ait öznitelikler belirlendikten sonra varlıklar arasındaki ilişkiler belirlenir ve “varlık ilişki diyagramı” (entity relationship diagramming) çıkarılır.
ER diyagramı hazırlayabilmek için ERWin (CA), Visio (MS), Rational Rose (IBM), Power Designer (Sybase) gibi araçlar kullanılır.
Bu araçların en önemli özelliği ileriye mühendislik (forward engineer) ve geriye mühendislik (reverse engineer) yöntemlerini destekliyor olması ve farklı türden diyagramların çizilebiliyor olmasına imkân tanımasıdır.
http://www.ahmetkaymaz.com
Varlık-İlişki (Entity-Relationship, ER) modeli
•MS Visio üzerinde ER diyagramı oluşturulması.MS Visio ile MS SQL Server arasındaki iletişim.İleriye Mühendislik ve Geriye Mühendislik
http://www.ahmetkaymaz.com
Nesne-İlişki Haritalama(Object-Relational Mapping - O/R Mapping) Yazılım projelerinde programcıların en çok vakit ayırdığı alan hiç şüphesiz veritabanı işlemleridir.
Bu işlemler verilerin saklanması, işlenmesi ve görüntülenmesi olmak üzere üç türde toplanır. VTYS tarafında, tasarımcılar tarafından oluşturulmuş olan nesne modelini VTYS’de saklamak için
aracı olarak ER modelini kullanıyoruz. Bu ek işlem, şu anki VTYS’lerin nesne yönelimli (Object Oriented) olmamasından kaynaklanmaktadır.
Aynı sorun kullanıcılarla veritabanı arasında iletişim sağlayacak veritabanı uygulamaları yazılırken de yaşanır. Nesne yönelimli bir programlama dili kullanıldığı zaman class, inheritance, property, method gibi OOP varlıkları VTYS tarafından desteklenmediği için iş katmanında OOP ve ilişkisel veritabanı özellikleri iç içe kullanılır.
Uygulamaların iş katmanındaki bu iş yükünü azaltmak amacıyla O/R Mapping isimli nesne-ilişki eşleştirme yöntemi kullanılır.
http://www.ahmetkaymaz.com
Nesne-İlişki Haritalama(Object-Relational Mapping - O/R Mapping)
İş katmanında veritabanı sorgulama işlemlerinde yoğun bir şekilde SQL dilinin kullanılıyor olması, uygulama kodlarının veritabanı şemasına bağlı kalması, uygulama geliştiricilerinin veritabanı tarafında çok zamanını almaktadır.
İş katmanında OOP tercih edildiği halde veriye nesnesel olmayan yöntemlerle erişilir. Tabloları, uygulama tarafında gerçek varlıkları temsil etmek için kullandığımız nesnelerle ifade edememekteyiz.
ORM yöntemi, OOP modeli ile ilişkisel veritabanı modeli arasında ilişki kurup ilişkisel veritabanındaki öğelerin, nesnelere nasıl karşılık geleceğini yönetir. Tabloları sınıflara (class), satırları nesnelere (instance), kolonları bu nesnelerin özniteliklerine (attribute) bağlar.
O/R Mapping yönteminde kullanılmak üzere birçok araç geliştirilmiştir; bunların en popüleri ilk olarak Java platformu için çıkarılmış ama daha sonra .NET sürümü de geliştirilmiş olan açık kaynak NHibernate ürünüdür. Bunun dışında başta LLBLGen ürünü olmak üzere .NET platformunda kullanılacak birçok "O/R Mapping" aracı bulunmaktadır.
http://www.ahmetkaymaz.com
Nesne-İlişki Haritalama(Object-Relational Mapping - O/R Mapping)
ORM yöntemini tercih ettiğimizde aşağıdaki gibi bir T-SQL cümlesi veya stored procedure yerine;
UPDATE Musteri SET AdSoyad='Murat Şensoy‘
WHERE MusteriId = 10
aşağıdaki gibi bir kod yazmış olacağız.
Musteri.AdSoyad = "Murat Şensoy"
oRm.Save(Musteri)
Görüldüğü gibi CRUD (create, read, update, delete) işlemlerini OOP kurallarına göre yazmış oluyoruz. Böylece iş katmanını kodlayan yazılımcının yöntem alışkanlığı bozulmamış olmaktadır.
O/R Mapping modelinin geliştirme sürecinde kolaylık sağlamasına karşılık çalışma zamanında klasik yöntemle kıyaslandığında performans konusunda yeterince iyi olduğunu söyleyemeyiz. Bunun nedenleri:
ORM, uygulama mimarisine veri erişim isminde yeni bir katman ekler.
Veri katmanı, veritabanına doğrudan erişemez.
SQL dilinin kompleks sorgu oluşturma ve çözmedeki gücünden yararlanılmaz.
ORM, uygulamanın veritabanı bağımsız olmasını sağladığı için o anda kullanılan VTYS’nin yeteneklerinden yararlanılamaz.
http://www.ahmetkaymaz.com
ADO.NET Entity Framework
Microsoft, ADO.NET 2.0 ile birlikte sunduğu ObjectSpaces (OS.Net) ürünüyle O/R Mapping çözümüne ilk adımını atmış oldu. ADO.NET 3.5 ile birlikte ObjectSpaces ürününü yeniden düzenleyerek bu bölümde işleyeceğimiz ADO.NET Entity Framework isimli eklentiyi geliştirerek O/R Mapping alanındaki adımlarını daha da belirginleştirdi.
ADO.NET Entity Framework’ün bir parçası olarak ER modelinin oluşturulması için Varlık Veri Modeli (Entity Data Model-EDM) isimli kavram sunulmaktadır. EDM veritabanı şemasını kavramsal ve mantıksal boyutta gösteren ve ilgili ORM haritasını oluşturan bir araçtır. EDM, varlıklarla ilgili şemayı XML belgelerinde (CSDL, SSDL, MSL) saklar. Bu üç dosya kavramsal (conceptual), mantıksal (logical) ve haritalama (mapping) modelleriyle ilgili bilgileri içerir.
http://www.ahmetkaymaz.com
ADO.NET Entity FrameworkCSDL (Conceptual Schema Definition Language): Varlıkların ve onlara ait ilişkilerin tanımlandığı dosya olup uygulamanın çekirdek veri modelini teşkil eder. Uygulama katmanında varlıklar, CSDL şeması referans alınarak oluşturulur.
SSDL (Store Schema Definition Language): Veri kaynağı olarak kullanılacak veritabanına ait üst-veri (metadata) bilgisini içerir. Varlıklarla veri kaynağı arasındaki iletişimi kurar.
MSL (Mapping Specification Language): CSDL dosyasındaki varlıkları SSDL dosyasında belirtilmiş tablolarla eşleştirir.
http://www.ahmetkaymaz.com
ADO.NET Entity Framework
Entity Client, SQLClient ve OracleClient gibi ADO.NET’in bir yönetilebilir veri sağlayıcısı olup EDM tarafından tanımlanmış olan veriye erişmeyi sağlar. Diğer sağlayıcılar gibi bunun da EntityCommand, EntityConnection ve EntityTransaction bileşenleri bulunur.
Object Services bileşeni, veri nesneleri üzerinde CRUD (Create, Read, Update, Delete) işlemleri için gerekli sorguları oluşturur. Bu sorgulama servisi “Entity SQL” ve “LINQ to Entities” türü sorgulamaları destekler.
Entity SQL (eSQL) ismindeki sorgulama dili T-SQL dilinden türemiş olup EDM modelindeki varlıkları ve aralarındaki ilişkileri sorgulamak için kullanılır. LINQ to Entities bileşeni de LINQ teknolojisinin varlıkları sorgulamak için sunduğu bir sağlayıcıdır.
http://www.ahmetkaymaz.com
LINQ Sorgulama Yöntemi(Language-Integrated Query/Dil ile bütünleşik sorgulama)
.NET Framework 3.5 ve VS.NET 2008 ile birlikte ortaya çıkmış ve C# 3.0 dili tarafından da desteklenmektedir.
LINQ, dizi ve sıralanabilir sınıf (enumerable class) gibi CLR tabanlı nesneleri veya XML belge ve ilişkisel veritabanı gibi dış kaynaktaki veriler üzerinde SQL benzeri sorgulama yapılmasını sağlar.
En önemli özelliği bu sorgulama sürecini tamamen nesnesel ifadelerle yapabiliyor olmasıdır.
http://www.ahmetkaymaz.com
LINQ Sorgulama Yöntemi(Language-Integrated Query/Dil ile bütünleşik sorgulama)
LINQ sorgulamaları için kullanılabilecek operatörler :
Kısıtlama Operatörleri : Where
Seçme Operatörleri : Select, SelectMany
Bölümleme Operatörleri : Take, Skip, TakeWhile, SkipWhile
Birleştirme Operatörleri : Join, GroupJoin
Ulama/ekleme Operatörleri : Concat
Sıralama Operatörleri : OrderBy, OrderByDescending, ThenBy
ThenByDescending, Reverse
Gruplama Operatörleri : GroupBy
Küme Operatörleri : Distinct, Union, Intersect, Except
Dönüştürme Operatörleri : ToArray, ToList, ToDictionary, OfType
Eşitlik Operatörleri : SequenceEqual
Eleman Operatörleri : DefaultIfEmpty, ElementAt, ElementAtOrDefault First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault
Üretim Operatörleri : Empty, Range, Repeat
Ölçüm Operatörleri : Any, All
Gruplama Fonksiyonu Operatörleri : Aggregate, Count, LongCount, Sum, Min Max, Average
http://www.ahmetkaymaz.com
LINQ ile ilgili 2 Örnek
http://www.ahmetkaymaz.com
DLINQ
DLINQ kavramı, ilişkisel veritabanındaki öğeleri nesnesel ifadelerle sorgulamayı temsil eder. Bir uygulama içerisinde bu tür sorgulamaları yapabilmek için öncelikle veritabanı üyelerini o uygulama içerisinde temsil edecek varlıkların oluşturulması gerekir. O/R Mapping konusundan hatırlanacağı gibi uygulamada veri erişim katmanı (Data Access Layer-DAL) oluşturulur ve veritabanı öğelerini simgeleyecek varlık sınıfları (entity classes) bu katmanda yazılır. Uygulamadaki diğer katmanlar, veritabanına doğrudan erişmek yerine bu erişim katmanını kullanır.
http://www.ahmetkaymaz.com
DLINQ
.NET Framework’te varlık sınıflarını otomatik oluşturmak için iki araç kullanılır.
Code Generation Tool (SqlMetal.exe)
C:\Program Files\Microsoft SDKs\Windows\vn.nn\Bin SqlMetal /server:localhost /database:Ornek /code:C:\Ornek.cs
Oluşan cs dosyasının class diagramına bakılabilir.
System.Data.Linq.dll kütüphanesi ref edilmeli/dbml [:file]: Çıktıyı .dbml olarak üretir. /map seçeneğiyle birlikte kullanılamaz.
/code [:file]: Çıktıyı kaynak kod olarak üretir. /dbml seçeneğiyle birlikte kullanılamaz.
/map [:file]: Çıktıyı XML kod-şablonu olarak üretir. /code seçeneğiyle birlikte kullanılması gerekir.
sqlmetal /namespace:LinqProje /code:Ornek.cs /language:csharp Ornek.dbml VS.NET içindeki Object Relational Designer aracı (O/R Designer)
http://www.ahmetkaymaz.com
SONUÇSONUÇ
Basit yazılımlar için hangi yöntemi hangi modeli kullandığınız önemli olmasa da büyük ölçekli uygulamalarda etkin bir süreç modelini takip etmek, CASE araçlarını kullanmak, ORM yöntemini tercih etmek hem maliyetleri azaltacak hem de proje içerisinde teknik veya teknik olmayan kişilerin yönetimini güçlendirecek ve test / belgelendirme/ bakım süreçlerini kolaylaştıracaktır.
Yazılım mühendisi misiniz yoksa sadece bir kod yazıcısı mısınız ?
ORM vazgeçilmez bir yöntem değildir.
Eğer ORM tercih edilecekse ucu açık bir yöntem olduğu için sınırların netleştirilmesi ve performans paradoxunun gözönünde bulundurulması gerekir.
Microsoft, ORM konusunda geç kaldı fakat Entity Framework ile birlkte ORM dünyasına sağlam adım attı.
“LINQ to SQL”in geleceği bulanık olması ORM’ye gölge düşürmez. Onun sadece SQL Server’e destek vermesi bir sıkıntı olduğu için bunun veri kaynağından bağımsız bir bileşen haline getirilmesini ümit ediyorum.
Bu kavramlardan sonra LINQ ile ilgili detaylı bir oturum yapmak faydalı olacaktır.
http://www.ahmetkaymaz.com
KAYNAKÇAKAYNAKÇA
http://msdn.microsoft.com/en-us/library/bb399572.aspxhttp://weblogs.asp.net/scottgu/http://en.wikipedia.org/wiki/Object-relational_mappinghttp://www.bilmuh.gyte.edu.tr/BIL314T.Halpin, Information Modeling and Relational Databases, Morgan Kaufmann Publishers, 2001.
http://www.ahmetkaymaz.com
Teşekkürler . . . SORULAR ? ? ?
[email protected] http://www.ahmetkaymaz.com
Kitaplarımla ilgili eleştirilerinizi bekliyorum.
C# Programlama Dili ve Yazılım Tasarımı / Programlama İlkeleriC# Programlama Dili ve Yazılım Tasarımı / İleri Düzey Programlama