"Belirli bir şekilde kullanılması gereken" dersleri yazıyorum (Sanırım bütün derslerin ...).
Mesela ben bir çağrı gerektirenfooManager
sınıfı yaratıyorum . Ve örneği biraz daha ileri itmek için, eylemini dinlemezsek, sınıf yararsızdır .Initialize(string,string)
ThisHappened
Demek istediğim, yazdığım sınıf yöntem çağrıları gerektiriyor. Ancak bu yöntemleri çağırmazsanız ve boş bir yeni FooManager ile sonuçlanırsanız, derler. Bir noktada, sınıfa ve ne yaptığına bağlı olarak çalışmayacak veya çökmeyecektir. Sınıfımı uygulayan programcı açıkça içine bakar ve "Ah, Initialize demedim!" Diye anlardı ve iyi olurdu.
Ama bundan hoşlanmadım. İdeal olarak istediğim şey, eğer yöntem çağrılmadıysa derlenmeyecek kod; Sanırım bu mümkün değil. Ya da hemen görünür ve net olacak bir şey.
Buradaki şu anki yaklaşımdan dolayı kendimi rahatsız hissediyorum;
Sınıfta özel bir Boolean değeri ekleyin ve sınıf başlatıldıysa gereken her yeri kontrol edin; değilse, "Sınıf başlatılmadı, aradığınızdan emin misiniz .Initialize(string,string)
?" yazan bir istisna atacağım .
Bu yaklaşıma karşı biraz iyiyim ama derlenen ve sonunda son kullanıcı için gerekli olmayan çok sayıda kodun oluşmasına neden oluyor.
Ayrıca, bazen Initiliaze
çağrı yapmaktan daha fazla yöntem olduğunda bile daha fazla kod vardır . Sınıflarımı çok fazla kamusal yöntem / eylemle tutmamaya çalışıyorum ama bu sorunu çözmüyor, sadece mantıklı tutuyor.
Burada aradığım şey:
- Benim yaklaşımım doğru mu?
- Daha iyisi var mı?
- Siz ne yapıyorsunuz / tavsiye ediyorsunuz?
- Sorun olmayan bir sorunu çözmeye mı çalışıyorum? Meslektaşlarım tarafından, kullanmaya çalışmadan önce sınıfı kontrol etmenin programcının olduğu söylendi. Saygılarımla aynı fikirde değilim, ama bu inanıyorum.
Basitçe söylemek gerekirse, bu sınıf daha sonra tekrar kullanıldığında ya da bir başkası tarafından çağrı yapılmasını asla unutmamak için bir yol bulmaya çalışıyorum.
AÇIKLAMALAR:
Burada birçok soruyu netleştirmek için:
Kesinlikle sadece bir sınıfın Başlatma bölümünden bahsetmiyorum, tüm yaşam boyu. Meslektaşların bir yöntemi iki kez çağırmasını, Y'den önce X olarak adlandırdıklarından emin olmalarını sağlayın, vs. Asserts fikrini gerçekten sevdim, fakat bazı diğer fikirleri bir araya getirmem gerekeceğinden eminim, çünkü Asserts her zaman mümkün olmayacak.
C # dilini kullanıyorum! Bundan nasıl bahsetmedim? Xamarin ortamındayım ve genellikle PCL'ler, iOS, Android ve Windows projeleri de dahil olmak üzere bir çözümde yaklaşık 6 ila 9 proje kullanarak mobil uygulamalar geliştiriyorum. Yaklaşık bir buçuk senedir geliştiriciyim (okul ve iş birlikte), bu yüzden bazen saçma ifadelerim \ sorularım oluyor. Tüm bunlar muhtemelen burada önemli değil, ama çok fazla bilgi her zaman kötü bir şey değil.
Platform kısıtlamaları ve Bağımlılık Enjeksiyonunun kullanımı nedeniyle, Arayüzler dışındaki parametrelere sahip olmaları nedeniyle, yapıcıda zorunlu olan her şeyi her zaman koyamam. Ya da belki de bilgim yeterli değil, bu da mümkün. Çoğu zaman bu bir Başlatma sorunu değildir, ancak daha fazlası
O etkinliğe kaydolduğundan nasıl emin olabilirim?
"işlemi bir noktada durdurmayı" unutmadığından nasıl emin olabilirim
Burada bir İlan alma dersini hatırlıyorum. Reklamın göründüğü görünüm görünür olduğu sürece, sınıf her dakika yeni bir reklam alır. Bu sınıfın, Reklamı görüntüleyebileceği, bir parametreye açık bir şekilde girebilecek bir görünüm oluşturması gerekir. Ancak görünüm bir kez bırakıldığında, StopFetching () çağrılmalıdır. Aksi halde sınıf, orada bile olmayan bir görünüm için reklamlar almaya devam eder ve bu kötüdür.
Ayrıca, bu sınıfın, örneğin "AdClicked" gibi dinlenmesi gereken olayları vardır. Dinlenmediyse her şey yolunda gider, ancak musluklar kayıtlı değilse oradaki analiz izlemesini kaybederiz. Reklam yine de çalışır, bu nedenle kullanıcı ve geliştirici bir fark görmez ve analizler yalnızca yanlış verilere sahip olur. Bu, kaçınılması gereken, ancak geliştiricinin tao etkinliğine kaydolmaları gerektiğini nasıl bildiğinden emin değilim. Bu basitleştirilmiş bir örnek olsa da, fikir şu ki, “mevcut olan Kamu Eylemini kullandığından emin ol” ve elbette doğru zamanlarda!
initialize
Nesne oluşturulduktan sonra çağrının geç yapılması gerekiyor mu? İstisna atama ve yaratma zincirini kırabilecek şekilde, taşıyıcı çok riskli olur mu?
new
, nesne kullanıma hazır değilse, aramayı asla geçemezsiniz . Bir başlatma yöntemine güvenmek, musallat olmak için geri gelmek zorundadır ve kesinlikle gerekmedikçe kaçınılması gerekir, en azından benim deneyimim bu.