Şu anda yazdığım bir sınıfa bir arayüz düşünüyorum. Bu sınıf, bir karakterin stillerini içerir, örneğin karakterin kalın, italik, altı çizili vb. Olup olmadığını iki gün boyunca kendimle tartışıyorum. Değerleri değiştiren yöntemler için getters / setters veya mantıksal isimler kullanmalı bu stiller. Mantıksal isimleri tercih etme eğilimim olsa da, bu kadar verimli ve mantıksal olmayan kod yazmak anlamına gelir. Sana bir örnek vereyim.
Bir sınıf var CharacterStyles
üye değişkenleri vardır bold
, italic
, underline
(ve bazı diğerleri, ama basit tutmak onları bırakacağım). Programın diğer bölümlerinin bu değişkenlere erişmesine izin vermenin en kolay yolu getter / setter yöntemlerini yazmaktır, böylece styles.setBold(true)
ve yapabilirsiniz styles.setItalic(false)
.
Ama bundan hoşlanmıyorum. Sadece bir çok insan getters / setter'ların kapsüllemeyi kırdığını söyledikleri için değil (gerçekten bu kadar kötü mü?), Ama çoğunlukla bana mantıklı gelmediği için. Bir karakteri bir yöntemle styles.format("bold", true)
ya da bunun gibi bir şeyle stilize etmeyi umuyorum, ancak tüm bu yöntemlerle değil.
Yine de bir sorun var. Bir nesne üyesi değişkeni C ++ 'da bir dizenin içeriğine göre erişemediğiniz için, tüm stiller için büyük bir if-deyimi / anahtar kapsayıcısı yazmak zorunda kalacağım veya stilleri ilişkilendirilebilir bir dizide ( ) map.
En iyi yolun ne olduğunu bulamıyorum. Sanırım bir an getters / setters yazmalıyım ve bir sonraki an diğer tarafa doğru eğildim. Sorum şu: ne yapardın? Bunu neden yaptın?
bold
ayarlanmış bir CharacterStyles varsa true
ve diğer değişkenler tanımsızsa, diğer değişkenler için getter yöntemlerinin üst stilin değerini (başka bir özellikte depolanır) bold
döndürmesi gerekirken , özellik için getter dönmelidir true
. Bir isim ve arayüzde görüntülenme şekli gibi başka şeyler de var.