Paterni i antipaterni - katalog sa linkovima

↑ Nazad

topic: Katalog design paterna i antipaterna sa izvorima za učenje aliases: [design patterns katalog, GoF, PoEAA, antipaterni, code smells, sadržaj knjige paterni] date: 2026-09-25 depth: iterative rounds: 37/50 coverage: 11/11 verified: 96/99 (3 tvrdnje ispravljene: sourcemaking/antipatterns, ObjectAid, Omondo) sources: [martinfowler.com, refactoring.guru, sourcemaking.com, enterpriseintegrationpatterns.com, en.wikipedia.org, norvig.com, laputan.org, adaptiveobjectmodel.com, youtube.com] tags: [patterns, antipatterns, arhitektura, učenje, reference, gengine]


Katalog obrazaca i antiobrazaca — „sadržaj knjige" sa linkovima

TL;DR

Postoje četiri velika kataloga koja pokrivaju 95% svega što se u praksi zove „pattern": GoF (23 obrasca, nivo objekata), Fowler PoEAA (~51, nivo poslovne aplikacije), EIP (~65, integracija kroz poruke) i POSA (5 knjiga, arhitektura i konkurentnost). Antiobrasci nemaju jedan kanonski katalog — najbliže je knjiga AntiPatterns (1998) plus Wikipedijina lista od ~45 unosa u 5 kategorija.

Za učenje: refactoring.guru je najbolji besplatan web izvor za GoF (sa primerima u 10 jezika), martinfowler.com/eaaCatalog je besplatan katalog PoEAA sažetaka, a Christopher Okhravi (YouTube) je najbolji besplatan video za GoF. Same knjige su plaćene.

Za GEngine/GTehnobiro: obrasci koji se stvarno vide su Metadata Mapping, Table Module, Record Set, Layer Supertype, Bridge, Command + Chain of Responsibility, Composite, Template Method, Service Locator, Singleton, a arhitekturni stil je Adaptive Object-Model. Antiobrasci koji se vide: God object, Inner-platform effect, Lava flow, Copy-paste programming, Hard coding.

Zaključak

  1. Ne postoji „spisak svih obrazaca" — postoje katalozi koji se preklapaju i razlikuju po nivou posmatranja. Prvo se bira nivo (objekti / aplikacija / integracija / arhitektura), pa katalog.
  2. Besplatni izvori su dovoljni za učenje. Knjige vrede zbog obrazloženja i konteksta, ali svaki obrazac ima besplatnu stranicu sa dijagramom i primerom koda.
  3. Katalozi su stariji od jezika koje danas koristiš. Deo GoF obrazaca u modernim jezicima nestaje (Strategy = lambda), a jedan od njih (Singleton) je danas u Wikipedijinoj kategoriji antiobrazaca. To nije razlog da se ne uče — to je razlog da se uče sa datumom.

1. GoF — Design Patterns (1994)

Gamma, Helm, Johnson, Vlissides. 23 obrasca, nivo: objekti unutar programa. Besplatan katalog: refactoring.guru/design-patterns/catalog [1] (svih 23 potvrđeno). Alternativa: sourcemaking.com/design_patterns [2] — isti obrasci, plus tri koja nisu u knjizi (Null Object, Object Pool, Private Class Data). Video: Christopher Okhravi — „Design Patterns in Object Oriented Programming" [3] (jedna epizoda po obrascu, besplatno).

Kreacioni (5)

ObrazacČemu služiWeb (besplatno)
Factory Methodpotklase odlučuju koju klasu instanciratirefactoring.guru/design-patterns/factory-method
Abstract Factoryfamilija povezanih objekata bez imenovanja konkretnih klasa…/abstract-factory
Builderobjekat se sklapa korak po korak…/builder
Prototypenovi objekat kao kopija postojećeg…/prototype
Singletonjedna instanca, globalno dostupna — danas sporno, vidi §8…/singleton

Strukturni (7)

ObrazacČemu služiWeb
Adapterprevodi tuđi interfejs u onaj koji tvoj kod očekuje…/adapter
Bridgeodvaja apstrakciju od implementacije (GEngine: GDataDriver*)…/bridge
Compositejedan objekat i grupa se koriste isto (GContainer/GCell)…/composite
Decoratordodaje ponašanje omotavanjem, bez nasleđivanja…/decorator
Facadejedno prosto lice ispred složenog podsistema…/facade
Flyweightdeli zajedničko stanje između mnogo malih objekata…/flyweight
Proxystoji umesto objekta (lenjo, udaljeno, kontrola pristupa)…/proxy

Ponašajni (11)

ObrazacČemu služiWeb
Chain of Responsibilityporuka putuje nizom obrađivača dok je neko ne „pojede" (consume())…/chain-of-responsibility
Commandzahtev kao objekat (GCbMessage)…/command
Iteratorprolaz kroz kolekciju bez otkrivanja strukture…/iterator
Mediatorobjekti komuniciraju kroz posrednika, ne direktno…/mediator
Mementosnimak stanja za vraćanje…/memento
Observerpromena se javlja zainteresovanima…/observer
Stateponašanje se menja sa stanjem, bez if lanaca…/state
Strategyalgoritam se zamenjuje u runtime-u…/strategy
Template Methodskelet postupka u osnovnoj klasi (loadData/createData)…/template-method
Visitornova operacija nad hijerarhijom bez menjanja klasa…/visitor
Interpreterjezik/gramatika kao stablo objekatasourcemaking.com/design_patterns/interpreter

2. Fowler PoEAA — Patterns of Enterprise Application Architecture (2002)

Nivo: cela poslovna aplikacija. Besplatni sažeci: martinfowler.com/eaaCatalog/ [4]. Šema linka je martinfowler.com/eaaCatalog/<imeObrascaCamelCase>.html — potvrđeno na 15 stranica, sve HTTP 200 (npr. metadataMapping.html, tableModule.html, recordSet.html, layerSupertype.html). Puna obrada je u knjizi (plaćeno); sa kataloga vode i duboki linkovi ka O'Reilly eBook izdanju (plaćeno).

Spisak je izvučen sa same strane [4], grupisan kako ga Fowler grupiše:

GrupaObrasci
Domain LogicTransaction Script · Domain Model · Table Module · Service Layer
Data Source ArchitecturalTable Data Gateway · Row Data Gateway · Active Record · Data Mapper
O-R BehavioralUnit of Work · Identity Map · Lazy Load
O-R StructuralIdentity Field · Foreign Key Mapping · Association Table Mapping · Dependent Mapping · Embedded Value · Serialized LOB · Single Table Inheritance · Class Table Inheritance · Concrete Table Inheritance · Inheritance Mappers
O-R Metadata MappingMetadata Mapping · Query Object · Repository
Web PresentationModel View Controller · Page Controller · Front Controller · Template View · Transform View · Two Step View · Application Controller
DistributionRemote Facade · Data Transfer Object
Offline ConcurrencyOptimistic Offline Lock · Pessimistic Offline Lock · Coarse-Grained Lock · Implicit Lock
Session StateClient Session State · Server Session State · Database Session State
BaseGateway · Service Stub · Record Set · Mapper · Layer Supertype · Separated Interface · Registry · Value Object · Money · Special Case · Plugin

Četiri unosa odatle su kostur GEngine-a:

Sitnica sa iste strane: dijagrame u knjizi je prerisao David Heinemeier Hansson (tvorac Rails-a), a sadržaj strane je iz 2003. uz redizajn iz jula 2024 [4].


3. EIP — Enterprise Integration Patterns (2003)

Hohpe & Woolf, ~65 obrazaca za komunikaciju kroz poruke. Besplatan katalog: enterpriseintegrationpatterns.com/patterns/messaging/ [5]. Potvrđeni primeri stranica: Message.html, Filter.html, Aggregator.html, ContentBasedRouter.html, DeadLetterChannel.html, IdempotentReceiver.html, CorrelationIdentifier.html, MessageBroker.html, DurableSubscription.html, CompetingConsumers.html, ControlBus.html, Detour.html, EnvelopeWrapper.html, DynamicRouter.html, CanonicalDataModel.html — šema je .../messaging/<Ime>.html.

Kada treba: integracija sistema, redovi poruka, event-driven. Za GEngine trenutno nije tema.


4. POSA i konkurentnost

Pattern-Oriented Software Architecture, Buschmann i dr., 5 tomova (1996–2007) [6]. Wikipedijina strana opisuje seriju knjiga i recepciju, ne spisak obrazaca — spisak je u knjigama (plaćeno). Iz tomova (navedeno iz knjiga, nije izvučeno sa web strane):

Besplatna zamena za arhitekturne stilove: Wikipedijina „List of software architecture styles and patterns" [7] — potvrđeno preko API-ja: stilovi (Event-driven, Hexagonal/Ports and Adapters, Layered, Microkernel, Pipes and Filters, Microservices, Monolith, SOA, Space-based) i obrasci (Circuit Breaker, Saga, Strangler fig, Publish–subscribe, Retry, Rate limiting, Throttling, Blackboard, Claim-Check, Competing Consumers, Inbox/Outbox, Backends for frontends…).


5. DDD — Domain-Driven Design (2003)

Eric Evans. Gradivni blokovi: Entity, Value Object, Aggregate, Repository, Factory, Domain Event, Service, Bounded Context, Context Map, Ubiquitous Language. Besplatno: Wikipedia „Domain-driven design" [8] i, sa iste strane kao eksterni link, Evansov „Domain Driven Design, Definitions and Pattern Summaries" (PDF, 2015) — kratak zvaničan sažetak obrazaca, besplatan. Povezano: martinfowler.com/bliki/CQRS.html [9] i martinfowler.com/eaaDev/EventSourcing.html [10].


6. Adaptive Object-Model — arhitektura kakva je GEngine

Yoder & Johnson (isti Ralph Johnson iz GoF četvorke). Sistem u kojem metapodaci opisuju poslovna pravila, pa se ponašanje menja podatkom, ne kodom. Sajt: adaptiveobjectmodel.com [11]. To je najtačnije ime za GEngine kao celinu: tabela je opis, ekran i DDL su izvedeni. Srodno ime iz iste familije: Metadata-driven architecture, Type Object, Properties pattern.


7. Antiobrasci i code smells

7a. Knjiga

AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis (1998), Brown, Malveau, McCormick, Mowbray. Klasični unosi: The Blob (God Class), Continuous Obsolescence, Lava Flow, Ambiguous Viewpoint, Functional Decomposition, Poltergeists, Boat Anchor, Golden Hammer, Dead End, Spaghetti Code, Input Kludge, Walking through a Minefield, Cut-and-Paste Programming, Mushroom Management. Web dopuna: wiki.c2.com/?AntiPattern [13] (istorijski, originalna zajednica).

⚠️ ISPRAVKA prvog prolaza (provereno 26.09.2026): sourcemaking.com/antipatterns [12] vraća HTTP 200, ali na njoj više nema antiobrazaca — servira pregled design obrazaca. Moja prvobitna tvrdnja da je to „katalog antiobrazaca" je bila pogrešna: status 200 nije dokaz da stranica sadrži ono što tvrdim. Za antiobrasce koristi Wikipedijinu listu [14], kategoriju [15] i c2 wiki [13].

7b. Wikipedijina lista (izvučeno preko API-ja) [14]

KategorijaAntiobrasci
Generalni dizajnAbstraction inversion · Ambiguous viewpoint · Database-as-IPC · Input kludge · Interface bloat · Magic pushbutton · Stovepipe system
Objektno-orijentisaniAnemic domain model · Call super · Circle–ellipse problem · Circular dependency · Constant interface · God object · Object orgy · Poltergeist · Sequential coupling · Yo-yo problem
ProgramerskiAction at a distance · Boat anchor · Busy waiting · Cargo cult programming · Coding by exception · Error hiding · Lasagna code · Lava flow · Loop-switch sequence · Magic numbers · Magic strings · Repeating yourself · Shotgun surgery · Soft code · Spaghetti code
MetodološkiCopy and paste programming · Golden hammer · Not invented here · Premature optimization · Silver bullet · Tester-driven development
KonfiguracijaDependency hell · DLL hell · Extension conflict

Wikipedijina Category:Anti-patterns [15] dodaje još: Continuous obsolescence, Hard coding, Inner-platform effect, Law of the instrument, Mock trainwreck, Analysis paralysis, Dark pattern — i, što je najzanimljivije, Singleton pattern.

7c. Code smells (Fowler, Refactoring)

Besplatan spisak: refactoring.guru/refactoring/smells [16] — 22 potvrđena unosa: Long Method · Large Class · Primitive Obsession · Long Parameter List · Data Clumps · Switch Statements · Temporary Field · Refused Bequest · Alternative Classes with Different Interfaces · Divergent Change · Shotgun Surgery · Parallel Inheritance Hierarchies · Comments · Duplicate Code · Lazy Class · Data Class · Dead Code · Speculative Generality · Feature Envy · Inappropriate Intimacy · Message Chains · Middle Man · Incomplete Library Class.

7d. Big Ball of Mud

Foote & Yoder (1997) — najčešća arhitektura na svetu, opisana bez prezira. Besplatno: laputan.org/mud/ [17]. Obavezno čitanje za rad na legacy sistemu.


8. Protiv-argumenti i ograničenja (contrarian krug)

Tvrdnja koju sam proveravao: „vredi naučiti katalog obrazaca".

Protiv-argumentIzvorIshod
Obrasci su zakrpe za slab jezik — u modernom jeziku Strategy je lambdarefactoring.guru/design-patterns/criticism, koji to pripisuje eseju Paula Grahama Revenge of the Nerds [18]ostaje kao ograničenje: uči obrazac, ali proveri da li ti jezik već daje rešenje
Mnogi GoF obrasci su u dinamičkim jezicima nevidljivi ili trivijalniPeter Norvig, Design Patterns in Dynamic Languages (predavanje 1996, online od 1998; PDF 322 KB, preuzet i postoji) [19]ostaje; teza je starija od 25 godina i još važi za Python/Lisp/JS
Neefikasna rešenja i neopravdana upotreba („pattern fever")ista stranica sa kritikama [18]ostaje: obrazac bez problema je šteta, ne vrlina
Katalog je zastareo — jedan njegov obrazac (Singleton) je danas u kategoriji antiobrazacaWikipedia Category:Anti-patterns [15]ostaje: uči sa datumom, ne kao dogmu
PoEAA je iz 2002, pre modernih ORM-ova i CQRS-asadržaj strane je iz 2003 uz redizajn 2024 [4]slabi se: imena i podele važe, primeri i tehnologije su stari

Šta bi oborilo zaključak: da za GoF/PoEAA ne postoji besplatan izvor (postoji — §1, §2), ili da su imena obrazaca u praksi nekorišćena (nisu — Repository, DTO, MVC, Singleton su u svakodnevnom govoru). Nijedan protiv-argument ne obara komunikacionu vrednost imena; svi se odnose na slepu primenu.

9. Otvorena pitanja — ZATVORENA u drugom prolazu

Sve tri praznine iz prvog prolaza su popunjene (vidi §11–§13):

Ostaje otvoreno: kvalitet srpskog prevoda knjige Um caruje: Projektni obrasci (nisam je čitao, pa je ne ocenjujem) i POSA spisak iz samih tomova (Schmidtov sajt opisuje knjige, ne listu obrazaca).

Samoprocena

Izvori

  1. https://refactoring.guru/design-patterns/catalog — GoF katalog, svih 23 slug-a potvrđeno
  2. https://sourcemaking.com/design_patterns — alternativni katalog + Null Object, Object Pool, Private Class Data
  3. https://www.youtube.com/playlist?list=PLrhzvIcii6GNjpARdnO4ueTUAVR9eMBpc — „Design Patterns in Object Oriented Programming", Christopher Okhravi (naslov potvrđen)
  4. https://martinfowler.com/eaaCatalog/ — PoEAA katalog (spisak izvučen sa strane)
  5. https://www.enterpriseintegrationpatterns.com/patterns/messaging/ — EIP katalog
  6. https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture — POSA serija (recepcija)
  7. https://en.wikipedia.org/wiki/List_of_software_architecture_styles_and_patterns — stilovi i obrasci
  8. https://en.wikipedia.org/wiki/Domain-driven_design — DDD + link na Evansov PDF sažetak
  9. https://martinfowler.com/bliki/CQRS.html
  10. https://martinfowler.com/eaaDev/EventSourcing.html
  11. https://adaptiveobjectmodel.com/ — Adaptive Object-Model (Yoder & Johnson)
  12. https://sourcemaking.com/antipatterns — katalog antiobrazaca
  13. https://wiki.c2.com/?AntiPattern — originalna wiki zajednica
  14. https://en.wikipedia.org/wiki/List_of_software_anti-patterns — lista po kategorijama
  15. https://en.wikipedia.org/wiki/Category:Anti-patterns — 32 unosa, uključujući Singleton
  16. https://refactoring.guru/refactoring/smells — 22 code smell-a
  17. http://www.laputan.org/mud/ — Big Ball of Mud, Foote & Yoder
  18. https://refactoring.guru/design-patterns/criticism — kritike (Graham, neefikasnost, neopravdana upotreba)
  19. https://norvig.com/design-patterns/ — Norvig, Design Patterns in Dynamic Languages (PDF)
  20. https://martinfowler.com/articles/injection.html — Service Locator vs Dependency Injection
  21. https://martinfowler.com/bliki/AnemicDomainModel.html
  22. https://martinfowler.com/bliki/TechnicalDebt.html
  23. https://www.hillside.net/patterns/ — Hillside grupa, PLoP konferencije
  1. https://skolakoda.github.io/projektni-obrasci — Škola koda, srpski, besplatno (10 stranica potvrđeno)
  2. https://knjige.kombib.rs/um-caruje-projektni-obrasci — „Um caruje: Projektni obrasci" (srpsko izdanje)
  3. https://www.mikroknjiga.rs/Knjige/POUM/Uvod_POUM.pdf — besplatan uvod te knjige na srpskom (1,59 MB)
  4. https://www.mikroknjiga.rs/Knjige/NOD/06_NOD.pdf — uzorak poglavlja (Mikro knjiga)
  5. https://www.dre.vanderbilt.edu/~schmidt/POSA/ — zvanična strana POSA serije (Schmidt, Vanderbilt)
  6. https://microservices.io/patterns/index.html — Microservices Patterns (Richardson)
  7. https://learn.microsoft.com/en-us/azure/architecture/patterns/ — Cloud Design Patterns (Microsoft)
  8. https://gameprogrammingpatterns.com/contents.html — Game Programming Patterns (cela knjiga besplatna)
  9. http://xunitpatterns.com/ — xUnit Test Patterns (Meszaros)
  10. https://refactoring.com/catalog/ — Fowlerov katalog refaktorisanja
  11. https://martinfowler.com/bliki/StranglerFigApplication.html — Strangler Fig (zamena legacy sistema)
  1. https://sourcemaking.com/refactoring — ceo katalog refaktorisanja, besplatno, 204 linka
  2. https://sourcemaking.com/refactoring/extract-method — uzorak: kod u Javi, C#, PHP, Pythonu, TS (provereno citanjem)
  3. https://sourcemaking.com/uml — UML knjiga online, 4 dela, 7 tipova dijagrama, besplatno
  4. https://martinfowler.com/bliki/UmlAsSketch.html — „comprehensiveness is the enemy of comprehensibility" (citirano citanjem)
  5. https://martinfowler.com/bliki/UmlMode.html — sketch / blueprint / programming language
  6. https://plantuml.com/ — dijagram iz teksta (ziv)
  7. https://mermaid.js.org/ — dijagram u Markdown-u (ziv)
  8. https://github.com/structurizr/structurizr — C4 models as code; stari repoi arhivirani feb-mar 2026, cloud EOL
  9. https://github.com/CoatiSoftware/Sourcetrail — arhiviran 14.12.2021, radi za C/C++/Java/Python
  10. https://www.objectaid.com/ — MRTAV (parkirana strana, HTTP 200)
  11. https://alternativeto.net/software/objectaid/about — opis i potvrda da je ObjectAid ugasen
  12. https://eclipse.dev/papyrus/components/designer/ — Papyrus Software Designer (Java/C++, oba smera)
  13. https://marketplace.eclipse.org/content/jar2uml — JAR -> UML model (bez aktivnosti od ~2018)

Uz to: 10 per-obrazac stranica za POSA/konkurentnost (§12) i 10 stranica Škole koda (§11) — sve HTTP 200.

Prvi prolaz: 10 krugova. Drugi prolaz: krugovi 11–21. Sve provereno 25. septembra 2026. Nedostupno: infoelektronika.net (HTTP 000 — blokira klijenta), izbačeno iz izvora.


Dodatak: gde se koji obrazac vidi u GEngine/GTehnobiro kodu

Izvor: gengine-architecture (čitano iz izvora i baze 23–24. septembra 2026).

Obrazac / antiobrazacMesto u kodu
Metadata MappingGColumnHeader, GColumnString/Integer/…; DDL iz GMySqlDatabase.dbtCreate:119
Table Module + Record SetDbtObject, GDataSource2d — jedna instanca pokriva celu tabelu
Layer SupertypeGDataSourceLevel00 → 05 → 10 → 20 → 30 → 40 → 50
Bridge / DriverGDataDriverMySql, GDataDriverMemory, GDataDriverNull; GEngineAccess, GEngineExcel
Command + Chain of Responsibilitycallback(GCbMessage), 97 tipova poruka, pMessage.consume()
CompositeGContainer → GContainerTable → GCell → GRecordPanel
Template MethodloadData() / createData() / recreateData()
Proxyjava.lang.reflect.Proxy u demo Db.fake(...); JDBC drajver u tragu kao $Proxy0
Service Locator (ne DI)Class.forName(systable.Id).newInstance(); addOption(Klasa.class)
Singleton / ambient stateGDatabase.getActiveDatabase(), GDataServer.getActiveDataServer()
Registry / PoolGDbtPool, GDatabase.mPool
Adaptive Object-Modelcela arhitektura: šema u kodu, ponašanje iz metapodataka
God objectGDataSourceLevel20 — 587 linija, redovi + kolone + Excel + provajder
Inner-platform effectsopstveni „SQL iz metapodataka" sloj koji ponovo gradi deo baze
Copy-paste programminggenerator / generator2 / generator3 — tri kopije istog rešenja
Lava flow95 zakomentarisanih addOption linija u Main.java, *.java.bak fajlovi
Hard codingzakucani kredencijali u GMySqlDataLink (task: rotacija + env)
Magic pushbuttonlogika štampe vezana za akciju ekrana umesto u sloj posla

Kako se to koristi za učenje: uzmi jedan red iz tabele, pročitaj besplatnu stranicu obrasca, pa otvori to mesto u kodu. Obrazac koji vidiš u kodu koji održavaš deset godina ostaje; obrazac iz tutorijala se zaboravi.


DRUGI PROLAZ (krugovi 11–21)

11. Izvori na SRPSKOM — postoje, i besplatni su

Najveća praznina prvog prolaza. Nađeno i provereno:

Škola koda — 44 stranice na srpskom, besplatno [24]

skolakoda.github.io, deo zbornika „Principi razvoja softvera". Jedna stranica = jedan obrazac ili princip, na srpskom, sa vežbama i rešenjima („Pokaži rešenje") i sekcijom Literatura. Potvrđeno 10 stranica HTTP 200; spisak izvučen sa strane kursa:

GrupaStranice (slug)
GoF obrasciobrazac-fabrika · apstraktna-fabrika · obrazac-prototip · obrazac-singleton · obrazac-adapter · obrazac-most (Bridge) · obrazac-kompozit · obrazac-dekorator · obrazac-fasada · obrazac-flyweight · obrazac-proxy · obrazac-iterator · obrazac-komanda · obrazac-posmatrac · obrazac-stanja · obrazac-strategija · sablonski-metod
Nivo aplikacijemvc · mvvm · front-kontroler · objekat-za-prenos-podataka (DTO) · objekat-za-pristup-podacima (DAO) · lenjo-ucitavanje (Lazy Load) · bazen-objekata (Object Pool) · obrazac-modul
SOLID principiprincip-iskljucive-odgovornosti · otvoren-zatvoren-princip · liskov-princip-zamene · princip-podele-interfejsa · princip-inverzije-zavisnosti
Osnove i kontekstoop · nastanak-oop · apstrakcija · enkapsulacija · polimorfizam · nasledjivanje-klasa · kompozicija-vs-nasledjivanje · komponente · arhitektura-softvera · kontrola-pristupa · inverzija-kontrole · ubrizgavanje-zavisnosti · ispravan-kod-nije-dovoljan
Antiobrascianti-obrasci

Šema: https://skolakoda.github.io/<slug> (npr. .../obrazac-most).

Domaća terminologija koju koriste (korisno, jer je literatura neujednačena): projektni obrasci = design patterns · anti-obrasci = antipatterns · „kodni zapah" = code smell · ubrizgavanje zavisnosti = dependency injection · inverzija kontrole = IoC · sablonski metod = Template Method.

Contrarian provera tog izvora: stranica anti-obrasci termin pripisuje Andrew Koenigu (1995) — isto navodi i Wikipedijina sekcija Further reading (Koenig, „Patterns and Antipatterns", JOOP 8(1), 1995) [14]. Dva nezavisna izvora se slažu i izvor citira literaturu → prolazi proveru.

Knjige na srpskom (plaćeno, uz besplatne uzorke)

12. POSA i konkurentnost — praznina zatvorena

Zvanična strana serije: Schmidt, Vanderbilt [28] (opisuje svih 5 tomova; spisak obrazaca je u knjigama). Za pojedinačne obrasce postoje besplatne stranice — svih 10 provereno HTTP 200:

ObrazacStranicaČemu služi
Layersen.wikipedia.org/wiki/Multitier_architectureslojevi sa jasnim zavisnostima
Pipes and Filtersen.wikipedia.org/wiki/Pipeline_(software)obrada u lancu koraka
Blackboarden.wikipedia.org/wiki/Blackboard_(design_pattern)zajedničko znanje, više izvora rešenja
Brokeren.wikipedia.org/wiki/Broker_patternposrednik između udaljenih komponenti
Reactoren.wikipedia.org/wiki/Reactor_patternjedna nit obrađuje mnogo događaja (event loop)
Proactoren.wikipedia.org/wiki/Proactor_patternasinhrona varijanta Reactor-a
Active Objecten.wikipedia.org/wiki/Active_objectpoziv i izvršavanje na različitim nitima
Monitor Objecten.wikipedia.org/wiki/Monitor_(synchronization)sinhronizovan pristup stanju objekta
Thread Poolen.wikipedia.org/wiki/Thread_poolograničen broj radnika za mnogo poslova
Producer–Consumeren.wikipedia.org/wiki/Producer-consumer_problemred između proizvođača i potrošača

Za GEngine je iz ove grupe relevantno malo: Swing nameće Monitor/EDT disciplinu (sve na EDT-u), a invokeLater je Producer–Consumer u malom.

13. EIP — pun spisak (73 unosa izvučeno sa strane) [5]

Aggregator · BroadcastAggregate · CanonicalDataModel · ChannelAdapter · ChannelPurger · CommandMessage · CompetingConsumers · ContentBasedRouter · ContentFilter · ControlBus · CorrelationIdentifier · DataEnricher · DatatypeChannel · DeadLetterChannel · Detour · DistributionAggregate · DocumentMessage · DurableSubscription · DynamicRouter · EnvelopeWrapper · EventDrivenConsumer · EventMessage · Filter · FormatIndicator · GuaranteedMessaging · IdempotentReceiver · InvalidMessageChannel · Message · MessageBroker · MessageBus · MessageChannel · MessageDispatcher · MessageEndpoint · MessageExpiration · MessageHistory · MessageRouter · MessageSelector · MessageSequence · MessageStore · MessageTranslator · Messaging · MessagingAdapter · MessagingBridge · MessagingGateway · MessagingMapper · Normalizer · PipesAndFilters · PointToPointChannel · PollingConsumer · ProcessManager · PublishSubscribeChannel · RecipientList · RequestReply · Resequencer · ReturnAddress · RoutingTable · Sequencer · SmartProxy · StoreInLibrary · TestMessage · TransactionalClient · WireTap (+ uvodne strane po grupama).

Šema: enterpriseintegrationpatterns.com/patterns/messaging/<Ime>.html.

14. Još sedam besplatnih kataloga (svi provereni)

KatalogLinkZa kogaBesplatno
Game Programming Patterns (Nystrom)gameprogrammingpatterns.com/contents.html [31]GoF u stvarnom kodu + Game Loop, Component, Object Pool, Dirty Flagcela knjiga besplatna
Refactoring catalog (Fowler)refactoring.com/catalog/ [33]konkretne transformacije kodabesplatno
Strangler Fig (Fowler)martinfowler.com/bliki/StranglerFigApplication.html [34]postepena zamena legacy sistema — direktno naš planbesplatno
xUnit Test Patterns (Meszaros)xunitpatterns.com [32]Test Double, Mock, Stub, Fixture, test smellsbesplatno
Microservices Patterns (Richardson)microservices.io/patterns/index.html [29]Saga, API Gateway, Database per Serviceweb besplatno
Cloud Design Patterns (Microsoft)learn.microsoft.com/azure/architecture/patterns/ [30]Retry, Circuit Breaker, CQRS, Bulkhead, Shardingbesplatno
Hillside / PLoPhillside.net/patterns/ [23]izvorna zajednica, radovi sa konferencijabesplatno

Iskrena ocena relevantnosti: Game Programming Patterns je najbolji besplatan tekst za GoF u realnom kodu (tema su igre, ali obrasci su isti); Strangler Fig, Refactoring catalog i Big Ball of Mud su direktno primenjivi na modernizaciju. Microservices i cloud katalozi nisu za GEngine — to su obrasci za raspodeljene servise, ne za desktop 4GL sa jednom bazom.

Odluka korisnika (26.09.2026): ostaju u katalogu svakako. Razlog je dobar i vredi ga zapisati: katalog nije spisak zadataka nego mapa onoga što postoji — za buduće projekte, i da se zna šta treba izbegavati. Cena držanja jednog reda u tabeli je nula; cena ponovnog traženja kroz godinu je sat vremena.

15. Preporučen put učenja (posle oba prolaza)

  1. Srpski, besplatno, sa vežbama: Škola koda — jedan obrazac dnevno, počni od onih koje već imaš u kodu: obrazac-most, obrazac-komanda, obrazac-kompozit, sablonski-metod.
  2. Video, besplatno: Okhravi — ista lista, ali sa objašnjenjem problema pre rešenja.
  3. Tekst: refactoring.guru za dijagram i kod u tvom jeziku (Java/C#).
  4. Nivo aplikacije: Fowlerov eaaCatalog — pročitaj samo četiri koja opisuju tvoj engine: Metadata Mapping, Table Module, Record Set, Layer Supertype.
  5. Za modernizaciju: Strangler Fig + Refactoring catalog + Big Ball of Mud.
  6. Ako kupuješ jednu knjigu: „Um caruje: Projektni obrasci" (srpski) = Head First Design Patterns — najpristupačnija za GoF.

TREĆI PROLAZ (krugovi 22–26): sourcemaking.com iz bliza

Korisnik je našao sourcemaking.com i pitao ima li tamo nečeg za nas. Ima — dve sekcije koje nisu bile u katalogu, i jedna ispravka.

16a. Refactoring — ceo Fowlerov katalog, besplatno, sa kodom u 5 jezika

sourcemaking.com/refactoring [35] — 204 linka, organizovano po Fowlerovim grupama:

GrupaŠta pokrivaPrimeri
composing-methodsrazbijanje i sklapanje metodaExtract Method · Inline Method · Extract Variable · Replace Temp with Query
moving-features-between-objectspreseljenje odgovornostiMove Method · Move Field · Extract Class · Inline Class · Hide Delegate
organizing-datapodaci i pristupEncapsulate Field · Encapsulate Collection · Change Value to Reference · Replace Magic Number with Symbolic Constant
simplifying-conditional-expressionsusloviDecompose Conditional · Consolidate Conditional Expression · Replace Nested Conditional with Guard Clauses · Introduce Null Object
simplifying-method-callspotpisi i poziviAdd/Remove Parameter · Rename Method · Introduce Parameter Object · Replace Error Code with Exception
dealing-with-generalisationnasleđivanjePull Up/Push Down Method · Extract Superclass/Subclass · Extract Interface · Collapse Hierarchy · Form Template Method
smells22 „kodna zapaha" (isti kao §7c)Long Method · Large Class · Feature Envy…

Provereno čitanjem stranice extract-method [36]: sadržaj je potpuno besplatan, bez paywall-a, i ima Problem · Solution · Why Refactor · Benefits · How to Refactor plus kod pre/posle u Javi, C#, PHP-u, Pythonu i TypeScript-u. Na dnu stoji reklama za plaćeni kurs, ali ne skriva ništa.

Zašto je to za nas najvredniji deo sajta: kad budemo dirali generator3 (boja, redosled, dinamično listanje), radimo tačno imenovane transformacije — Extract Method, Extract Class, Form Template Method, Introduce Parameter Object, Replace Magic Number with Symbolic Constant (ono „strana 9" za isključen element je magic number, a Aktivan kolona je upravo ta zamena). Imenovana transformacija se lakše pregleda i lakše vrati nazad od „prepravio sam malo".

16b. UML — cela knjiga online, besplatno

sourcemaking.com/uml [37] — struktura je knjiga u četiri dela, sa aerodromom kao primerom:

  1. Basic Principles and Background — modeli, pogledi, dijagrami; istorija notacija; UML 2
  2. Modeling Business Systems — poslovni procesi, spoljni i unutrašnji pogled
  3. Modeling IT Systems — konceptualno modelovanje sistema
  4. Modeling for System Integration — poruke i procesi razmene

Pokriveni dijagrami: use case, aktivnosti, sekvenca, paket, klase, statechart, komunikacija.

Za nas: dijagram klasa za GEngine model (11 stubova iz priručnika) i sekvencni dijagram za callback(GCbMessage) — to je najbolji način da se 97 tipova poruka prikaže kao tok, a ne kao spisak. Kad radimo port, isti dijagrami postaju specifikacija za novi jezik.

16c. Ispravka i jedno upozorenje o izvorima

16d. Šta smo time dobili u praksi

potreba u našem posluodakle sada imamo alat
menjati generator3 bez rušenjaimenovane transformacije (16a)
objasniti callback tok drugom čovekusekvencni dijagram (16b)
dokumentovati model za port na C#/Rustdijagram klasa (16b)
zameniti „stranu 9" i druge magične vrednostiReplace Magic Number with Symbolic Constant (16a)
razdvojiti 587-linijski GDataSourceLevel20Extract Class + Pull Up/Push Down Method (16a)

ČETVRTI PROLAZ (krugovi 27–37): UML nad pravim programom i stanje alata

Povod: korisnik je već pravio UML dijagram svog programa i dobio zid kutija koji se ne može pratiti. Pitanje: postoji li danas alat koji to radi „fino i interaktivno", i koji je to bio Eclipse alat sa UML-om iz kog se pravilo klase.

17a. Zašto je gust dijagram bio neizbežan (i nije tvoja greška)

Fowler ima ime za tu grešku i rečenicu koja rešava problem [38]:

„comprehensiveness is the enemy of comprehensibility" („sveobuhvatnost je neprijatelj razumljivosti") i: „You don't show every class, just those that are interesting and worth talking about."

On razlikuje tri načina upotrebe UML-a: sketch (selektivno, za razgovor), blueprint (potpuno, za generisanje koda) i programming language (model jeste program) [38][39]. Automatski dijagram cele aplikacije od 1792 klase je blueprint upotreba — a tebi je trebao sketch. Alat nije bio loš; tražen je bio pogrešan nivo.

Pravilo koje iz toga sledi: jedan dijagram = jedan tok ili jedan sloj. Nikad „ceo program".

17b. Četiri nivoa koji rade na legacy aplikaciji

nivošta prikazujealatza nas
1. Arhitektura (C4)sistem → kontejneri → komponente, sa zumiranjemStructurizr (models as code)GTehnobiro + GEngine + MySQL + štampači kao 4 kutije, pa unutra
2. Jedan tok (sekvenca)šta se stvarno izvršilo pri jednom klikuiz Cortiveo traga (vidi 17e)5–15 učesnika, čitljivo po konstrukciji
3. Interaktivno istraživanje kodaklikni klasu → vidi pozivaoce i pozvaneSourcetrail (arhiviran, ali radi za Javu)zamena za „gde se ovo koristi"
4. Dijagram kao kodono što crtaš rukom, ali verzionisanoPlantUML / Mermaidide u git, vidi se u diff-u

Nivo 2 je odgovor na tvoje pitanje: dijagram je čitljiv zato što ga pravi trag jednog klika, a ne parser celog izvora. Ne mora se filtrirati ono što nije ni ušlo u sliku.

17c. Stanje alata — provereno 26. septembra 2026.

Dva alata su mrtva a vraćaju HTTP 200 — zato je ova tabela važnija od bilo koje preporuke:

AlatStanjeDetalj
PlantUMLživ [40]tekst → dijagram; sekvenca, klase, stanje, komponente; SVG sa linkovima
Mermaidživ [41]dijagram u Markdown-u; GitHub ga renderuje sam
Structurizrživ, ali reorganizovan [42]„models as code" za C4, dijagrami interaktivni (zoom); stari repoi (java, cli, lite, ui, onpremises) arhivirani feb–mar 2026, rad prešao u jedan repo structurizr/structurizr (aktivan 19.09.2026); cloud servis je EOL → koristi lokalno/self-host
Sourcetrailarhiviran 14.12.2021 [43]read-only repo, ali radi: C, C++, Java, Python; interaktivni pregled koda. Za Javu 8 potpuno upotrebljiv — naš slučaj
ObjectAid UML ExplorerMRTAV [44]domen sada pokazuje „Coming Soon"; opis alata: „live UML class and sequence diagrams that automatically updated as code changes" [45]
Omondo EclipseUMLMRTAVomondo.com vraća praznu „Default page"; na strani samo 2000/2001
Eclipse Papyrus + Software Designerživ [46]zvaničan Eclipse projekat; generisanje koda i reverse engineering za Javu i C++
Jar2UML (Eclipse)postoji, bez aktivnosti [47]JAR → UML model u workspace-u; marketplace prijavljuje podršku do Eclipse 2025-12, ali zadnja aktivnost ~2018
UML Labkomercijalnoround-trip, template-based reverse engineering
IntelliJ IDEA Ultimatekomercijalnougrađeni dijagrami klasa i zavisnosti
Understand (SciTools)komercijalnonajjači za velike legacy baze koda
CodeChartaživkod kao „grad" — metrika i veličina, ne UML

17d. Onaj Eclipse alat kog se sećaš — to je bio ObjectAid UML Explorer

Opis se poklapa sa tvojim sećanjem: pravio je žive dijagrame klasa i sekvence direktno iz koda, koji su se sami ažurirali kad se kod promeni, i prevlačenjem klasa u dijagram [45]. Bio je lagan (nije MDE alat) — zato se i pamti kao prijatan.

Status: ugašen. Domen je parkiran, a i nezavisni katalozi ga vode kao discontinued. Druga mogućnost je bio Omondo EclipseUML (isti princip, „live UML") — i on je mrtav.

Danas u Eclipse-u: Papyrus Software Designer (zvaničan, Java + C++, ide u oba smera) ili Jar2UML ako hoćeš dijagram iz JAR-a bez izvora — što je nama zanimljivo, jer JAR imamo uvek, a izvor u 10+ kopija.

17e. Predlog: cortiveo diagram — sekvencni dijagram iz traga

Već imamo sve podatke: stablo poziva jednog klika, dubinu, argumente, SQL i nit. Pretvaranje u PlantUML sekvencu je mali posao, a daje tačno ono što tražiš:

@startuml
participant GMainFrame
participant GDataSource
participant Definition
database MySQL

GMainFrame -> GDataSource : menuCall(frame, "")
activate GDataSource
GDataSource -> Definition : edit(frame, Object[0])
activate Definition
Definition -> MySQL : SELECT t0.Id, t0.Firma ... FROM definition
Definition --> GDataSource
deactivate Definition
deactivate GDataSource
@enduml

Zašto je to bolje od svakog generatora iz izvora:

  1. Prikazuje samo ono što se stvarno izvršilo — nema mrtvih grana, nema 1792 klase.
  2. Nosi vrednosti argumenata (--args), pa dijagram istovremeno dokumentuje kako se poziva.
  3. SQL je učesnik (database), pa se vidi gde tok udara u bazu.
  4. Verzionisan je — .puml ide u git uz kod; diff pokazuje kad se tok promenio.
  5. PlantUML izvozi SVG sa linkovima, pa je „interaktivno" u praksi: klik na učesnika → izvor.

Obim: jedan podkomanda u CLI-ju koja čita calls.log i ispisuje .puml (procena: jedna sesija).

17f. UML notacija — minimum koji treba da čitaš (i kako se najlakše nauči)

Ne treba ceo UML. Za naš posao dovoljno je dvanaest znakova:

Dijagram klasa

ZnakZnačenje
puna linija, prazan trougaonasleđivanje (extends) — GDataSource2d ▷ GDataSource
isprekidana linija, prazan trougaoimplementacija interfejsa (implements) — GDataSourceLevel40 ▷ GMenuCallable
puna linija bez ukrasaasocijacija („zna za")
prazan rombagregacija — deo može da živi bez celine
pun rombkompozicija — deo umire sa celinom (GContainer ◆ GCell)
isprekidana strelicazavisnost („koristi u prolazu")
1, 0..1, 1..*, *multiplicitet — koliko ih ima
+ - #javno, privatno, zaštićeno

Sekvencni dijagram

ZnakZnačenje
vertikalna linija (lifeline)objekat kroz vreme
uski pravougaonikaktivacija — metoda je na steku
puna strelicasinhroni poziv (čeka odgovor)
otvorena strelicaasinhroni poziv (invokeLater!)
isprekidana strelicapovratak
okvir loop / alt / optpetlja / grananje / opciono

Kako se to nauči bez bubanja: piši PlantUML rukom. Kucanjem A ->> B naučiš da je to asinhrono, jer si semantiku napisao, a ne prepoznavao. Za vežbu: sourcemaking UML knjiga [37] (besplatno, 7 tipova dijagrama) uz PlantUML dokumentaciju [40] koja uči kroz primere.

17g. Contrarian: da li UML uopšte vredi

ProtivIzvor / ishod
„UML je mrtav, timovi crtaju na tabli"Fowler sam razlikuje sketch od blueprint i brani samo sketch [38][39] → ostaje kao ograničenje: koristi ga kao skicu, ne kao specifikaciju
MDE alati (blueprint/round-trip) su odumrlidva primera iz ove sesije: ObjectAid i Omondo su ugašeni; Papyrus živi ali je težak → potvrđeno
C4 je zamenio UML za arhitekturuStructurizr/C4 je živ i za to napravljen [42] → slabi UML na nivou 1, ali sekvencni dijagram nema zamenu
Dijagram zastari istog danazato generisati iz traga (17e), a ne crtati rukom → protiv-argument rešen dizajnom

Zaključak: za ovaj projekat UML ima smisla u dva oblika — sekvenca iz traga (nivo 2) i dijagram klasa za 11 stubova modela (podloga za port). Sve ostalo je ukras koji zastari.

Izvor: design-paterni-i-antipaterni-katalog.md