OOP'un aşırı komplikasyonu için bir terim var mı?


18

Bir veya iki yıl önce, OOP (Java) hakkında, iki veya üç satırlık koddan oluşan basit bir beton kaydedicinin ilerlemesini ve temelde oh, yapmam gerektiğini söyleyen deneyimsiz geliştirici tarafından teorik aşırı düşünce süreçlerini gösteren mükemmel bir makale gördüm bunu istememiz durumunda ekleyin! Makalenin sonunda bu basit kaydedici, orijinal geliştiricinin kendini neredeyse anlayamadığı dev bir çöp karmaşasıydı ...

Bu tip aşırı komplikasyon için ortak bir terim var mı? Bu makale (tekrar bulabildiğimi dilerim) yalıtılmış bir vaka için kavramı harika bir şekilde gösteriyor, ancak geliştiricilerin esasen desenlerin, çerçevelerin, kütüphanelerin ve kütüphanelerin aşırı kullanımı ile kendilerini bir düğüme programladıkları tüm projelere rastladım. diğer sorunlar. Kendi yöntemiyle, bu, değiştirme için devraldığımız eski VB6 spagetti uygulamalarından daha kötü (veya daha kötü).

Gerçekten aradığım şey, görüşme yaparken bunu gündeme getirmek. Birisinin mimari / ön planlama eksikliği (ve yerinde doğru dengeye sahip olup olmadıkları için düşme) ile bunun ne kadar kolay olduğunun farkında ve bilinçli olup olmadığını bilmek istiyorum, ama gerçekten bir şey değil Hakkında çok fazla bilgi bulabilirim.


25
Evet, ona OOP deniyor.
gardenhead

Yanıtlar:


28

Bu tür tasarımları tanımladığım en sık kullanılan terim aşırı mühendisliktir . Orijinal anlamı o kelimenin Ancak yazılım geliştirme ile ilgili değildir ve yazılım geliştirme dışında o kadar kötü bir sesi muhtemelen vardır değil.

Daha genel bir düzeyde, Joel Spolsky mimari tasarımları çok karmaşık hale getiren tasarımcılara " mimari astronotlar " adını verdi .

Ancak, özellikle bir röportaj için, tam tersine ne denildiğini bilmek, sadece gerçekten gerekli olan bir tasarıma koymak ve sağlıksız "her ihtimale karşı" yaklaşımını unutmak için daha önemli olduğunu düşünüyorum - buna YAGNI prensibi denir .


Teşekkürler. YAGNI'nin büyük savunucusuyum, ortak bir karşıt olup olmadığından emin değildim.
jleach

Yagni'nin "şu anda gerçekten ihtiyaç duyulan şey" hakkında olduğunu vurgulamak isterim. Halen ihtiyaç duyulmadığı sürece, daha sonra ihtiyaç duyulacağı bilinse bile, şeyleri dışarıda bırakmalısınız.
Bent

7
@Bent ayrıca yakın özellikte olacağından emin olduğunuz şeyleri / değişiklikleri tamamen görmezden gelmenin anlamına gelmediğini de vurgularım ... yazılımın daha sonra nasıl genişletileceğini bilmek, daha fazla kod yazmanız için size rehberlik edebilir bu değişim ekseni boyunca kolayca düzeltilebilir.
17'de Bakuriu

"Aşırı mühendislik" yerine "zayıf mühendislik" terimini kullanıyorum. Her türlü özelliği ve "her ihtimale karşı" eklentisi eklemeyi seven kullanıcılarla çalıştım. Eğer çözmeye çalıştığınız sorunu anlayamazsanız, bu sadece zayıf bir mühendisliktir.
Josh Johnson

4

Evet, aşırı mühendislik bunu açıklamak için en basit terimdir. Yıllar boyunca hatırlayabildiğimden, aşırı mühendislik gerektiren, gereksiz yere karmaşık tasarımlar gördüm. Yıllar önce bir Microsoft GWBasic kursu alırken, eğitmen tekrar tekrar KISS yöntemini çekiçledi (Basit Aptal Tutun). Bu bugün olduğu gibi doğrudur.

Bu yüzden her zaman KISS'i hatırlıyorum ve daima SOLID Prensipleri göz önünde bulundurularak tasarlıyorum . Ancak bununla birlikte, SOLID ilkeleri tamamen göz önünde bulundurularak bir tasarımı yenilemek hala mümkündür. Sağduyu ve genel olarak kabul edilebilir OOP yönergelerine uyma arzusu ile sağduyu, pragmatik bir yaklaşımı dengelemelisiniz. Yeterli zaman verilirse ve karmaşık çözümler oluşturmayı seviyorsanız, bir kaykay için bir motor tasarlama yolunu bitirebilirsiniz, çünkü sonunda bir arabaya dönüşeceğini düşündünüz. Neyse ki, bunu yıllar boyunca yapamayacak kadar disiplinli oldum, ama birçok kez gördüm.

Özetlemek gerekirse, kodun aşırı karmaşıklığını önlemek için:

1) ÖPÜCÜK (Basit Aptal Tutmak)

2) Pratikliği göz önünde bulundurarak SOLID ilkelerini takip edin.

3) Her olasılık için tasarım yapmaya çalışmayın. Ve bazen küçük, sızdıran soyutlamalar , yalıtılmış, kasıtlı ve onları önleme çabası, onları tutmanın etkilerinden çok daha ağır basarsa korkunç şeyler değildir.

4) Çözümleri tasarlarken uygulamayı düşünün. Sadece "oh, bu bir uygulama detayı" diyemezsiniz ve tasarımınızın pratik olduğunu varsayabilirsiniz. Bunu sık sık yapan bir mimarla çalışıyordum ve ne yazık ki, tasarımları hiç işe yaramadı ve sonuç olarak artık orada çalışmıyorum.

5) Bunu koruyacakmış gibi kodlayın.


-3

Yani, bu röportajı yapacaksınız ve adayı yazılım mühendisliği hakkında bildiklerini göstermesi için kandırmayı planlıyorsunuz ve sonra "Hayır, muhtemelen ilk ödevinizde bildiklerinizi uygulamak istiyorsunuz, şimdi devam edin , size iş değeri olmayan yaratıcı mühendislik altın kaplama! Shoo! "

Somut bir örnek sunmak ve bazı kalıpları uygulamak için profesyonelleri ve eksileri tartışmak daha güvenli olacaktır. "Bu duruma bağlı, hızlı mı istiyorsun? Hepsi bu kadar mı? Sorun ne kadar karmaşık? Halihazırda hangi kalıplar var?" ve kendiniz bir şeyler öğrenebilirsiniz. Bu aynı zamanda adayın bağlam duygusunu kanıtlamasına izin verirken daha açık bir soru olurdu. Belirli bir cevabı beklemek ve istemek, en iyi şekilde sizinkiyle en büyük endişeye sahip birini almanızı sağlayacaktır. Cevabınızı almazsanız, aday sadece beyinsiz olarak kabul edilir.


4
Üzgünüm, ama bunun için bir terim olup olmadığını gerçekten merak ediyordum. Bir röportajın nasıl yapılacağı (ya da sorumun nasıl bir röportaj yapacağım konusunda algılanması) konusunda tavsiye aramadım. Endişeniz için teşekkür ederiz ...
jleach

1
Sorunuzda görmezden gelinmesi zor olan ve son derece açık bir ifadeyle son paragrafı yazdınız. Metninizin belirli bölümleri hakkındaki geri bildirimlerinizi beğenmezseniz, sunduklarınızda daha kısıtlayıcı olmak isteyebilirsiniz.
Martin Maat
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.