OO şu modeli nasıl

oy
2

Böyle bir UI-iletişim şey var: Bir listeden bir kitap seçmelisiniz. İsteğe bağlı olarak, bir listeden bir yayıncı (başka sınıfı) seçebilir veya dize kadar yayıncı adını girebilirsiniz.

Bu iletişim kutusundan çıktı olarak bana 3 tip verir düşünüyorum.

  1. kitap
  2. yayıncı sınıfla kitap
  3. yayıncı dizeyle kitap

Nasıl nesneleri tasarlayabiliriz? Bir kitap taban sınıf olan ve ardından yayıncı ve yayıncı adı için ayrı sınıf olarak doğru seçimdir geliyor bana. belki daha iyi bir modeli verecekti kompozisyon lehine herhangi alternatifler var mıdır?


Ben biraz daha açıklamak için çalışacağım. Bir kitap, bir yayıncı olması gerekmez. yayıncı nesne bir dize olarak girilmiş bir yayıncı adı ile aynı değildir.

Sen gerekir
Varolan listeden bir kitap -Seçin

Şunları yapabilirsiniz birini izleyen
varolan listeden bir yayıncı -Seçin ya
-sen bir yayıncı adını girebilir veya
-sen yayıncı hakkında hiçbir şey doldurabilir

Oluştur 09/12/2008 saat 20:58
kaynak kullanıcı
Diğer dillerde...                            


8 cevaplar

oy
5

İki numara benim yaklaşım olur.

Ben bir yayıncı tanımlamak için gerekli olan diğer özelliklerle birlikte, İsim denilen bir özellik ile Publisher için bir sınıf olurdu.

Sonra tip Publisher bir özelliği ile birlikte, bunu açıklamak için özelliklere sahip kitap için bir sınıf olurdu.

Kullanıcı bir dize olarak yeni bir yayıncı girerse, yeni Yayınevi nesne oluşturmak.

Kullanıcı bir yayıncı girmezse, mülkiyet null adlı bırakın. O kitap hiçbir yayıncıları sahip koşulu tatmin edecektir. Alternatif olarak, adı "Hayır yayıncı" ile yayıncı olabilir ama bunun çok uzakta boş değerlere önlemek için yolumdan gidiyor.

Cevap 09/12/2008 saat 21:01
kaynak kullanıcı

oy
2

Geçen paragrafta bu ifadeye katılmıyorum gerekir:

Bir kitap taban sınıf olan ve ardından yayıncı ve yayıncı adı için ayrı sınıf olarak doğru seçimdir geliyor bana.

Alt sınıflar temsil etmek için kullanılır "is-a-kind-of" ilişkisi. (Eski yorgun klişe alt sınıfları olarak Apple ve Orange ile Meyve sınıfı, budur.) Daha gerçekçi bir örneği HourlyEmployee ve SalariedEmployee sınıfları tarafından uzmanlaşmış Çalışan sınıfın, bir bordro sistemi olacaktır. Her iki durumda da, alt üst sınıf içindeki belirli bir kategorisini temsil eder.

Buna karşılık, bir yayıncı kitabın bir tür değildir. Daha iyi bir model aralarında birçok bire bir ilişki (bir kitap tek yayıncı vardır, ama bir yayıncı birden fazla kitap üretebilir) ile, bir Kitap sınıfını ve Publisher sınıf var olacaktır.

Bir kitap başlık, ISBN, yayıncı ve yazar olarak birçok potansiyel özelliklerini sahiptir; Bir yayıncının potansiyel nitelikleri işletme adını ve adresini (muhtemelen çoklu adresleri) ve yayınlanan kitap listesi bulunmaktadır.

Modelini için çalışıyoruz ne bağlı olarak, aynı zaman da yazar sınıfını gerekebilir, ama bu orijinal sorunun kapsamı dışında bulunuyor.

Cevap 09/12/2008 saat 21:21
kaynak kullanıcı

oy
2

Bir OO açısından bakıldığında, HAS-A ilişkileri bu durumda IS-A ilişkileri daha iyi bu sorunu çözmek. Bir kitap HAS-A yayıncı (1: 1) ve bir yayıncı yayınlar kitap listesini (1: çok)-A HAS. Bir Publisher ve Kitap başvurular listesi vardır bir Yayınevi sınıfına başvuru içeren bir Kitap sınıf oluşturun. Ayrıca, Publisher, belirli bir yayıncı bulmak için kullanabileceğiniz dize-A HAS

Cevap 09/12/2008 saat 21:19
kaynak kullanıcı

oy
1

Ben biraz daha açıklamak için çalışacağım. Bir kitap, bir yayıncı olması gerekmez. yayıncı nesne bir dize olarak girilmiş bir yayıncı adı ile aynı değildir.

Varolan listeden bir kitap -Seçin gerekir

Şunları yapabilirsiniz birinin mevcut bir listeden bir yayıncı -Seçin aşağıdaki ya -sen bir yayıncı adını girebilir veya -sen yayıncı hakkında hiçbir şey doldurabilir

Yine özel bir sonuç nesnesi için çağırır. Şimdi üç alan bir Kitap Nesne, bir Yayınevi Nesne ve Yayınevi dize var. Daha sonra akıllıca başa çıkabilirim koduna geçmek. Sen özel işleme ihtiyaçlarını karşılamak için yöntemler ekleyebilir. Ama sonunda BU iletişim özel bir sonucudur ve kitap veya yayıncı veya başka herhangi bir nesnenin bazı alt alan olmamalıdır.

Kitap şey ise, bir kitap gerekir çünkü bir hata olduğunu biliyorum. Siz de başa Yayınevi Nesne ve Publisher_String dört kombinasyonları var. Bunun Eğer sonuçla bağlı özel bir sınıf gerektiğini bana gösterir.

Cevap 09/12/2008 saat 21:50
kaynak kullanıcı

oy
1

Yayıncı bir kitap değil çünkü, Kitap miras bir Yayınevi sınıf oluşturmak etmem, meta veri bilgi hakkında bir kitap. İncil olsa Kitabı miras olacaktır.

Benim tavsiyem Kitap üzerinde Yayınevi mülkü oluşturmak olacaktır. Bu Yayınevi tipi IPublishInformation ait olabilir ve dize yayıncı IPublishInformation uygulayan bir NamedPublisher {dize Adı} sınıfını kullanabilirsiniz.

Her neyse düşüncelerimi var!

Cevap 09/12/2008 saat 21:12
kaynak kullanıcı

oy
0

Bu (C #) deneyin:

Class Book
{
   public string Name;
   public List<Publisher> publishers = new List<Publishers>;

   Book()
   {
      // Load publishers array with relevant instances of Publisher class...
   }
}

Class Books
{
   private List<Book> books = new List<Book>;
   public Books()
   {
      // Load books array with all books...
   }

   public List<Book> GetBook (string publisher)
   {
      List<Book> retVal = new List<Book>;
      foreach (Book item in books)
      {
         if (item.Publisher.Name == publisher)
         {
            retVal.Add(item);
         }
      }
   }

   public List<Book> GetBook (Publisher publisher)
   {
      List<Book> retVal = new List<Book>;
      foreach (Book item in books)
      {
         if (item.Publisher.Name == publisher.Name)
         {
            retVal.Add(item);
         }
      }
   }
}

Class Publisher
{
   public string Name;
}
Cevap 09/12/2008 saat 22:00
kaynak kullanıcı

oy
0

Bunu Kitaplar varsayarak Eğer birden fazla yayıncıya sahip olabilir. Sonra iki adap ile BookSelectonResult dönecekti olacaktır. Biri Defteri'ne seti ve seçilen Publisher başka kümesi. Bu cevap aynı zamanda bir kitap sınıfını, bir yayıncı sınıfını ve her biri için bir koleksiyon sınıfı olduğunu varsayalım.

Diyalog noktası kullanıcının seçtiği neyi döndürmektir. Bu eşsiz bir "şey" böylece Kendi sınıfı hak olduğunu. Eğer yaptıklarını tüm sonra orijinal sınıfını kullanarak tek bir kitap veya tek yayıncı dönmek ise doğrudan Tamam olur. Bu eşsiz sonuç sınıfına çağrısında böylece Ama burada sonuçlarında birden olanakları vardır.

Diğer husus bu iletişim ne kadar önemsiz olduğunu? Örneğin bir kitabı açmak için bir dosya adı seçmek. Dosya adı varlığı ne istediğini sistemde saklanmasına kitaptır geçicidir. Bir kitap ve bir yayıncı seçilmesi sonucu için aynı. Bir (çek dışarı listesi gibi) zaten sonucu tutmak için başka bir nesneyi olsaydı o zaman herhangi bir özel yöntemlerle veya sınıfları ile rahatsız etmeyin düşündürmektedir. Bir Komut nesnesine iletişim paketleyip iletişim sınıfın üyelerinde sonucunu döndürür. Sonra nihayet saklandığı yere sonucu işlemek.

Benim CAM yazılımında ben yapılandırma seçeneklerini yerine benim ayrıntılı model görüntü sunum mimarisini kullanan manipüle iletişim ile sık sık yapıyoruz. Bir kullanıcı bir öğeyi tıklayın ya da bir eylem gerçekleştirdiğinizde, UI kontrolör sonra modelini işleyen bir komut nesnesi yürütür çünkü bu kurtulabiliriz edebilirsiniz nedenidir. Her şey benim kurulumunda Komut Nesne geçer. Yani önemsiz iletişim kutuları için ben sadece bütün MVP katman oluşturmak yerine diyalog kullanır Komut Nesneler ile onları paket.

Sonuçta bu bir yargı çağrıdır.

Cevap 09/12/2008 saat 21:35
kaynak kullanıcı

oy
0

Bunu sadece bu iletişim dayalı bir tasarım karar vermek zor olduğunu düşünüyorum. Örneğin, mevcut kitapların kümesinden uğraşıyorsun? Bu durumda, hangi kullanıcı bir yayıncı girerse kim yok? Bu durumda, hiç bir Kitap sınıfının bir örneğini döndürür, ancak istisna çeşit yükseltmek istemeyebilirsiniz.

senin durumunda tüm kitaplar yayıncıları var mı? Eğer öyleyse, o zaman bir Publisher nesnesi örneğini içeriyor Bir Yayınevi sınıf oluşturun ve Kitap sınıf var ki @Bob katılıyorum. sadece bazı kitaplar Yayıncılar varsa, o zaman tarif miras modeli ile gidebiliriz ama aksi takdirde aynı iki örneğini sahip olabileceklerini çünkü (a Yayıncı nesnesini kullanarak tekrar) tek seçenek haline seçenekleri 2. ve 3. çökerdi (kullanıcı listeden seçerek bir kez dize olarak yayıncı girmiş ve bir) farklı tipte nesnelerdir kitabı.

--Phil

Cevap 09/12/2008 saat 21:15
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more