18 Ağustos 2020 Salı

IValidatableObject Nedir?












Merhabalar,

Hangi tür proje olursa olsun kullanıcıdan aldığımız verilerin bir sistemde storelanması durumu söz konusuysa eğer bu durumda son user tarafından girilen veriler direkt olarak sisteme alınmadan önce denetlenmelidir. Aksi takdirde veriyi sadece kaydetmiş oluruz, developerlar verileri düzgün toplayabilmek adına farklı yöntemlere başvurmaktadır. 


Kullanıcıyı kısıtlamazsak aşağıdaki gibi durumlarla karşı karşıya kalabiliriz. 

  • Mail bölümünde telefon
  • Telefon hanesi 2-3 hane içeren data
  • Kullanıcı adı girilmemiş vs.

Örnekleri çoğaltmamız mümkündür :) Verileri doğrulamazsak istediğimiz türde veri girişi yapılmış mı kontrol etmezsek rapolandırmamız gereken bir sistemde oturur ağlarız, alakasız verilerden ötürü....


Entity Framework ile geliştirilmiş proje özelliklerin doğrulanması için çeşitli imkanlar sunmaktadır. Doğrulama işlemlerini iki farklı seviyede yapmamız mümkündür. 

  • Entity
  • Context


Doğrulama kuralları(Validation Rules)

Entity seviyesinde iki şekilde yaptırılabilir. 

  • Nitelik(Attribute) bazlı
  • IValidatableObject arayüzünün implementasyonu ile. 

Context seviyesinde ise ValidateEntity isimli daha önceden tanımlanmış olan sanal metodunun ezilmesiyle (override) yapabiliriz. 


IValidatableObject implement etmiş bir class örneği aşağıdaki gibidir.
Projemize öncelikle aşağıdaki gibi tanımlama yapmamız gerekecektir. 

using System.ComponentModel.DataAnnotations; 

class Ogrenci : IValidatableObject

{

    public int OgrenciID { get; set; }

    public string Adi { get; set; }

    public string SoyAdi { get; set; }

    public string Memleketi { get; set; }

 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)

    {

 

    }

}


 “IValidatableObject” Interface’ini implement ettikten sonra “Validate” isimli metodun içinde validasyonlar yani kurallarımızı eklememiz gerekecektir. 

 if (Adi.Length < 5 || Adi.Length > 35)
{
yield return new ValidationResult("Adınız 5'ten büyük, 35'ten küçük olmalıdır.", new List<string> { "Adi" });

}

Projedeki validate metodu içine kurallar yazılır ve denetim yapılır, kullanıcı veri girişi yaparken de kafasına göre istediğini yazamaz bizim belirttiğimiz şekilde kurallara uymak zorunda kalacaktır. Projelerimizde veri denetimi noktasında IValidatableObject kullanabiliriz. 

30 Temmuz 2020 Perşembe

Programlama Dili Nedir?

Merhabalar,

Programlama dili nedir diyerek başlayalım :)

İnsanlarla anlaşmak için dil, bilgisayarlar ya da elektronik cihazlarla anlaşmak için programlama dili biliyor olmamız gerekecektir. Eğer bir gün İtalya'ya giderseniz oradaki insanlarla anlaşabiliyor olmanız için ingilizce ya da italyanca öğrenmemiz gerekir. Tıpkı dillerde olan çeşitlilikler gibi programlama dilleri de çeşit çeşittir. Programlama dillerinin çeşitleri aşğaıdaki gibidir.

Programlama Dilleri

  • C#           (csharp)
  • Java         (android app,web tabanlı yazılımlar(website))
  • Python     (yapay zeka kütüphanelerini içeren bir dil)
  • C
  • C++
  • Javascript (front end)
  • Pascal  
  • Php           (personel home page)
  • R          
  • Go
  • Kotlin       (android)


Sıradaki dil hangi dil olmalı ya da hangi programlama dilini öğrenmeliyiz?
Hangisini bilmeliyiz noktasında popüler dilleri takip etmek ya da farklı dilleri yıllara göre kıyaslayabileceğimiz siteye gitmek için tıklayınız.


Neden C# öğrenmeliyiz?
  • Kurumsal firmalar C# dilini kullanmakta. (.net developer - .net geliştiricisi - .net yazılım uzmanı ) C#, Visual Basic, F# vs. programlama dilleri ile .Net Framework dünyasında ya da .Net Core dünyasında uygulamalar geliştirebiliriz.
  • Orta seviyede C# bilerek rahatlıkla iş bulabiliriz.



C# Dilini Kullanarak Ne Tarz Projeler Geliştirebiliriz?
  • Otomasyon Yazılımları, Web Siteleri, Oyun Programlama, Mobil Uygulamalar
Mobil Uygulamalar için Xamarin, Oyun Programalama için Unity biliyor olmamız gerekecektir.


C# Dilini Öğrendim, Ardından Yeni Bir Programlama Dilini Kolay Öğrenebilir Miyim?
C# dilini ya da başladığımız dili tam anlamıyla öğrenirsek, ikinci bir programlama dilini öğrenmemiz çok kolay olacaktır. Önemli olan projelerin geliştirilmesi aşamasında nerede ne yapmamız gerektiğini çıkartabilmektir. Hangi sırayla ilerlememiz gerektiğinin map'ini çıkartabildiğimizi varsayalım geri kalan kısım bu sırada hangi programlama ögesini kullanmamız gerektiğine karar vermektir. Tekrarlı işlemleri döngüyü, hafıza ortamında değer saklamak istediğimizde değişkenleri, bir denetim yapmak istediğimizde if -else if yapısını, denetim artarsa switch-case yapısını kullanmak gerektiğine hakim olmamız yeterlidir.

Nedir Bu Algoritma Dedikleri?
Pratikte, hani günlük hayatta çok sık yaptıklarınızı nasıl daha hızlı yapabiliriz diye bir yol haritası çiziyoruz ya aslında o bir algoritmadır. O kadar çok yapmışızdır ki artık yağmurlu bir günde metrobüse nasıl kolay binebileceğimizi bizden başkası bilemez :) 

Teoride, bir problemin çözümü için gerekli olan basamakların aşama aşama sırayla yazdırılması işidir. Bilgisayara neyi nasıl yapmasını gerektiğini öğretmektir aynı zamanda. Kaslı kuvvetli olan bilgisayarlar neyi nasıl yapmasını bilemezler bu noktalarda algoritmalarımızı çıkartıp bilgisayara anladığı programlama dilini kullanarak işleri yaptırmak gerekecektir. Algoritmanın bir programlama dili değildir. 

İdeal Algoritma Özellikleri
İdeal bir algoritma aşağıdakileri içermelidir.
1.sonu olmalıdır.
2.Basamaklarda mümkün olduğunca tek komut söylenmelidir.
3.İşin mümkün olduğunca net bir şekilde anlatılması gerekir.
4.İstediğimiz kadar basamak kullanabiliriz.

Algoritma Örnekleri

  • Yol Tarifi
  • El Yıkama Tarifi
  • Yemek Yapma Tarifi
  • Corona'dan Korunma Tarifi

Algoritma ile ilgili daha önceden Kültür Koleji'nde eğitim verdiğim dönem öğrencilerime hazırlamış olduğum slide'a ulaşmak için tıklayınız.

Algoritmamı Nasıl Geliştiririm?
Bu bir süreçtir aslında. Hemen bugün bir anda geliştirmek hem zor hem de vakit alıcı olacaktır. 
  • Beyin Fırtınası yapabildiğiniz ortamlar
  • Oyun Oynamak ( Happy Glass, Blockly Games, Brain It On
  • Bulmaca Çözmek (Sudoku vs.)

Daha önce algoritma ile yazmış olduğum makalem için tıklayınız. 

Bol Algoritmalı Günler :) 






31 Mayıs 2020 Pazar

C# Erişim Belirleyiciler - Access Modifiers

Öncelikle erişim belirleyicilerin (access modifiers) nerelere uygulandığını bilmemiz lazım; C# projesinde tanımlanmış tüm varlıklara uygulanabilir, buna class, struct, function, method, property ve class seviyesindeki tüm değişkenler dahildir.
Peki, neden erişim belirleyicilere ihtiyaç duyarız?
Çünkü, uygulamamızda kullandığımız varlıkların bulundukları kod bloğunun dışından erişilip/erişilemeyeceğini belirlemek isteriz.
C# dilinde tanımlı erişim belirleyiciler (access modifiers);
public : public olarak tanımlanan öğe, kod bloğunun içinde ve dışında tamamen erişilebilirdir. Yani, hiçbir kısıtlama yoktur.
protected : protected olarak tanımlanan öğe, sadece tanımlandığı class’ın içinde ve o class’tan türetilmiş diğer class’ların içinde erişilebilirdir.
internal : internal olarak tanımlanan öğe, bulunduğu assembly’nin (Dll veya Exe dosyası) içinde erişilebilirdir. Dll veya Exe dosyasının içerisinde erişim için kısıtlama yoktur, ama dışarıdan erişilemez.
protected internal : protected internal erişim belirleyicisi, protected ve internal erişim belirleyicilerinin VEYA (OR) işlemiyle birleştirilmiş halidir. protected internal olarak tanımlanmış öğe, tanımlandığı class’ın içinde ve o class’tan türetilmiş diğer class’ların içinde erişilebilir. Ayrıca, aynı assembly içinde olmasalar dahi, tanımlandığı class’tan türetilmiş diğer class’ların içinde de erişilebilirdir.
private : private olarak tanımlanan öğe, sadece tanımlandığı class’ın içerisinde erişilebilirdir. En katı erişim belirleyicidir.
Aslında CLR içinde tanımlı bir erişim belirleyici daha vardır. FamilyAndAssembly olarak bilinir. C# kelimeleri ile benzetmeye çalışırsak, protected VE (AND) internal erişim belirleyicisidir. C# dili bu erişim belirleyicisini desteklemez, eğer kullanmanız gerekiyorsa, C++ ve direk IL yazmanız gerekmektedir.
class veya struct‘lar ya public, ya da internal olabilir, varsayılan olarak internal erişim belirleyicisine sahiptirler.
Varsayılan olarak class içerisinde tanımlı öğeler private erişim belirleyicisine sahiptirler.
struct içerisinde tanımlı öğeler public, internal veya private olabilirler. struct‘lar türetmeyi desteklemediği için protected ve protected internal erişim belirleyicisine zaten ihtiyaçları yoktur.

30 Nisan 2020 Perşembe

Görsel Kullanımında Neden SVG Formatını Tercih Etmeliyim?

Merhabalar,

Aşağıdaki makalemde svg ile merak etmiş olduğunuz bir çok bilgi bulunmaktadır. Hadi başlayalım :)





Açılımı Scalable Vector Graphics olan svg, Ölçeklendirilebilir Vektör Grafikleri anlamına gelmektedir.  


  • XML tabanlı bir vektör grafik formatıdır. 
  • Vektör yapısındadır.
  • XML dosyasında çizim bilgilerini barındırmaktadır.
  • SVG dosyasını kullanarak animasyonlar hazırlanabilir.









Nasıl SVG uzantılı dosya oluşturabilirim? 

Herhangi bir metin editörü yardımıyla SVG dosyası oluşturmak mümkündür. Adobe Illustrator gibi programlarla, oluşturduğumuz çizimleri SVG olarak kaydedebiliriz.


Neden SVG Kullanmalıyım?

  • SVG dosyası herhangi bir boyuta ölçeklendirilebilir. Herhangi bir bozulma olmayacaktır. İstediğimiz boyutta kaliteyi kaybetmeden gösterebiliriz.
  • Görsel yaklaşsanız bile herhangi bir bozulma olmaz. 
  • Dosya boyutlarının küçük olması



SVG Nerelerde Kullanılır?

Web sitelerinde, mobil uygulamalarda ve daha bir çok ortamda kullanılabilir.


24 Mart 2020 Salı

Android ListView Kullanımı

Merhabalar,


Android tarafında listview kontrolü ile nasıl çalışırız bu sorularınızın cevabını bu makalede bulabileceksiniz. ListView nedir diye aklınıza geliyor olabilir. Android tarafında verileri liste halinde göstermek istediğimiz zaman kullandığımız bir kontroldür. ListView örnekleri aşağıdaki görselde gösterilmiştir. 





















Artık uygulamalara bu gözle bakarsak hemen hemen birçok uygulamada kullandığımız sonucuna varabiliriz. 


Peki Nasıl ekleriz? 

Öncelikle her android uygulamasında olduğu gibi sayfamızda bir listview barındırmamız gerekecektir. Android uygulamamızda Ekran Tasarımı tarafına bir listview ekleyerek başlıyor olmamız gerekecektir.





Ekrana eklediğimiz listview üzerindeki kontrolün nasıl görüneceği kısmını belirlemek için de aşağıdaki gibi bir layout tasarımı oluşturalım. Layout adı activity_listview.xml adında olsun.


Ekran tasarımını tamamladıktan sonra artık Java kodlarını yazacağımız MainActivity.java dosyasına geçip kodlarımızı yazabiliriz.



Kodlarımızı yazdık artık uygulamamızı çalıştırıp sonucu görebiliriz.





4 Mart 2020 Çarşamba

.Net Core Projesi Nedir - Ne Değildir?

Merhabalar, 

Asp.Net Framework'ün  baştan aşağı yenilenerek yeniden yazıldığı Asp.NET Core MVC projeleri hakkında bilgi almak istiyorsanız makalemi okumaya devam ediniz :)

















Asp.Net Core MVC Nedir? 

Microsoft'un yeni nesil açık kaynak kodlu web programlama aracıdır.  .Net yazılımcı toplulukları tarafından geliştirilen açık kaynak kodlu bir uygulma geliştirme platformudur. Çapraz platform desteği var. Windows, macOS ve Linux platformlarında ayrıca cihaz,bulut ve gömülü sistemlerde kullanılır.




Neden Core Projelerini Öğrenmeliyim?


Ciddi iş potansiyeline sahip olan bu alanda kendimizi geliştirip iyi bir kariyer sahibi olmak istiyorsak güncel teknolojileri yakından takip etmeliyiz.

Neden Core Projesi Oluşturmalıyım?

  • Cross-platform larda uygulama geliştiriyorsam , yani uygulamam Windows, Linux, macOS gibi işletim sistemleri üzerinde çalışsın istiyorsam
  • Mikroservis mimarisi , yani Java,.NET Framework ,Ruby gibi monolitik dillerler ile yazılmış servislerin veya mikroservislerin karışımı teknolojisi.
  • Container kullanıyorsam ,Docker gibi.
  • Projemin artık çok iyi bir performansa ihtiyacı varsa (Web Framework Benchmarks bakınız)




.NET Framework Ne Zaman Seçmeliyim?
  • Kullanmış olduğum üçüncü parti .NET kütüphaneleri , dll leri , .NET Core için henüz mevcut değilse , yoksa
  • NuGet paketleri .NET Core için henüz mevcut değilse , yoksa
  • Kullandığım platform .NET Core desteklemiyorsa (Azure, üçüncü parti platformlar ya da Service Fabric Stateful Reliable Service gibi.)




2 Mart 2020 Pazartesi

Abstract Interface Farkı

İş görüşmelerinde sıkça karşılaştığımız bu iki terim hakkında detaylı olarak bilgiyi aşağıda bulabilirsiniz.

İkisi birbirine benziyor gibi görünse de aralarındaki farklardan bahsediyor olacağız. 

Nesne yönelimli programlamanın temel taşlarından birisi olan abstraction (soyutlama), C# programlama dilinde iç detayları gizleyerek sadece işlevleri göstermeye yaramaktadır. 

Soyutlama demiş olduğumuz kurguyu yaparken abstract ve interface yapılarını kullanıyor olmamız gerekecektir. Arkadaki teknik hadiselere takılmadan, bize sunulmuş olan metotları kullanarak işimizi görmeye çalışırız.

Şimdi abstract class nedir biraz ondan bahsedelim. Abstract class yapıları genellikle base class (temel sınıf) olarak tanımlamak için kullanılan ve soyutlama yeteneği kazandıran sınıflardır. Elimizdeki bir sınıfı abstract yapmak için abstract yani kelime anlamı soyut olan anahtar kelimeyi kullanırız. 

Abstract bir class içerisinde en az 1 tane abstract üye bulundurmalıdır. Aşağıdaki görselde Yazdir isimli abstract class içerisinde EkranaYazdir isimli metot içermektedir. Bu metot override edilerek gövdesi kodlanır.


    abstract class Yazdir
    {
        public abstract void EkranaYazdir();

    }

Abstract class özellikleri aşağıdaki gibidir:
  • kalıtım (inheritance) uygularken kullanırız.
  • soyut anlamına gelmekte olup new anahtar kelimesi ile nesneleri oluşturulamaz.
  • içerisinde değişken ve metot imzası barındırır.
  • abstract sınıflardan kalıtım alan sınıfların abstract metotların implement edip gövdesini kodlaması zorunludur.
  • Constructors (yapıcı metot) ya da destructors(yıkıcı metot) bulundurabilirler.
  • abstract classlar static olarak tanımlanamazlar, derlenme anında an abstract class cannot be sealed or static hatası verirler.
  • bir sınıf sadece 1 tane abstract classtan kalıtım alabilir. Çoklu kalıtımı desteklemez.
  • abstract classlar içerisinde abstract olmayan metotları da bulunabilir.
  • kendisinden inherit alacak sınıflar ile arasında is-a ilişkisi vardır. (abstact yapmamız gereken senaryolarda interface mi yoksa abstract mı kullanmamız gerektiğini belirtecek senaryo)

IS-A ilişkisi

Çarpışan araba bir arabadır ve arabanın sahip olduğu özellikleri barındırmalıdır.


Can-Do ilişkisi 

Çarpışan arabanın hızlanabiliyor olması, yavaşlayabiliyor olması vs. eğer class'lara yetenek kazandırmak istersek kullanılır.


Farkları

Abstract Class                                              Interface
Constructor içerebilir                                      Constructor içeremez.
Static üyeler içerebilir.                                    Static üyeler içeremez.
public,private,protected olabilirler.                   Sadece public.
IS-A ilişkisi                                                    Can-do İlişkisi
Çoklu kalıtım yok.                                          Çoklu kalıtım var.
Ortak özellikler abstract classa yazılır.              Ortak metotlar interace'e yazılır.
Türetilen sınıf kısmi implement edebilir.           Türetilen sınıf implement zorunda
Metot imzaları ya da implementasyonlar          Sadece metot imzaları içerir.








Session Nedir? Neden İhtiyacım Var?

HTTP nedir? HTTP, yani Hypertext Transfer Protocol , web tarayıcıları ile web sunucuları arasında veri alışverişini sağlayan internetin t...