Bir özellik belirleyiciye mantık eklemek kötü bir uygulama olarak mı kabul edilir?


28

Bir projeye girdim ve diğer geliştiricilerin sentezlenmiş özelliklerin belirleyicilerine çok fazla mantık eklediklerini görüyorum. Bunun nasıl çalıştığını biliyorum, ancak programın akışını anlamayı zorlaştırdığını düşünüyorum; Kodları okurken, her gördüğümde self.something = whatever, somethingayarlayıcısının geçersiz kılındığını kontrol ederim .

Bu konuyla ilgili görüşleriniz neler? Bunun kötü mimarinin bir işareti veya ayrıntılı bir çözüm olduğunu düşünüyor musunuz?

İlgili bağlantılarınız / kaynaklarınız varsa, bu konuda daha fazla bilgi almaktan memnuniyet duyarım, bu yüzden de sormaya karar verdim.

Cevabınız için teşekkürler ve etiketi görmemiş olmanız durumunda objektif C hakkında konuştuğumu unutmayın (sanırım bu bir dile özgü bir konu olmamasına rağmen).


5
Ne tür bir mantık? Örneğin, doğrulama mantığı koymada yanlış bir şey yoktur. Öte yandan, birkaç olay gönderen, web servisini çağıran ve kullanıcı arayüzünü güncelleyen bir ayarlayıcı tamamen yanlıştır.
Arseni Mourzenko,

@MainMa Onaylamaların iyi olduğuna katılıyorum - belki bazı gözlemciler de ekleyebiliriz, değil mi? Bir düzenleyiciye koymak için daha uygun olduğunu düşündüğünüz şeylerden bazı örnekler verebilir misiniz?
phi

gerçekten, gözlemciler haklıdır. Bir pasör için uygun olan şeylere gelince, daha deneyimli geliştiricilerin bu soruyu cevaplamasına izin verdim.
Arseni Mourzenko

Yanıtlar:


44

Bir özellik belirleyiciye mantık eklemek kötü bir uygulama olarak mı kabul edilir?

Yok hayır

Sınıf tasarımcılarının uygun bir alan erişimi ve tahsisi ara yüzüne eklenmiş bir mantığa sahip olmaları için özellikler icat edildi.

Ne kadar fazla? Bu sınıfın sorumluluklarına bağlıdır. İşte bir emlakçı koymak makul olan bazı şeyler:

  • türetilmiş değerleri güncelle
  • Sınıf durumunun değiştiğini gözlemcilere bildirin
  • değişikliği içerilen bazı nesnelere yay
  • değişikliği bir destek mağazasına yaymak
  • doğrulama yapmak

Programlama, sınıfların, sınıfın yapabileceklerini açıkça belirten, arayanların nasıl yapıldığı hakkında düşünmelerini sağlamadan, sınıfın neler yapabileceğini gösteren arayüzleri olduğunda daha kolaydır. Mantık özelliğini özellik belirleyicilerin arkasına koymak, sınıfların uygulamalarını basit bir arabirimin arkasına gizlemelerine olanak tanır. Bazı sınıflar için yöntem gerekmez. Sadece özellikleri ayarlayarak düğmeleri çevirin ve özellikleri alarak çıktıyı okuyun.


13
Doğrulama işlemini gerçekleştirin ...
Robert Harvey,

Bir set görünümünü veya tablo görünümünü bir ayarlayıcı geçersiz kılma yönteminde yeniden yüklemek ne kadar iyidir?
Krishnan

15

Belirleyiciler, tipik olarak, önemli yan etkisi veya ağır hesaplamaları olmayan bir nesnenin durumunu değiştirmek için kullanılır, bunun için yöntemleri ve işlevleri kullanın. Belirleyici uygulamanın birincil nedeni geçerli bir durumu değiştirmek ve korumaktır . Bu nedenle menzili sınırlamak, yeniden hesaplama talep etmek için bayrakları ayarlamak veya ilgili özellikleri ayarlamak kesinlikle iyidir.


7

C nesnesini bilmiyorum ama dediğiniz gibi, herhangi bir OO dili için yeterince genel bir soru gibi görünüyor. Öncelikle ve aslında bununla ilgili olarak, ilk sırada yer alan belirleyiciler ve alıcıların bulunup bulunmadığı tartışma konusudur (bazı durumlarda onların varlığı bir çerçeve ya da kütüphane kullanılarak haklı gösterilmektedir).

Yöntemin adının, yöntemin ne yaptığını ve tüm yöntemin ne yaptığını açıklaması gerektiğine inanıyorum. Ek olarak, bu yöntemle ilişkili belgeler daha açık bir şekilde tanımlamalıdır. Bu anlamda, "set" + {noun} formundaki bir metod adının, bir değişkenin değerini ayarlamaktan başka yan etkisi olmamalı ve bununla ilişkili tek eylem bu olmalıdır. Argümanın geçerli olup olmadığını kontrol etmek kabul edilebilir ancak belgelerinde açıklanmalıdır.


1
"Ayarlayıcıların ve alıcıların olup olmadığı" için +1. Ve "yöntem adı ne yaptığını açıklamalı" için bir diğer +1.
aviv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.