Fonksiyonel ayrışma gerçekten bir antipattern midir?


9

Ben okurken karşılaştığınız en kötü anti-desenler , anti-desenler hakkında web sitesine inmek için bu yazıdaki bağlantıyı tıkladım .

Ve http://sourcemaking.com/antipatterns/functional-decomposition sayfası beni meraklandırdı.

Bu anti-desen ne kadar kötü ve hiç bir anti-desen mi? Çünkü, bugünlerde çoğunlukla OOP programlaması yapmama rağmen, hala Java gibi saf OOP dillerine ve getirdikleri tasarım uygulamalarına karşı bir isteksizlik hissediyorum. Ve sanırım, kodu yazarken hala işlevsel programlamanın bazı özellikleri var.

Ve bu bir soru getirdi, OOP + Fonksiyonel stile bağlı kalarak yanlış mı yapıyorum yoksa endüstride yaygın mı ve aslında o kadar da kötü değil.

Deneyimden bildiğim şey, OOP + İşlevsel stilin saf OOP geliştiricileriyle tamamen uyumlu olmamasıdır. Ancak, aynı zamanda, OOP geliştiricilerinin OOP + İşlevsel gelişim ile ilgili sorunları olsa da, karşı taraf, OOP çözümlerinin genellikle aşırı tasarlanmış ve kullanımı çok zor olduğu ve deneyimlerime göre, biraz daha kolay ve aslında gizlemek ÇOK ciddi hatalar için bazı kör noktalar tanıttı.

Bu nedenle, meslektaşımla bu konular hakkında tartışmış olmama rağmen, hiçbir yolun gerçekten mükemmel olmadığı sonucuna vardım. Ve hala sorumun cevabı yok.

OOP sorun da başka bir link ile takviye edilmiş mesaja aynı iş parçacığı. Bağlantı, Java stili OOP'ye bakar http://chaosinmotion.com/blog/?p=622

Peki fonksiyonel programlamanın OOP ile karıştırılmasına yönelik genel tutum nedir? Ve bir geliştiricinin ulaşmak için çabalaması gereken denge nedir?


1
Başlığınız ve soru bedeniniz, bazıları retorik gibi olan birkaç birbiriyle ilişkili ancak tamamen farklı sorular soruyor. Tam olarak ne istediğini bulmakta zorlanıyorum.
blueberryfields

Üzgünüm, ana dili İngilizce değilim ve daha iyi bir başlık düşünmekte zorlanıyorum. Düzeltmeler açıktır.
Kodlayıcı

1
Soru açık. Yabanmersini alanlarını dinlemeyin.
jojo

5
Açıkçası, OOP zealotları için OOP'un ulaşamayacağı herhangi bir şey bir "antipattern" dir. Aslında, mümkün olan en kötü antipattern, OOP'un kendisinin aşırı kullanımıdır.
SK-logic

Yanıtlar:


8

Her şeyden önce, fonksiyonel programlama şu anda tüm havalı çocukların yaptığı şeydir. Anti-Pattern gerçekten prosedürel programlamadan bahsediyordu (tekniğe "prosedürel ayrışma" deniyorsa daha açık olurdu, ama değil) ve bence sen de öyleydin.

Anti-desen, nesne yönelimli bir dilde prosedürel kod yazmanın kötü yollarından bahsetti, kötü hakkında konuşulan diğer sayfa Java yazmaktı - gerçekte yapmak istediğiniz her şeyi yapabileceğiniz kadar fantastik bir dil yok ama yapamazsınız. kötü kod yazmak.

Uygulamada, nesne yönelimli kodda prosedürden biraz daha fazla mühendislik gördüm - mühendislik altında biraz daha az ve mühendislik üzerinde biraz daha fazla.

Sizin durumunuzda, ayrıntılara bağlı olacaktır ve prosedürel bir tarzda ne yaptığınızdan emin değilim. Doğru, net, test edilebilir, değiştirilmesi kolay, vb mi? Kodu yargılama kriterleri, belirli bir stilin saflığına değil, bu tür pratik endişelere dayanmalıdır. Durumunuzda makul ve bilgili insanlar bu endişeler hakkında anlaşamaz (ve yapabilirler) gibi görünüyor ve eğer öyleyse muhtemelen sorunun gerçekliğini belirlemenin nesnel bir yolu yoktur.


2
Cevabınız iyi başladı, ama sonra belirsiz ve kararlı değilsiniz. OP'nin fonksiyonel ayrışmayla bağlantılı olduğu makaleyi okudum ve programlama tarzlarını nesne yönelimli bir paradigmaya sokmaya çalışan prosedür geliştiricileri tarafından uygulanan korkunç bir antipattern. Yani hayır, ayrıntılara bağlı değil.
Robert Harvey

ancak Coder'in anti-paternin kişisel olarak yaptığı şey olduğuna inandığını sanmıyorum (ne de ondan şüphe etmek için özel bir nedenim yok). Sorusu (bunlardan biri, gerçekten) prosedürel stil programlamanın bir nesne dilinde Tamam olup olmadığıydı (muhtemelen daha çok Java rant blogunda gösterilen statik Java işlevinde olduğu gibi). Ve bu, kodladığı şeyin özelliklerine bağlıdır. ("Senin durumunda" ile önsöz yaptım). Bence soruyu temelde "Anti-paternde olduğu gibi programlamalı mıyım?"
psr

4
Bu şekilde bile - prosedürel ayrışma geçerli bir tekniktir ve onu OOP ile çok uyumlu olmadığı için reddetmek saf bir fanatizmdir. Bütün çiçekler açsın. Akıllıca kullanılırsa tüm teknikler geçerlidir. Belirli bir metodolojiye bağlı kalmak hiç de akıllıca değildir.
SK-logic
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.