Arama Sonuçları: 'Orta Düzey'

Asp.Net MVC OAuth Login (Github)

OAuth, açık-standart yetkilendirme anlamına gelen ve kimlik doğrulama ve yetkilendirme amacı ile kullanılan bir protokol diyebiliriz. Günümüzde web sitelerinde giriş yaparken veya kayıt olurken gördüğünüz Twitter, Facebook, Linkedin vb. kullanarak yap şeklindeki özellikler bunun örneğidir. Bu yazıda da github yetkilendirmesini kullanarak nasıl oauth yapabiliriz onu anlatacağım.

  • Github uygulaması oluşturma

Öncelikle Github hesabınıza girerek "Settings/Developer settings" altında yeni bir oauth app oluşturmanız gerekiyor.
devamı için tıklayınız...


Hata Kodları mı, Hata Fırlatma mı?

Nesne yönelimli programlamada, akış zincirindeki hataların yakalanması ve yönetilmesi için metot seviyesinde temelde 2 yöntem mevcuttur. Bunlar:

1. Hata Kodları:

Basit bir örnekle anlatacak olursak,

    public class MethodResult
    {
        public MethodResult() { }

        public MethodResult(int errorCode, string errorMsg)
        {
            ErrorCode = errorCode;
            ErrorMessage = errorMsg;
        }

        public int ErrorCode { get; protected set; }
        public string ErrorMessage { get; protected set; }
        public bool HasError => ErrorCode != 0;
    }

    public class MethodResult<T> : MethodResult
    {
        public MethodResult(int errorCode, string errorMsg)
            : base(errorCode, errorMsg) { }

        public MethodResult(T data)
        {
            Data = data;
        }

        public T Data { get; protected set; }
    }

Yukarıdaki gibi bir sonuç sınıfı kullanarak tüm metot
devamı için tıklayınız...


HTTP Metotları Nelerdir? (GET, POST vb.) Farkları Nelerdir?

    HTTP (Hypertext Transfer Protocol) protokolü istemci-sunucu mimarisinde istemci isteklerini sunucunun karşılaması için kullanılan bir protokoldür. Basitçe istemci sunucuya bir istek atar ve sunucu da bir cevap iletir. Sunucu her zaman cevap veren konumdadır. Genellikle, istekte üstbilgi ve gövde (request head, body), cevapta da yine üstbilgi ve gövde (response head, body) vardır. http veya https ile başlayan adresler bu protokole göre hizmet veriyor demektir. Protokolde kullanılan metotlar ise şunlardır:

  • GET
  • POST
  • PUT
  • HEAD
  • DELETE
  • PATCH
  • OPTIONS

    Bunların arasında en sık kullanılan iki metod GET ve POST metotlarıdır. Ancak son zamanlarda yaygınlaşan mobil (android, ios vb.) uygulamaların kullanımı, web api ve rest servis kullanımını artırmış ve diğer metodlar da kullanılır hale gelmiştir. Bu metotların farklarını aşağıdaki gibi anlatabiliriz:
devamı için tıklayınız...


.Net Core (1.0+) Platformunda Kimliğe Bürünme (Impersonation)

Impersonation kimliğe bürünme anlamına gelir. Windows Service veya Web uygulaması gibi sistem, IIS veya farklı genel bir kullanıcıya ait olarak çalışan uygulamalar mevcuttur. Bu uygulamalar üzerinden spesifik bir windows kullanıcısı yetkilendirmesi ile işlem yapmak isteyebilirsiniz. Dosya okuma ve yazma buna bir örnektir. Yazmak istediğiniz (ağdaki veya lokal) klasör sadece belli bir kullanıcıya okuma-yazma izni vermiş olabilir ve sizin de o kullanıcı kimliği ile işlem yapmanız gerekebilir. .Net Framework üzerinde bu işi WindowsImpersonationContext ile yapabiliyorduk ancak gördüğüm kadarı ile .Net Core ve sonrası artık bu yapıyı desteklemiyor.

.NetCore platformunda herhangi bir kullanıcıya bürünerek işlem yapabilmek için WindowsIdentity.RunImpersonated metoduna aksiyon (delege) geçebiliyoruz. Ben aşağıdaki gibi bir yardımcı sınıf kullanıyorum.
devamı için tıklayınız...


Çok Katmanlı Mimari Nedir? Neden Kullanılır?

Çok katmanlı mimari sık kullanılan temel bir mimaridir. Özellikle basit web uygulamalarında uygulanan n-layer ve n-tier olarak farklı 2 kavrama karşılık gelmektedir. Bu iki kavram birbirinden farklıdır.

1. N-Layer:

Genelde uygulamanın 3 katmana ayrılmasıdır. Sunum (presentation), iş (business or logic), veri erişim (data access) katmanları temel katmanlardır. Sırasıyla kısaca PL, BL ve DAL diye adlandıralım. Katmanlar aynı işlem tarafından sunulmakta fiziksel olarak değil ama mantıksal olarak ayrılmış durumdadır. .Net için örnekleyecek olursak uygulamanın 3 farklı kütüphaneden (dll) den oluşması gibi, Java için ayrı package (jar) öğeleri gibi. Açık çok katmanlı mimaride; katmanlar, bağımlı olduğu diğer tüm katmanlara erişim sağlayabilir (PL>>BL & PL>>DAL gibi). Kapalıda ise her katman sadece bir sonrakine erişim sağlayabilir (PL>>BL>>DAL). Bu 3 temel katman dışında ihtiyaca ve tasarıma bağlı olarak başka katmanlar da (Facade, Controller, Proxy vb.) eklenebilir. Ayrıca tüm katmanların erişebileceği (helper, exception vb. sınıfların yer aldığı) ortak bir katman kullanımı da sık tercih edilmektedir.
devamı için tıklayınız...


Tasarım Desenleri - Fabrika Metodu (Factory Method)

Fabrika metodu yaratıcı desen grubuna girer. Oldukça yaygın kullanılmaktadır. Amacımız, bir nesneyi tanımlamak için bir arabirim veya soyut sınıf tanımlamak ancak hangi sınıftan nesne oluşturulacağı kararını alt sınıflara bırakmaktır.

Örneğin aşağıdaki gibi soyut bir enstrüman sınıfı ve bu sınıftan türeyen bazı enstrümanları tanımlayalım.

    public abstract class Instrument
    {
        public virtual void Play()
        {
            Console.WriteLine($"{GetType().Name} played.");
        }
    }

    public class BassGuitar : Instrument
    {
    }

    public class ClassicalGuitar : Instrument
    {
    }

    public class Drums : Instrument
    {
    }

    public class ElectricGuitar : Instrument
    {
    }

    public class Keyboard : Instrument
    {
    }

Daha sonra bu enstrümanları kullanacak olan müzik gruplarını temsil edecek bir soyut sınıf oluşturalım.
devamı için tıklayınız...


Operatör Aşırı Yükleme (Operator Overloading) Nedir?

Operatör Aşırı Yükleme, birli (unary) "+, -, !, ~, ++, -- gibi", ikili (binary) "+, -, *, /, %, &, |, ^, <<, >>" ve karşılaştırma "==, !=, <, >, <=, >=" operatörlerinin, bizim tarafımızdan tanımlanmış karmaşık sınıflarda nasıl uygulanacağına dair yeniden tanımlanmasıdır. Basit bir örnek ile anlatacak olursak:

public class Matrix2D
{
  private readonly int _rowCount;

  private readonly int _columnCount;

  private readonly double[,] _matrix;

  public double this[int row, int column]
  {

    get { return _matrix[row, column]; }

    set { _matrix[row, column] = value; }

  }

  public Matrix2D(double[,] matrix)
  {
    _matrix = matrix;

    _rowCount = matrix.GetLength(0);

    _columnCount = matrix.GetLength(1);
  }

  public override string ToString()
  {
    var stringBuilder = new StringBuilder();

    for (var i = 0; i < _rowCount; i++)
    {
      for (var j = 0; j < _columnCount; j++)
      {
        stringBuilder.Append(_matrix[i, j].ToString("F1").PadLeft(5));
        stringBuilder.Append(" ");
      }

      stringBuilder.AppendLine();
    }

    return stringBuilder.ToString().TrimEnd('\r', '\n');
  }
}

Yukarıda Matrix2D adlı 2 boyutlu matrisleri temsil eden bir sınıf tanımladık. Bu matris sınıfının ikili toplama (+) işlemi için operatör önyüklemesini aşağıdaki şekilde yazabiliriz.

public static Matrix2D operator +(Matrix2D matrix1, Matrix2D matrix2)
{
  if (matrix1._rowCount != matrix2._rowCount || matrix1._columnCount != matrix2._columnCount)
  {
    throw new NotSupportedException();
  }

  var resultMatrix = new Matrix2D(new double[matrix1._rowCount, matrix1._columnCount]);

  for (var i = 0; i < matrix1._rowCount; i++)
  {
    for (var j = 0; j < matrix1._columnCount; j++)
    {
      resultMatrix._matrix[i, j] = matrix1._matrix[i, j] + matrix2._matrix[i, j];
    }
  }

  return resultMatrix;
}

Aynı şekilde matris çıkarma (-) işlemi için de aşağıdaki şekilde yazabiliriz.
devamı için tıklayınız...


Çok Biçimlilik (Polymorphism) Nedir, Ne İşe Yarar?

Çok biçimlilik bir nesnenin, kalıtım yoluyla miras aldığı tüm tiplerde görüntülenebilmesi durumudur. Örneğin;

public interface IAnimal
{
    void MakeSound();
}

Yukarıdaki gibi hayvanı tanımlayan bir arayüz oluşturalım. Arayüz tek bir davranışa (Ses Çıkar) sahip olsun. Aşağıda ise bu arayüzü gerçekleştiren 3 sınıf tanımladık. Kedi, köpek ve köpekten türeyen Husky aynı arayüzü (IAnimal) gerçekleştiriyor.

internal class Cat : IAnimal
{
    public void MakeSound()
    {
        Debug.WriteLine("Meoww");
    }
}

internal class Dog : IAnimal
{
    public virtual void MakeSound()
    {
        Debug.WriteLine("Woof..");
    }
}

internal class Husky : Dog
{
    public override void MakeSound()
    {
        Debug.WriteLine("Auwww");
    }
}


devamı için tıklayınız...


00:00:00
Saturday 15 Jan 2017
Altın Sözler
“Yanlış bir nota çalmak önemsizdir, tutkusuz çalmak ise affedilemez.”
Web hosting by Somee.com