“Çok nesne odaklı”


21

Güçlü bir OO geçmişinden geliyorum ve kısa bir süre önce Java'da yazılmış olmasına rağmen, iyi OO tasarımına alışkın olduğumdan çok daha az vurgu yapan bir organizasyonda çalışmaya başladım. Bana "çok fazla soyutlama" uyguladığımı ve bunun yerine her zaman olduğu gibi kod yazmam gerektiğini söylemiştim, ki bu Java'da bir usuli tarz.

TDD de burada pek uygulanmadı, ancak test edilebilir kodlara sahip olmak istiyorum. İş mantığını büyük “Tanrı sınıflarında” (ki bu takım için norm gibi görünüyor) statik özel yöntemlerle gömmek çok da denenmez.

Motivasyonumu iş arkadaşlarıma açıkça iletmekte zorlanıyorum. İş arkadaşlarımı OO ve TDD kullanmanın daha kolay korunan koda yol açtığı konusunda nasıl ikna edebileceğim konusunda bir tavsiyesi var mı?

Teknik borçla ilgili bu soru sorumla ilgili. Ancak, diğer sorunun kapsandığı gerçeğin ardından borç ödemek yerine, ilk etapta borcunu ödemekten kaçınmaya çalışıyorum .


17
Senin rolün ne? Grunt geliştirici? Sen batırdın - daha iyi bir iş bul. Lider Geliştirici? Bir fark yaratabilirsiniz ...
Matthew Flynn

2
Çok fazla teknik borç değil, kötü tasarım ve değişmeyecek insanlarla uğraşırken
ozz

1
Teknik ve ticari argümanların farkındayım, bu bilgiyi bu konuda habersiz görünen iş arkadaşlarım arasında nasıl en iyi şekilde kullanabileceğimi soruyorum. Çok fazla ders görüyorlar, test edilebilir, genişletilebilir bir sistem görüyorum
ThuneGrill

5
Üzgünüm, gitmelisin. Meslektaşlarının başkanları hakkında konuşuyorsun. Proje sürdürülemez hale gelinceye kadar değişmeyecek. Manuel testlerden ve ölüm yürüyüşlerinden hoşlanmıyorsanız, başka bir yere gitmeniz iyi olur.
kevin cline

4
Söz konusu kodu görmeden (evet, yeterince iyi bir örnek sağlamak zordur, bu yüzden burada kararınıza güvenmek zorundayız), gerçekten OO eksikliği olup olmadığını ya da aşırı mühendislik yükü kültünü zorluyorsanız söylemek zor OO soyutlamaları için iyi bir sebep yok. Herkesin soyutlama vb soyut fabrikaları, üretim soyut fabrikaların katman üzerinde dinlenme aşırı mühendislik OOP, örneklerini gördü düşünüyorum
Kromster destek Monica diyor

Yanıtlar:


32

Bunun için dayanılmaz olmasından şikayet etmedin, sadece beğeninize değil. Kasıtlı bir stil seçimi ise, uzlaşmaz yaratıcı farklılıklar söz konusu olabilir ve tarzınızı sığacak şekilde ayarlamanız veya tercih ettiğiniz tarzınıza uygun bir yer bulmanız gerekir.

İnsanlar her zaman usule uygun bir şekilde modüler, verimli, soyutlanmış, nispeten hatasız kodlar yazabilir ve yapabilirler. Java, böyle bir dükkan için garip bir dil seçimidir, ancak dış etkenler dilin kararını verirse, örneğin Android için geliştirmeye ihtiyaç duymak gibi olduğunu görebiliyorum.

Herkes bir dahidir. Ancak bir balığı bir ağaca tırmanma kabiliyetine göre yargılarsanız, aptal olduğuna inanan hayatı boyunca yaşayacaktır. - Albert Einstein

Eğer bilinçli bir seçim olsaydı , onları gerçekten iyi nesne yönelimli tasarım ilkelerine ne kadar iyi uydukları ile yargılayamazsınız, iyi prosedürel tasarım ilkelerine ne kadar iyi uydukları ve aynı zamanda refactor ile yargılamanız gerekir. Java bir sınıfın dışına kod yazmanıza izin vermez, bu nedenle yalnızca birinin varlığı, bir modülün nesne yönelimli olması amaçladığı anlamına gelmez.

Öte yandan, kod her iki paradigmadaki bir karışıklık ise , muhtemelen sadece kayıplarınızı kesmelisiniz.


3
prosedürel ve dağınıktır. Ama "çok nesne yönelimli" olarak adlandırdığım yeni koddan bahsediyorum
ThuneGrill

5
dağınık prosedür kodunun OO koduyla genişletilmesi, sonuçta karışıklık ekleyerek sonuçta bir gelişme olmayabilir.
wirrbel

7
@ThuneGrill, Nesne yönelimli tasarımın cehaletinden kodlama stilini seçtiklerini varsayıyorsunuz, eğer onları sadece eğitmek için ışık görürler. Kârlı bir yazılım işine güçlü bir nesne yönelimli bir dilde sahip olan biri, OOD'un şu ana kadar yararlarına hiç bakmamışsa, “yeni adamın” onu ikna etmesine imkan yok. Bunun için ve diğer yorum yapanların sözlerini al. Stilinizi ekibin okumasını kolaylaştırmak için ayarlayamıyorsanız veya ayarlamıyorsanız, kayıplarınızı azaltmalısınız.
Karl Bielefeldt

3
@ThuneGrill: Karl haklı. Dini olanlara değil pragmatik sebeplere bağlı kalın. OOP kesinlikle iyi bir fikir, ama saçma sapan uçlara taşındığını gördüm. Sonuç dağları köstebeklerden yapmaktır. 1000 kod satırında yapılabilecek şeyler, bolca sınıf içeren 10.000 satır kod olarak sonuçlanır. O zaman, Gee, bakımı zor ve performans berbat. (Hangi koleksiyon sınıfları kullanılırsa kullanılsın.)
Mike Dunlavey

1
İnsanları bu konuda ikna edebileceğiniz fikrinden ille ki pes etmem. Zor, ama yapılabilir - Ben yaptım. Bu soru kapalı gözüktüğünden, bkz. Workplace.stackexchange.com/questions/9703/…
Amy Blankenship

7

Sorunuzu okurken, Pragmatik Programcı kitabının bir ipucunu hatırladım.

Püf noktalarından biri Be a Catalyst for Change:

Ne yapmanız gerektiğini ve nasıl yapacağınızı tam olarak bildiğiniz bir durumda olabilirsiniz. Tüm sistem sadece gözlerinizin önünde görünüyor - doğru olduğunu biliyorsunuz. Fakat her şeyi halletmek için izin isteyin; gecikmeler ve boş bakışlarla karşılaşacaksınız. İnsanlar komiteler oluşturacak, bütçelerin onaylanması gerekecek ve işler karmaşıklaşacak. Herkes kendi kaynaklarını koruyacak. Bazen buna "başlangıç ​​yorgunluğu" denir.

Stone Soup'u pişirme zamanı. Makul bir şekilde ne isteyebileceğinizi öğrenin. İyi geliştir. Bir kere elinize geçtikten sonra insanlara gösterin ve hayret etmelerine izin verin. Sonra da "elbette, eklersek daha iyi olur ..." deyin. Önemli değil gibi davran. Arkanıza yaslanın ve başlangıçta istediğiniz işlevselliği eklemenizi istemelerini isteyin. İnsanlar devam eden başarılara katılmayı daha kolay bulurlar. Onlara geleceğe bir bakış attığınızda, etrafta toplanmalarını sağlayabilirsiniz.

Yani, OO ve TDD bilginizle iyi bir iş çıkarmaya başlarsanız, yakında aramaya başlar ve işinizi sormaya başlarlar.


Olmaya çalışıyorum ama über mimar (kodlamayan) hiçbiri olmayacak.
ThuneGrill

TDD'nin ve daha iyi OO'nun (güvenilirlik, üretkenlik, ...) faydalarını fark eder etmez dikkatinizi çekecek!
Rodrigo,

3

Çalışmanın yeni yollarını satmak için bariz faydalar göstermeniz gerekir. Daha fazla soyutlama katmanı yazmak, açık bir fayda olmadan ancak belirsizdir: “gelecek için faydalı olabilir” işe yaramaz.

Fabrikaların, bir nesne türünden daha fazlasını yaptıkları fabrikaları yapın. Hemen fayda gösterdiği yerde bağımlılık enjeksiyonunu kullanın. Aslında bir sınıftan daha fazlası tarafından uygulanacak arayüzleri yapın.

"Gerçek OO" da çok sık gördüğüm, ileri tekniklerin gerçekten basit problemleri aşırı karmaşık bir şekilde çözmek için kullanılması.

Bir fabrikanın faydasını ancak aynı nesneyi yapması halinde nasıl gösterebilirsiniz? Kodunuzda ileri tekniklerden yararlanan ve amacınızı ve çalışmalarınızı oradan gösteren bir sorun bulun.

Savaşlar her seferinde bir savaş kazanır.


1

Bunları yalnızca küçük bir kod parçası alarak ve TDD ve daha iyi OO uygulamaları uygulayarak faydaları gerçekleştirmek için ikna edebilirsiniz. Onları vaat edilmiş topraklara götürdün, sadece güzel posta kartlarını gösterme.

Tabii ki, bugün birçok kod tabanında kullanımda aşırı soyutlama vakaları olduğunu düşünüyorum. Sadece ihtiyacınız olanı koyun ve buna soyutlamalar da dahildir.


1
Sadece yaptım, bu bütün tartışmaya neden olan şeydi. Bir Ben sadece mevcut fonksiyonellik üzerine 3-4 soyutlama
getirdim
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.