Eyüp ALBAYRAK

Www.EyupAlbayrak.CoM

Herkese merhabalar,

Bu yazımda sizlere POCO(Plain Old CLR Objects) ve Entitiy Framework ve N katmanlı mimari kullanarak basit anlamda e ticaret uygulamasına giriş yapmayı planlıyorum. Projemizin katmanları DAL(Data Access Layer), POCO(Plain Old CLR Objects),BLL(Business Logic Layer) ve UI(User Interface +ASP.NET ) olacak. Bol resimli bir anlatım planlıyorum umarım anlaşılır olur ve işinize yarar.

Visual Studio 2010 açıyoruz ve File New Project diyerek class library ekliyoruz. Proje ismi olarak Eticaret.POCO veriyoruz.

 



Solutiona sağ tıklayarak yeni bir class library ekliyoruz bunun ismide Eticaret. Eticaret.BLL olacak.

 

 

 

ve son kütüphane olarak DAL kütüphanemizi de ekliyoruz aynı şekilde Eticaret.DAL ismini veriyoruz.

 

 

 

Son olarakta sunum katmanımız olan ASP.NET projemizi ekliyoruz isim olarak Eticaret.Web.UI ismini verdim ileride Mobil yazmak istersek Eticaret.Mobil.UI gibi yeni bir proje daha ekleyebiliriz. Solutionun son hali aşağıdaki gibi olacak Class1.cs dosyalarını siliyoruz.

 

 

Şimdi de kütüphanelerimizi birbirlerine referans olarak ekleyeceğiz. Ekleme yöntemimiz şu şekilde olacak; BLL ye DAL ve POCO kütüphanelerini   UI a BLL ve POCO kütüphanelerini DAL a ise POCO kütüphanelerin referan olarak ekleyeceğiz. Bu sayede BLL yani Business Logic Layer katmanımız UI katmanının diğer data katmanlarına erişmesini engelleyecek ve uygulama güvenliğini sağlayacaktır.

Sırada ise Entity Framework dosyamızı oluşturmak var DAL kütüphanemize sağ tıklayarak Add New Item diyerek ADO.NET Entity Data Model i seçiyoruz isim olarakta Eticaret.edmx veriyoruz.

 

 

Database seçme kısmında boş bir model oluşturmak için Empty model seçeneği ile devam edeceğiz. Boş model ekranı karşımıza geldiğinde ise kendi Entity nesnelerimiz oluşturup propertylerimizi tanımlayıp aralarındaki ilişkileri tanımlayacağız. Forma sağ tıklayıp Add Entity diyerek oluşturma işlemlerine başlayabiliriz.

 

 

Bir E ticaret uygulaması yazdığımız için veritabanımızda olması gereken temel tablolar şunlar olmalı: Kategori, Ürün, Müşteri ve Sipariş. Entityleri ve propertyleri tanımladıktan sonra aralarındaki ilişkileride tanımlamamız lazım. 

 

İlişkileri tanımladıktan sonraki şekil aşağıdaki gibi olacak. Dikkat ederseniz entityleri tanımladığımızda  Ürün entitymizde KategoriId yoktu ilişkileri tanımladık sonra Ürün entitymizde KategoriId oluştu buda EntityFramework un nimetlerinden biri. 

 

 

Entityleri ve ilişkileri tanmladıktan sonra forma sağ tıklayarak Generate Database from Model diyelim veritabanı bağlantı bilgilerini girelim ve işlemi tamamlayalım. Oluşturduğumuz entitylerin sql scriptinin oluştuğunu göreceksiniz.  Bu aşamadan sonra script üzerine sağ tıklayarak Execute diyeceğiz ve bağlandığımız veritabanında tablolarımızın oluştuğunu göreceksiniz.

 

Tablolarımızı oluşturduktan sonra  Eticaret.POCO kütüphanemize sağ tıklayarak Add new item diyoruz ve ADO.NET POCO Entity Generatoru (Online Templates kısmından arayarak visual Studio ya eklenti olarak ekleyebilirsiniz.) seçiyoruz.

 

 

Eticaret.tt dosyamız oluştuktan sonra çift tıklayarak text modda edmx dosyamızın yolunu değiştiriyoruz. 

string inputFile = @"../Eticaret.DAL/Eticaret.edmx";

 

Aynı şeyi Eticaret.Context.tt dosyasına çift tıklayarak orada da yapıyoruz daha sonra Eticaret.Context.tt dosyamızı sürükleyerek Eticaret.DAL kütüphanemizin üzerine sürükleyerek bırakıyoruz. Daha sonra Eticaret.POCO kütüphanemizden Eticaret.Context.tt dosyasını siliyoruz.

 

Eticaret.DAL kütüphanesinde oluşan App.Config dosyasında ki connectionstring kısmını  Eticaret.Web.UI içerisindeki Web.Config içerisine yapıştırıyoruz.  

 

Şimdi sıra geldi Eticaret.BLL kütüphanemizi yazmaya. KategoriYonet isminde bir class ve name space olarak using Eticaret.BLL yi ekleyelim.  Add Reference diyerek  System.Data.Entity i BLL kütüphanemize ekliyoruz. Daha sonra KategoriYonet class ı içerisinde  kategori ekleme, silme, düzenleme ve listeleme metodlarımızı yazacağız.

 

Kategoriyonet.cs sınıfımız aşağıdaki gibi olacak. Temel olarak hangi metodların olması gerektiğini yazdım siz dilerseniz ekstra metodlar yazarak farklı işlevlerde kullanabilirsiniz. Örneğin kategori sayısını veren geri dönüş tipi Integer türünden olan bir KategoriSayisi() metodu olabilir. 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Eticaret.POCO;

namespace Eticaret.BLL

{

    //IDisposable dan türetmemizin sebebei nesnemizi using blokları içerisinde kullanabilmemiz

  public  class KategoriYonet:IDisposable

    {

        private EticaretContainer entities;

        public int KategoriEkle(Kategori kategori)

        {

            using (entities = new EticaretContainer())

            {

                entities.Kategori.AddObject(kategori);

                entities.SaveChanges();

                return kategori.Id;

            }

        }

        public Kategori KategoriGetir(int kategoriID)

        {

            using (entities=new EticaretContainer())

            {

                return entities.Kategori.Where(x => x.Id == kategoriID).FirstOrDefault();

            }

        }

      public void KategoriGuncelle(Kategori kategori)

        {

            using (entities=new EticaretContainer())

            {

                var sorgu = entities.Kategori.Where(x => x.Id == kategori.Id).FirstOrDefault();

                sorgu.KategoriAdi = kategori.KategoriAdi;

                entities.SaveChanges();

            }

        }

 

        public void KategoriSil(int kategoriID)

        {

            using (entities=new EticaretContainer())

            {

                var sorgu = entities.Kategori.Where(x => x.Id == kategoriID).FirstOrDefault();

                entities.Kategori.DeleteObject(sorgu);

                entities.SaveChanges(); 

            }

        }

     public List<Kategori> TumKategoriler()

        {

            using (entities=new EticaretContainer())

            {

                return entities.Kategori.ToList();

            }

        }

        public void Dispose()

        {

 

        }

    }

}

 

 

Böylece N katmanlı mimamirimizi kurduk EntityFramework ve POCO tanımlamalarımızı yaptık  sıra geldi projemizi geliştirmeye. Onlarıda bir sonraki yazımda ele alacağım UrunYonet , SiparisYonet ve MusteriYonet sınıflarımızı yazıcaz daha sonrada ASP.NET uygulamamızı yazacağız.


 



Televizyonda Dacia Duster rekamlarını izlemişsinizdir . Bir kısmı şöyle “Bir reklam görürsün, Arabayı hayal edersin, Çok çalışırsın, Arabayı alırsın, İlgi çekersin, Koşturduğuna değmeden HEVESİN KAÇAR!”. Bu aslında günlük hayattada öyledir. Bir işe başlarken ve bitirirken buna benzer  şeylerle karşılaşabilirsiniz. Örnek verirsek “Bir proje gelir, Analiz yaparsın, Veritabanı tasarlarsın, Çok çalışırsın, Geceleri uyuyamazsın, Bitirirsin, Kimse bir teşekkür bile etmez eline sağlık demez ,Saftirikler hatalarını bulmak için çabalar, Oraya buraya duyurur, Koşuşturduğuna değmeden HEVESİN KAÇAR.” 

Eğer yazılımcıysanız, ve bir devlet kurumunda çalışıyorsanız canla başla projeler geliştirip bir şeyler üretip faydalı olmaya çalışıyorsanız ve bunun karşılığında bir beklenti içine girmeyin. Zaten maddi olarak kimse bir şey yapamaz sonuçta devlet işi. canla başla çalışmanız için insanların işlerini daha da kolaylaştırdığınız için bir teşekkür  bekliyorsanız onuda beklemeyin.

Size o teşekkürü çok gören o güzel insanlar  yaptığınız işlerdeki bug(hata) ları duyurmak için sizi demoralize etmek için mail atmadıkları yer bırakmazlar. O yüzden devlet kurumundaki arkadaşlara tavsiyem devletinizi milletinizi seviyorsanız çok çalışın üretin kendinizi geliştirin ama ufak bir hata bile yapmayın ve en önemlisi bir teşekkür bile beklemeyin yoksaaaaa “HEVESİNİZ KAÇAR”

 



Daha önceki blogumda da avea jet modem aldığımı ve artıları eksilerini anlatmıştım. Dün itibari ile 3G nin kapsama alanının yetersizliği sebebi ile 12 aylık taahütümü iptal ettirerek modemi ve hattımı iade ettim.

www.sikayetvar.com sitesine yaptığım şikayet üzerine avea müşteri hizmetleri aradı ve yaptığımız testler sonucu yeteli bağlantı hızı sağlanamadı, Yani avea taahhüt ettiği 3.5 Mbit hızı sağlayamadığı için bende 12 taahhüt ettiğim ücreti ödememeyi önerdim onlarda kabul ettiler. Telefonda gecen yaklaşık 60 dakikadan sonra zorda olsa iade ettim. 3G alacak arkadaşlara önerim mutlaka bulundukları veya bulunacakları bölgelerin 3G kapsama alanı içinde olup olamadıklarını öğrenmeleri yararlarına olacaktır. Herkese hızlı internetli günler diliyorum.



Merhabalar sitemde kullandığım blog yazılımını değiştirdim. Değiştime nednelerimi ve karşılaştığım problemleri paylaşmak istiyorum. Daha önce bir arkadaşımın(Hayri :) ) tavsiyesi üzerine Blogsa kurdum access veritabanı ve mssql veritabanı desteği vardı. Bende access kurayım dedim hostun bana verdiği mssql hakkınıda çeşitli denemeler yapmak için kullanırım dedim. Ancak inanılmaz yavaş çalışıyordu sonra üzerine tekrar kurdum ve mssql e çevirdim. Bu defa veri eklemelerde sorun yaşadım upload yapamadım. Dışa veri aktarma yaptım ve sonra Veritabanını komple sildim dosyaları komple sildim ancak sorun devam etti bende başka bloglar deneyeyim dedim. Ve profesyonel blogları incelediğimde BlogEngine gözüme çarptı ve kurayım dedim bolca tema seçeneğinin olması kurululmun kolay olması. Mssql olmadan xml veritabanı sayesinde hızlı çalışması beni cezbeden noktalar oldu. Blog kurmak isteyen arkadaşlara kesinlikle tavsiye ederim