Upload
burak-selim-senyurt
View
1.412
Download
13
Embed Size (px)
Citation preview
Gizli TehlikeAntiPatterns
Burak Selim Şenyurt
Senior Software Consultanthttp://www.buraksenyurt.com
Burak Selim Şenyurt www.buraksenyurt.com
Bir Varmış, Bir Yokmuş
Burak Selim Şenyurt www.buraksenyurt.com
Düşünün! Bir tasarım kalıbını veya kod parçasını nasıl
çalıştığını anlamadan kullandınız mı? Ne kadar iş kuralı varsa hepsini ara yüz' deki
kontroller arkasına gömdünüz mü? Küresel bir çözümü kullanmak yerine
problemin özel olduğunu düşünüp tekrardan yazdınız mı?
Geliştirmeye başlamak için uzun süre Analiz Dokümanı’nın çıkmasını beklediniz mi?
Bir zamanlar deneme amaçlı yazdığınız kütüphaneleri bir ürünün geliştirilmesinde doğrudan kullandınız mı?
Kernel gibi isimlendirdiğiniz ve tüm kilit fonksiyonellikleri içerisine kattığınız devasa bir sınıf geliştirdiniz mi?
Burak Selim Şenyurt www.buraksenyurt.com
Düşünün! Daha önce başarılı bir şekilde kullandığınız
çözüm mimarisini sonraki ürünlerde terk etmeyi hiç düşündünüz mü?
Yıllar sonra, geliştirdiğiniz kütüphane içerisinde kalıp atıl olmuş kodlara rastladınız mı?
Bir başkasının yazdığı kod parçasını, içeriğinde biraz değişiklik yapıp kopyaladınız mı?
Kaynak kodları açık olan ve şirket içerisindeki ürünlerde kullanılan 3ncü parti bir bileşende özelleştirme yaptınız mı?
Bir servis’ den aldığınız ama yorumlayamadığınız bir hata mesajını son kullanıcıdan gizlediniz mi?
AntiPattern Nedir?
#Tanım, #Andrew Koenig, #Şablon,
Burak Selim Şenyurt www.buraksenyurt.com
İlk Tanım
Anti-pattern is just like pattern, except that instead of solution it gives something that looks superficially like a solution, but isn't one.
Andrew Koenig, 1995
Şöyle Yorumlayabiliriz : AntiPattern görünüşte(yüzeysel anlamda) çözüm zannedilen bir Pattern gibidir, ama aslında değildir.
Burak Selim Şenyurt www.buraksenyurt.com
AntiPatterns
• İlk bakıldığında ideal gibi görünen ama zaman içerisinde geliştirilmekte olan ürüne olumsuz etkilerde bulunan, farklı kategorilerden disiplin ve yaklaşımların oluşturduğu çözümler bütünü.
• Dünün en popüler çözümü bugünün AntiPattern’ i olabilir.• Bir Pattern çözdüğünden daha fazla problem oluşturuyorsa
AntiPattern’ dir.• Bir AntiPattern, mimari kavramlar ile gerçek dünya uyarlamaları
arasındaki boşluğu dolduran köprüdür.• Tasarım kalıplarının doğal bir uzantısıdır.
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Burak Selim Şenyurt www.buraksenyurt.com
AntiPatterns Şablonu
AntiPattern Çözümü
Koşulların Oluşturduğu Sebepler
Yeniden Değerlendirilmiş Çözüm
Belirtiler ve Neticeler
Kazanç Sonuç
İlişkili Pattern ve AntiPattern’ ler
İstisnalar
Burak Selim Şenyurt www.buraksenyurt.com
AntiPattern ReçetesiName: The Blob
Also Known As: Winnebago and The God
Class
Most Frequent Scale: Application
Refactored Solution Name: Refactoring of
Responsibilities
Refactored Solution Type: Software
Root Causes: Sloth, Haste
Unbalanced Forces: Management of
Functionality, Performance, Complexity
Anecdotal Evidence:
"This is the class that is really the heart of our
architecture."
Örnekler
#GoldenHammer, #ReinventingTheSquareWheel, #CopyPasteProgramming, #LavaFlow, #BoarAnchor, #CargoCultProgramming, #SphagettiCode, #ErrorHiding, #AnalysisParalysis, #VendorLockIn, #DeadEnd, #GodObject, #MagicPushButton, #OverEngineering
Burak Selim Şenyurt www.buraksenyurt.com
Golden Hammer - Methodological
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Favori bir çözümün evrensel anlamda kabul gördüğünü varsaymak.
Burak Selim Şenyurt www.buraksenyurt.com
Reinventing the Square Wheel - Methodological
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Var olan bir çözüm yerine ondan daha kötü olan özel bir çözüm üretme hatasına düşmek.
Burak Selim Şenyurt www.buraksenyurt.com
Copy-Paste Programming - Methodological
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Daha generic bir çözüm üretmek yerine var olan kodları kopyalayarak geliştirme yapmak.
Burak Selim Şenyurt www.buraksenyurt.com
Lava Flow - Programming
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Lüzumsuz veya düşük kaliteli kodları, kaldırma maliyetlerinin yüksek olması veya ön görülemeyen sebepler nedeniyle barındırmaya devam etmek.
Burak Selim Şenyurt www.buraksenyurt.com
Boat Anchor - Programming
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Her hangi bir amaçla kullanılmayan bir sistem parçasını tutmak/unutmak.
Burak Selim Şenyurt www.buraksenyurt.com
Cargo Cult Programming - Programming
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Desen ve metodları ne/nasıl/niçin olduğunu anlamadan kullanmak.
Burak Selim Şenyurt www.buraksenyurt.com
Spaghetti Code - Programming
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Özellikle kod yapılarının kötü kullanılması nedeniyle güç anlaşılır programların oluşması.
Burak Selim Şenyurt www.buraksenyurt.com
Error Hiding - Programming
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Kullanıcıya yakalanan bir hata ile ilişkili ya hiçbir şey gösterilmemesi ya da anlamlı bir mesaj verilmemesi.
Ayrıca Stack izlerini Exception’ ın ele alındığı sürede silinmesi ve hata ayıklamaya engel olunması.
Burak Selim Şenyurt www.buraksenyurt.com
Analysis Paralysis - Organizational
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Bir projenin analizine orantısız ölçüde yüksek efor harcamak.
Burak Selim Şenyurt www.buraksenyurt.com
Vendor Lock-In - Organizational
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Bir sistemin, dışarıdan sağlanan bir bileşene aşırı bağımlı olacak şekilde yazılması.
Burak Selim Şenyurt www.buraksenyurt.com
Dead End – Software Development
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Ticari bir yazılımın modifiye edilmesinin oluşturduğu bakım yükü.
Burak Selim Şenyurt www.buraksenyurt.com
God Object – Object Oriented Design
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Tasarımın tek bir parçasının-ki burada kastedilen bir sınıftır- çok fazla sayıda fonksiyona konsantre olması.
Burak Selim Şenyurt www.buraksenyurt.com
Magic PushButton – Software Design
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Soyutlama kullanmadan arayüz üzerinde doğrudan uygulama mantığı kodlamak.
Burak Selim Şenyurt www.buraksenyurt.com
OverEngineering – Project Management
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Bir projeyi gereğinden daha karmaşık ve güçlü hale getirmek için kaynak harcamak.
Kategorilendirme#SoftwareEngineering, #SocialAndBusinessOperations, #SoftwareDesign, #ObjectOrientedDesign, #Programming, #Methodological, #ConfigurationManagement, #Organizational, #ProjectManagement, #Analysis
Burak Selim Şenyurt www.buraksenyurt.com
Software Design
Object-Oriented Design
Programming
Software Engineering
MethodologicalConfiguration Management
Abstraction inversionAmbigous viewpointBig ball of mudDatabase-as-IPCGold plantingInner-platform effectInput kludgeInterface bloat
Magic pushbuttonRace HazardStovepipe System
Anemic domain modelBaseBeanCall superCircle-ellipse problemCircular DependencyConstant interface
God ObjectObject cesspoolObject orgyPolergeistsSequential couplingYo-yo problem
Accidential complexityAction at a distanceBlind Faith
Boat anchorBusy waitingCaching failure
Cargo cult programmingCoding by exception
Error hidingHard code
Lava flowLoop-switch sequenceMagic numbersMagic stringsRepeating yourselfShotgun surgerySoft code
Spaghetti codeLasagna Code
Copy and past ProgrammingGolden HammerImporability factorNot invented hereInvented herePremature OptimizationProgramming by Permutation
Reinventing the square wheelSilver bulletTester driven development
Dependency hellDLL hellExtension conflictJAR Hell
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Burak Selim Şenyurt www.buraksenyurt.com
Organizational Project Management Analysis
Social and Business Operations
Analysis ParalysisCash cow
Design by commitment
Escalation of commitment
Management by perkele
Management by objectives
Moral hazard
Mushroom management
Stovepipe or Silos
Vendor lock-in
Avalanche
Death march
Groupthink
OverengineeringSmoke and mirrors
Software bloat
Bystander apathy
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Burak Selim Şenyurt www.buraksenyurt.com
Kaynaklar
AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis
www.AntiPatterns.com
The Patterns Handbook: Techniques, Strategies, and Applications (SIGS Reference Library)
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt