Poco Class Tasarımı Hk.

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    Selam hocalar,

    Bir model çıkarmaya uğraşıyorum lakin en sade ve optimum tasarımı çıkaramadım. Aşağıdaki gibi 8 tip var. Tabi şahıs ve şirket diye ayırırsa 16 tablo oluyor.  Kalıtım dikkate alınarak nasıl bir base class olmalı interface yahut abstract class tasarımı nasıl olmalı sizler bu tip durumlarda nasıl bir yol izliyorsunuz? (Aynı olan property ler var aynı olmayanlar var vs vs.)

    He desen ki her birini 16 ayrı tabloya 16 ayrı poco class ile bas o da bir yöntem :) lakin hiç de kullanışlı değil :) Bu yüzden işin içine interface - abstract girdiğinde nasıl bir tasarım çıkar buradan?

     

    Kullanıdığım araç ve yöntem: Asp.Net MVC, EF CodeFirst.

     


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Id den Adres'e kadar tüm özellikler aynı ise onları BaseCompany gibi bir class olarak tanımla, daha sonra diğer class ları bundan türetebilirsin. Zaten farklı propertylere sahipse böyle yapman normal.

    Anladığım kadarıyla bu class lar senin modelin olacak, o yüzden çok fazla kompleks düşünmene gerek yok. Hatta 16 tane ayrı class yapsan bile sorun olacak bir durum yok, çünkü her hangi bir operasyon barındırmıyor.

    operasyonel tarafında da mesela repository design pattern den yararlanabilirsin

    http://web.archive.org/web/20150404154203/https://www.remondo.net/repository-pattern-example-csharp/

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    unbalanced bunu yazdı

    Id den Adres'e kadar tüm özellikler aynı ise onları BaseCompany gibi bir class olarak tanımla, daha sonra diğer class ları bundan türetebilirsin. Zaten farklı propertylere sahipse böyle yapman normal.

    Anladığım kadarıyla bu class lar senin modelin olacak, o yüzden çok fazla kompleks düşünmene gerek yok. Hatta 16 tane ayrı class yapsan bile sorun olacak bir durum yok, çünkü her hangi bir operasyon barındırmıyor.

    operasyonel tarafında da mesela repository design pattern den yararlanabilirsin

    http://web.archive.org/web/20150404154203/https://www.remondo.net/repository-pattern-example-csharp/

    Aynen hocam yapımda generic repository, IOC, UnityOfWork vs hepsini kullanıyorum. 

    İşte sıkıntımda o BaseCompany ve BasePerson diye 2 tane base class ım mı olmalı? Aşağıda bölmeye çalıştım. 8 farklı tip gibi görünsede Xşahıs tipi - Xşirket tipi diye ayırırsam 16 farklı class olacak. Ortak olan prop ları renklendirmeye çalıştım bu durumda tüm renk sayısı kadar base class ım olmalı ki ortak prop ları bu baselere yazayım yanlış mıyım? 

    Aynen hocam bu classlar benim modellerim oalcak.

     


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    sorunu şimdi anladım hocam, sen X,Y tipi altında genelleştirmeye çalışmışsın ama altındaki şahıs ve şirket de farklıymış.

    Yerinde olsam db de bu kolon adlarını değiştirip daha çok ortak yapardım, o zaman şahıs ve şirket tamamen aynı olurdu, ama db yi değiştirme imkanın yoksa

    Şahıs ve Şirket lerdeki ortakları toplayıp bir base class altına alacaksın (BaseInfo) 

    daha sonra BasePerson ve BaseCompany oluşturacaksın ve baseinfo dan türeyecekler. 

    Buraya kadar olan kısım Id den Adres e kadar olan kısım olacak..

    Kalan kısımlar için ise X tipi şahıs, X tipi şirket, Y tipi şahıs, Y tipi şirket şeklinde oluştuacaksın.

    Çünkü anladığım kadarıyla toplam 16 tablon var ve her halukarda bu şekilde bir yapıya ihtiyaç duyacaksın gibi görünüyor.

     

    Senin yerinde olsam ve imkanım olsa veritabanı yapısını değiştirirdim hocam. 

    Şöyle; Bir tane tablo, Id den Adrese kadar tüm bilgileri eklerdim ve ek olarak bir de Tip (X,Y tipini tutmak için) ve Kind (Şahıs,Şirket tutmak için)  diye iki kolon oluştururdum 

    Harici bir tabloya gerek duymadan 3 tane field i de buraya kolon olarak ekledim sorunun tek tabloyla çözülürdü.

    En kötü ihtimal farklı bir tablo yapardım orada da bu A,B,C propertylerinin isimlerini ve değerlerini tutardım, bir de ilişkide olması için oluşturduğum tablonun id sini yazardım..

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hocam burda gördüğüm kadarıyla db ye müdahale ediliyor, yani tasarımı baştan yaptırıyor gibi.


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    inceliyorum hocam eyv.


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    unbalanced bunu yazdı

    sorunu şimdi anladım hocam, sen X,Y tipi altında genelleştirmeye çalışmışsın ama altındaki şahıs ve şirket de farklıymış.

    Yerinde olsam db de bu kolon adlarını değiştirip daha çok ortak yapardım, o zaman şahıs ve şirket tamamen aynı olurdu, ama db yi değiştirme imkanın yoksa

    Şahıs ve Şirket lerdeki ortakları toplayıp bir base class altına alacaksın (BaseInfo) 

    daha sonra BasePerson ve BaseCompany oluşturacaksın ve baseinfo dan türeyecekler. 

    Buraya kadar olan kısım Id den Adres e kadar olan kısım olacak..

    Kalan kısımlar için ise X tipi şahıs, X tipi şirket, Y tipi şahıs, Y tipi şirket şeklinde oluştuacaksın.

    Çünkü anladığım kadarıyla toplam 16 tablon var ve her halukarda bu şekilde bir yapıya ihtiyaç duyacaksın gibi görünüyor.

     

    Senin yerinde olsam ve imkanım olsa veritabanı yapısını değiştirirdim hocam. 

    Şöyle; Bir tane tablo, Id den Adrese kadar tüm bilgileri eklerdim ve ek olarak bir de Tip (X,Y tipini tutmak için) ve Kind (Şahıs,Şirket tutmak için)  diye iki kolon oluştururdum 

    Harici bir tabloya gerek duymadan 3 tane field i de buraya kolon olarak ekledim sorunun tek tabloyla çözülürdü.

    En kötü ihtimal farklı bir tablo yapardım orada da bu A,B,C propertylerinin isimlerini ve değerlerini tutardım, bir de ilişkide olması için oluşturduğum tablonun id sini yazardım..

     

    Yeni harmanın linklerine baktıktan sonra bunu deneyeceğm hocam. Tek bir tabloda hepsini tut diyorsun değil mi? Ayrı ayrı tablolar işi kolaylaştırır diye düşünmüştüm lakin çok karmaşıklaştırdı :)


    Paslanmış bir uygulama geliştirici.. #AnalistŞart
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hocam pek uyuyamadım gece o yüzden kafam iyi çalışmıyor, düşünemiyorum tam tasarım nasıl olmalı. Belki bir kaç tablo daha mantıklı olabilir ama en kötü ihtimal 2 tablo işini görecektir..

    Sadece x-y.. tipini ve şahıs-şirket kavramını tutacaksın. Eğer başka bir şeyler daha eklenecekse yani dinamik olacaksa, X,Y tipi için ayrı bir tablo, şahıs-şirket için ayrı bir tablo yapabilirsin.

    diğer A,b,c property için name,value, relationalId yi tutabilirsin.

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek
    unbalanced bunu yazdı

    hocam burda gördüğüm kadarıyla db ye müdahale ediliyor, yani tasarımı baştan yaptırıyor gibi.

    Kesinlikle:) Hocam mecburiyet diyelim. Başka türlü simule etmekten (arkaplanda ef'in yaptıklarını sql cümlecikleri ya da stored procedure ile yapmaktan) başka çözüm yok diye biliyorum.


    Olaylara karışmayın!
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tutkun
    tutkun's avatar
    Kayıt Tarihi: 20/Mayıs/2010
    Erkek

    Eğer yanlış anlamadıysam, aslında hücre içerikleri aynı olmasına rağmen tipleri farklıysa, mesela insan tablosu için 30 kişi var (ama kimisi yazılımcı kimisi doktor kimi çöpçü gibi). bu durumda tabloya bir de type_id şeklinde atama yapıp ayrıştırılabilir. bu sayede aynı tabloda olmasına rağmen zibilyon tane tip üretilebilir? ben mi yanlış anladım acaba?


    Bilen konuşmuyor, konuşan bilmiyor...
Toplam Hit: 1201 Toplam Mesaj: 11
poco class tasarımı