C# ile Örnek Sipariş Modülü Ders 1

3/22/2020

Selamlar, Bir önceki yazımda C# ile örnek sipariş modülü konusuna ufak bir uygulama ile giriş yapmıştık. O projemizde kullandığmız Sale.Library küpüthanemizi bu çalışmamızda biraz daha geliştireceğiz. Bir sipariş nesnesine ürün ekleme, indirim ekleme, ödeme ekleme methodlarını ekliycez. Ve bu eklemeler sonucu oluşan değerlerin hesaplamasını yapacağız. Bu projemizde arayüz olarak Asp.net MVC 3 Razor Page kullanacağız. Şuan için bunun bir önemi yok. Bu sebeble arayüze pek özenmedim. Önemli olan şuan Sale.Library tarafını iyice anlamamız. Projeyi buraya tıklayarak indirebilirsiz.

Projeyi açtığınızda ilk olarak Sale.Library bölümüne dikkatinizi verin. Görüldüğü üzere SaleModel, Product, Payment, Discount classlarımız var. Temel classımız SaleModel'dir. SaleModel içerisinde diğer nesneler List halinde propertyler halinde eklenmiştir. Bu List propertylerine item eklemek için ise methodlarımız mevcut. İlk olarak SaleModel.cs dosyasını inceliyelim.

   //Samet ÇINAR > Sale Model
    public class SaleModel
    {
        /// SaleModel instance alındığında list tipinde olan özellikler null olmaması için cons kullandım.
        /// Aynı zamanda burda tabi ki farklı işlemlerde yapılabilir..
        public SaleModel()
        {
            Products = new List();
            Payments = new List();
            Discounts = new List();
        }
        #region Properties
        public string Code { get; set; }
        public List Products { get; set; }
        public decimal GrandTotal
        {
            get
            {
                return Products.Sum(s => s.Price);
            }
        }
        public decimal TotalQuantity
        {
            get
            {
                if (Products.Any())
                    return Products.Sum(s => s.Quantity);

                return decimal.Zero;
            }
        }
        public List Payments { get; set; }
        
        /// Yapılan ödemelerin toplamı
        public decimal TotalPayment
        {
            get
            {
                if (Payments.Any())
                    return Payments.Sum(s => s.Price);
                return decimal.Zero;
            }
        }
        public List Discounts { get; set; }
        
        /// Yapılan indirimlerin toplamı
        public decimal TotalDiscount
        {
            get
            {
                if (Discounts.Any())
                    return Discounts.Sum(s => s.Price);
                return decimal.Zero;
            }
        }
        
        /// Yapılan ödemeler ile toplam tutarın farkı.
        /// Kalan tutar
        
        public decimal RemainingPrice
        {
            get
            {
                return GrandTotal - (TotalPayment + TotalDiscount);
            }
        }
        #endregion
        #region Methods
        
        /// İlgili SaleModel'e bir satır ürün ekler..
        
        public void AddProduct(Product product)
        {
            this.Products.Add(product);
        }
        
        /// İlgili SaleModel'e bir satır ödeme ekler..
        
        public void AddPayment(Payment payment)
        {
            this.Payments.Add(payment);
        }
        
        /// İlgili SaleModel'e bir satır indirim ekler..
        
        public void AddDiscount(Discount discount)
        {
            this.Discounts.Add(discount);
        }
        #endregion
    }
	

Anlaşılır olması açısından propertylerin üstüne yorum satırları ekledim bunları okumanızda fayda var. Aynı zamanda burda ki yapılanları özetliyelim. Bir SaleModel'imiz var. Bu model içerisinde product, discount, payment nesnelerinden listeler barındırıyor. Product nesnelerinin price toplamlarına göre ortaya çıkan GrandTotal. Discount ve Payment nesnelerinin price toplamı ile GrandTotal arasında farkı bulunan RemainingPrice yani kalan tutar bulunuyor.

Methodlarımız aynı class içerisinde olduğundan bize güzel bir kullanım şekli sağlacak. Instance aldığımız SaleModel'i kullanırken "AddProduct" diyerek yeni ürün ekleyip. Buna bağlı ödeme ve indirimleri saleModel.AddPayment, saleModel.AddDiscount gibi kullanabileceğiz. Product, Discount ve Payment nesnelerimiz ise şu şekilde ;

  public class Product
    {
        public string Name { get; set; }
        public string Barcode { get; set; }
        public decimal Price { get; set; }
        public int Quantity { get; set; }
    }
    public class Discount
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
    public class Payment
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
    }

Ben bu nesnelerde ki özellikleri en temel haliyle yazdım. Siz talep, isteklere göre bunu genişletebilirsiniz. Yukarda anlattığımız olaylar sonucunda bir nesneye ürün ekleyip ödeme ve indirimleri girebilir hale getirdik. Bundan sonra nesnemizi saklama ve istediğimizde cağırma işlemlerini yapacağımız bir class yazalım. Bu classın adına "SaleController" diyorum. Arayüz olarak web ortamı kullanacağımız için nesnemizi Session'a yazıp. İstediğimiz zaman ordan geri çekicez. Bu SaleController.cs ise şu şekilde ;

 public static class SaleController
    {
        /// Session üzerinde SaleModel varsa eğer onu döner yoksa yeni bir nesne oluşturur..
        public static SaleModel GetSale()
        {
            if (System.Web.HttpContext.Current.Session["SaleModel"] != null)
                return (SaleModel)System.Web.HttpContext.Current.Session["SaleModel"];

            return new SaleModel();
        }
        /// İlgili SaleModel'de yapılan değişiklikleri kayıt eder..
        public static void SaveChanges(this SaleModel saleModel)
        {
            //Buralarda veritabanına yazma işlemleri yapılabilir tabi ki.
            //Biz şimdilik sadece Session üzerine yazıyoruz..
            System.Web.HttpContext.Current.Session["SaleModel"] = saleModel;
        }
    }

Burda SaleController nesnesi ile GetSale() dediğimiz session üzerinde SaleModel nesnesi varsa bize onu döndürücek. Yoksa eğer yeni SaleModel oluşturucak. SaveChanges() methodunu cağırdığımız ise SaleModel'in son halini Session'a atıcaktır. Bu methodu (this SaleModel saleModel) olarak extension halinde kullandım. Direk olarak instance aldığımız SaleModel nesnesine .SaveChanges() diyebilmek için. Yorum satırlarında da yazdığım burda ben sadece Session üzerinde işlem yaptım. Eğer bu sipariş modülü veritabanına kayıt yapılacaksa o işlemler burda olabilir.

Yada Sale.Data diye farklı katman yapıp burda veritabanına kayıt işlemleri yapılabilir. Bu tarzda bir çalışmayı sonra ki yazılarımda yapacağım. Asp.net MVC ile Sale.Web projesi açtım. Bunuda projeyi indirdiğinizde görüceksiniz. Burda da ürün ekleme, ödeme ekleme, indirim ekleme methodlarının kullanımını görüceksiniz. Bu bölümlerde html form post etme işlemleri var pek anlatıcak birşey yok.

Projeyi indirirseniz eğer rahatlıkla kullanımlarını inceleyebilirsiniz zaten. C# ile gerçekten güzel bir sipariş modülü yaptık. Bu modülü küçümsemeyin, temel olarak çok iyi bence. Bunun üstüne geliştirme yaparak projeler geliştirebilirsiniz benden söylemesi.

Samet ÇINAR Hakkında

2010 senesinden bu yana hem tam zamanlı hemde freelance olarak yazılım projelerinde görev almaktayım.
Her gün daha güzel geliştirmeler yapmak için araştırıp öğrenmeyi, öğrendiklerimi aktarmayı çok seviyorum.

İLGİLİ YAZILAR

YORUMLAR

Ufuk

3/22/2020

hocam güzel bi giriş olmuş şahsen benim adıma iyi bir başlangıç ve eğitici oLdu baya diğer yazıları bilmem de bu yazının serisini bekliyorum :)

bestes casino spiel

3/22/2020

thors hammer freispiele , online casino spiele erfahrung - buffalo thunder automatenspiele : greifautomat kuscheltiere tricks .

Razzemn

6/3/2020

1500$ Free gift to everyone! http://ruinstaforex.ru/ Hurry up the promotion will only last a few days!

GregoryFaf

6/3/2020

cbd oil for dogs <a href="http://cbdoilstoppain.com/#">hemp oil cbd</a> pure cbd oil <a href=https://cbdoilfsale.com/ >cbd oil full spectrum yaa health store</a>

Mailafaulk

6/3/2020

<a href=https://spravka.xyz/medspravka/073-u/><img src="https://i.ibb.co/txS7kRX/face-mask-5024611-1920.jpg"></a> What’s the most ridiculous animal on the planet?

LeonardAmedo

6/3/2020

natural skin remedies <a href= https://athletics.cmu.ca/plaquenil-canadaq.html >athletics.cmu.ca/plaquenil-canadaq.html</a> lip sores remedies

Daria Layla

6/3/2020

Your site is beautiful and deserves more traffic! Here's how you can get 1st place in Google: https://bit.ly/36V8YGQ

Brianbup

6/3/2020

buy viagra online rx <a href="https://judpharmacy.com/">buy viagra vegas</a> buy single viagra pills

GregoryFaf

6/4/2020

cbd oil benefits <a href="http://hempoilvs.com/#">cbd oil</a> pure cbd oil <a href=https://bestscbdoil.com/ >cbd oil with thc for sale</a>

LarryChoot

6/4/2020

What is P2P video surveillance? What is a p2p camera? Is p2p camera secure? More info at http://www.p2pcamera.online <a href=http://multiplefilemaker.com/ai-scraping.htm>ai scraping</a>

Peterhaulp

6/4/2020

Лабораторная диагностика : https://bestsex.ru/analiz - Лабораторная диагностика Гормональный статус (женский)

DavidPriex

6/4/2020

<a href=https://gasvleningrade.ru>гез гелий купить в спб</a> - баллон гелия купить, баллон гелий недорого

suzannesd16

6/4/2020

College Girls Porn Pics http://bannerfreeporn.xblognetwork.com/?maya forum porn dvd download free porn girls videos black shemale streaming porn porn actress adora plus size sexy women porn

Triamdindy

6/4/2020

Если Вы думаете подобрать и купить себе фирменную мужскую аксессуары Calvin Klein, Michael Kors, Polo Ralph lauren, Diesel, Tommy Hilfiger, Sperry или женские сумки,кошельки CALVIN KLEIN по выгодной цене со скидками – заказывайте товар в интернет-магазине ТРИАМАРТ в Киеве и подберете что нравится! Большой ассортимент , только оригинальной продукции известных брендов удовлетворят Ваши желания . Быстро доставляем заказы по Киеву и всей Украине. Поможем подобрать, проконсультируем по размерам по Вайберу +38-093-538-7170. Качество, подлинность товара и выгодные цены гарантируем! <a href=https://triamart.com.ua>Брендовый магазин одежды, обуви и аксессуаров</a>

GregoryFaf

6/4/2020

new leaf cbd oil <a href="http://cbdoilpure.org/#">cbd oil for pain</a> cbd oil for dogs <a href=https://walmart-cbdoil.com/ >medterra cbd</a>

RickyOmile

6/4/2020

download new games.org 6.74 c download dota bihnet download tanah kubur download download miniprogrammer <a href=https://spiritualfriendship.site/5627.html>download alyloony</a> <a href=https://spiritualfriendship.site/2104.html>korg download m1 le</a> <a href=https://spiritualfriendship.site/2530.html>download film ezdevaj be sabke irani</a> kontraband messy marv download download lagan mp3 songs e107 download bg wheelhouse poster free download download buku melukis pelangi

xponyumnx

6/4/2020

Интересная новость _________________ <a href="https://bets.all100topcasinos.site/test-bukmekerskoy-kontory/">Тест букмекерской конторы</a>

CharlesRog

6/4/2020

Жизнь с запущенным раком простаты может быть подавляющей. Важно понимать как болезнь, так и ваше лечение, чтобы вы могли принимать активное участие в принятии решений о вашем лечении. Если уровень простат-специфического антигена (ПСА) постоянно повышается во время лечения, которое снижает уровень тестостерона, это может означать, что ваш рак простаты прогрессирует. Прогрессирование означает, что рак ухудшается или распространяется. Когда это произойдет, ваше лечение может измениться. Вот почему ваш врач может назначить XTANDI - лечение, которое может помочь замедлить прогрессирование. <a href=https://www.xtandi.ru/index/xtandi_ehnzalutamid_kstandi_enzalutamide_kupit/0-5>кстанди 40 мг купить</a>

Rogerlit

6/4/2020

<a href=https://levitrasun.com/ >levitra generic</a> does levitra work men <a href="https://levitracoupon.us.com/#">online levitra</a> normal levitra dose

Valeti Rix

6/4/2020

<a href=https://info-sovety.ru/video/fn8rj1rU86Q>Как сэкономить деньги и сохранить семейный бюджет</a>

LauraKit

6/4/2020

Привет Саня, как ты и просил - порно видео где можно скачать ролики на телефон бесплатно hoporno.net . И еще пару тройку вариантов <a href=http://hoporno.net/loads/arabs/>арабское порно</a> Лучшие эро видео порнухи http://hoporno.net/ скачать xxx на мобильный телефон ххх картинки http://hoporno.net/loads/incest/ русский инцест скачать http://weprik.ru/loads/zoo/ зоо трах видео http://erkiss.org/ ххх порно видео http://weprik.ru/ скачать порнуху на мобильный http://fporno.ru порно скачать на телефон

ad18

6/4/2020

Sexy photo galleries, daily updated collections http://extreme.porn.relayblog.com/?morgan porn on the rag having sex pon ex wife porn pictures purge computer of porn licking pussy porn

bk18

6/4/2020

Girls of Desire: All babes in one place, crazy, art http://hoterika.com/?janiya midget porn bideos gay porn galleries fetish porn celebrity dess up games bad porn site porn haus

ninabap

6/5/2020

Тут можно прочитать про <a href=http://yourdesires.ru/useful-advice/51-kak-otklyuchit-platnye-podpiski-na-bilayn.html>запрет подписок на короткие номера билайн</a>, а ещё интересно написано про <a href=http://yourdesires.ru/finance/business-news/1140-raex-ekspert-ra-menyaet-reytingovuyu-shkalu-po-kreditnym-reytingam.html>рейтинговая шкала эксперт ра</a> http://yourdesires.ru/psychology/fathers-and-children/41-psihologiya-otnosheniy-materi-i-docheri.html гель микоцин отзывы можно посмотреть на сайте <a href=https://yourdesires.ru/beauty-and-health/1568-kompleks-mikocin-izbavit-ot-gribka-vsego-za-30-dnej-i-ne-dopustit-povtornogo-zarazhenija.html>мазь микоцин</a>

Yorum Yap