Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (0 Kişi)
  • Online Kişi Bulunmadı

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
C# Hiyerarşik Nesne Tasarımı

 Merhaba Arkadaşlar;

Bu makalemizde sizlere Hiyerarşik bir Class tasarımı nasıl yapabiliriz bunu anlatmaya çalışacağım. Öncelikle böyle bir tasarım mantığı şu an mevcutmudur bilmiyorum. Daha önce veritabanında hiyerarşik tasarım konularını anlatmıştım. Daha sonra bu işi programlama ile yapmak aklıma geldi. Biraz düşündükten sonra aşağıdaki örneği hazırladım. Bu tasarım mantığı OOP mantığının olduğu her programlama dilinde kullanabilirsiniz.
 
Dediğim gibi eğer böyle bir tasarım kalıbı yoksa. Müsadenizle buna isim vermek istiyorum. Adı “Hiyerarşik Nesne Tasarımı” olsun.
 
Ben sizlere bu tasarımı bir şirketteki Personellerin ünvanlarına göre nasıl hiyerarşik bir yapıda sıralayabiliriz gibi kurguladığım bir senaryo üzerinden anlatmaya çalışacağım.
Öncelikle işe Projeye Personel isminde bir class ekleyerek başlayalım.
Personel. cs

using System.Collections;
using System.Collections.Generic;
namespace HiyerarsikNesneTasarimi
{
    public class Personel
    {
        public int ID { get; set; }
        public int ParentID { get; set; }
        public string Ad { get; set; }
        public string Soyad { get; set; }
        public string Unvan { get; set; }
 
        public Personel()
        {
            this.ParentID = 0;
        }
    }
    public class PersonelListesi : CollectionBase
    {
        public void Ekle(Personel PersonelX)
        {
            this.List.Add(PersonelX);
        }
        public void Sil(Personel PersonelX)
        {
            this.List.Remove(PersonelX);
        }
        public Personel this[int index]
        {
            get
            {
                return (Personel)this.List[index];
            }
            set
            {
                this.List[index] = value;
            }
        }
        public List<Personel> Listele()
        {
            List<Personel> listeX = new List<Personel>();
            foreach (object obj in this.List)
                listeX.Add((Personel)obj);
            return listeX;
        }
    }
}
 

 
 
 
Form1.cs

using System;
using System.Windows.Forms;
namespace HiyerarsikNesneTasarimi
{
    public partial class Form1 : Form
    {
        PersonelListesi liste = new PersonelListesi();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //Personel Koleksiyonuna(Listesine) personeller ekleniyor
            liste.Ekle(new Personel { ID = 1,
                                      ParentID = 0,
                                      Ad = "Xİsim1",
                                      Soyad = "XSoyad1",
                                      Unvan = "Patron" });
 
            liste.Ekle(new Personel { ID = 2,
                                      ParentID = 1,
                                      Ad = "Xİsim2",
                                      Soyad = "XSoyad2",
                                      Unvan = "Genel Mdr" });
 
            liste.Ekle(new Personel { ID = 3,
                                      ParentID = 2,
                                      Ad = "Xİsim3",
                                      Soyad = "XSoyad3",
                                      Unvan = "Müdür" });
 
            liste.Ekle(new Personel { ID = 4,
                                      ParentID = 2,
                                      Ad = "Xİsim4",
                                      Soyad = "XSoyad4",
                                      Unvan = "Müdür" });
 
            liste.Ekle(new Personel { ID = 5,
                                      ParentID = 4,
                                      Ad = "Xİsim5",
                                      Soyad = "XSoyad5",
                                      Unvan = "Müdür Yrd" });
 
            liste.Ekle(new Personel { ID = 6,
                                      ParentID = 5,
                                      Ad = "İsmail",
                                      Soyad = "Kocacan",
                                      Unvan = "Yazılımcı Bozuntusu" });
 
            //Personel listesindeki personellerin ParentID özelliği "0" olanlar
            //yani hiyerarşinin kök personelleri çekiliyor.
            foreach (Personel personel in liste.Listele().
                FindAll(personel => personel.ParentID == 0))
            {
                treeView1.Nodes.Add(personel.ID.ToString(),
                    personel.Ad + " " + personel.Soyad +
                    " (" + personel.Unvan + ")");
            }
        }
 
 
        private void treeView1_Click(object sender, EventArgs e)
        {
            //Seçili personele bağlı alt personellerin
            //varsa seçilinin altına eklenmesi
            if (treeView1.SelectedNode.Nodes.Count == 0)
            {
                int ID = int.Parse(treeView1.SelectedNode.Name);
                foreach (Personel personel in liste.Listele().
                    FindAll(personel => personel.ParentID == ID))
                {
                      treeView1.SelectedNode.Nodes.Add(personel.ID.ToString(),
                        personel.Ad + " " + personel.Soyad +
                        "(" + personel.Unvan + ")");
                }
            }
        }
    }
}
 

 
İşte Sonuç;


Bu tasarımı günlük yaşamda şöyle de düşünebiliriz. Patron Root olduğu için altındaki tüm personellere emir verebilir. Bir üstteki bir altındakilere emir verebilir. Alttakiler üsttekilere emir veremez gibi seneryolarda kullanılabilir. Ya da ne bileyim nerde kullanırsanız kullanın banane yahu.
 
Umarım hiyerarşik nesne tasarımını konusunu anlatabilmişimdir.
Kaynak Kodları Burdan İndirebilirsiniz
 
İsmail Kocacan(Yazılımcı Bozuntusu)

Kategori : C#.Net & Vb.Net | 27.06.2011 21:34:00  | 456 defa okundu  | 0 Yorum |

Yazara Ait Diğer Makaleler(51) Makaleye Yapılan Yorumlar İlk yorum yazan siz olun
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?