Yapma; işleri karmaşıklaştıracak ve ihtiyacın olmayacak
... 2 yıl önce buraya yazacağım cevap. Şimdi, yine de çok emin değilim; Aslında, son aylarda eski kodu bu formata taşımaya başladım, yapacak daha iyi bir şeyim olmadığı için değil, yeni özellikleri uygulamak veya var olanları değiştirmek için gerçekten gerekli olan şeylerdi. Buradaki diğer kişilerin bu kodu gördüğü otomatik isteksizlikleri anlıyorum, ancak bunun ciddi düşünceyi hak eden bir şey olduğunu düşünüyorum.
Yararları
Avantajlardan biri , kodu değiştirme ve uzatma yeteneğidir . Eğer kullanırsan
class Point {
int x,y;
// other point operations
}
etrafa birkaç tamsayı geçirmek yerine - ki maalesef birçok arayüzün yaptığı bir şey - o zaman daha sonra başka bir boyut eklemek çok daha kolay hale gelir. Veya türünü değiştirin double
. Kullanırsanız List<Author> authors
veya List<Person> authors
onun yerine List<String> authors
daha sonra yazarın temsil ettiği şeye daha fazla bilgi eklemek daha kolay hale gelir. Bu şekilde yazmak, açık bir şekilde belirttiğimi hissediyormuş gibi hissettiriyor, ancak pratikte, özellikle başlangıçta bariz olmadığı durumlarda, kendimden bu kadar çok tel kullandım. dizi.
Şu anda kodum boyunca iç içe geçmiş bazı dize listelerini yeniden düzenlemeye çalışıyorum çünkü orada daha fazla bilgiye ihtiyacım var ve acıyı hissediyorum: \
Bunun ötesinde, blog yazarıyla daha semantik bilgi taşıdığı ve okuyucunun anlamasını kolaylaştırdığı konusunda hemfikirim . Parametrelere genellikle anlamlı adlar verilmiş ve özel bir dokümantasyon satırı elde edilmiş olsa da, bu genellikle alanlar veya yerliler için geçerli değildir.
Nihai yarar, bariz nedenlerden dolayı tür güvenliğidir , ancak gözlerim burada küçük bir şey.
Dezavantajları
Yazması daha uzun sürer . Küçük bir sınıf yazmak , özellikle bu derslerin çoğuna ihtiyacınız varsa , hızlı ve kolaydır ancak zahmetsiz değildir . Kendinizi her 3 dakikada bir yeni sarmalayıcı sınıfı yazmak için durdurarak bulursanız, konsantrasyonunuza da zarar verebilir. Bununla birlikte, bu çaba durumunun genellikle herhangi bir kod parçasını yazmanın ilk aşamasında gerçekleşeceğini düşünmek isterim; Varlıkların dahil olması gerekenler hakkında genellikle çok iyi bir fikir edinebilirim.
Çok fazla gereksiz ayarlayıcı (veya inşaat) ve alıcı içerebilir . Blog yazarı, new Point(x(10), y(10))
bunun yerine gerçekten çirkin bir örnek veriyor ve new Point(10, 10)
bir kullanımın Math.max(p.x.get(), p.y.get())
bunun yerine bunun gibi şeyleri de içerebileceğini eklemek istiyorum Math.max(p.x, p.y)
. Ve uzun kod genellikle okunması daha zor ve adil bir şekilde kabul edilir. Ancak tüm dürüstlük içerisinde, nesnelerin etrafından dolaştığı bir sürü kod hissi duyuyorum ve yalnızca bazı yöntemler yaratıyor ve daha da azının detaylarına (hatta OOPy değil) erişmesi gerekiyor.
tartışılabilir
Bunun kodun okunabilirliği konusunda yardımcı olup olmadığını tartışmalı olarak söyleyebilirim . Evet, daha fazla anlamsal bilgi, fakat daha uzun kod. Evet, her bir yerel halkın rolünü anlamak daha kolaydır, ancak belgelerini okumadığınız sürece onunla neler yapabileceğinizi anlamak zordur.
Diğer programlama okullarında olduğu gibi, bunu da aşırılıklara götürmenin sağlıksız olduğunu düşünüyorum. Kendimi hiç x ve y koordinatlarını farklı bir tip olarak ayırırken görmüyorum. Bir yeterli Count
olduğunda gerekli olduğunu sanmıyorum int
. unsigned int
C'deki kullanımdan hoşlanmıyorum - teorik olarak iyi olsa da, sadece size yeterli bilgi vermez ve bu büyülü -1'i desteklemek için kodunuzun daha sonra uzatılmasını yasaklar. Bazen sadelik gerekir.
Bence blog yazısı aşırı tarafta. Fakat genel olarak, acı verici deneyimlerden arkasındaki temel fikrin doğru şeylerden yapıldığını öğrendim.
Aşırı tasarlanmış kod için derin bir isteksizlik var. Ben gerçekten yapıyorum. Fakat doğru kullanılırsa, bu fazla mühendislik olduğunu sanmıyorum.