{"id":21,"date":"2026-09-23T20:47:52","date_gmt":"2026-09-23T20:47:52","guid":{"rendered":"https:\/\/www.akifsen.com.tr\/blog\/?p=21"},"modified":"2026-09-23T20:47:53","modified_gmt":"2026-09-23T20:47:53","slug":"ddd-bounded-context-modular-architecture","status":"publish","type":"post","link":"https:\/\/www.akifsen.com.tr\/blog\/2026\/09\/23\/ddd-bounded-context-modular-architecture\/","title":{"rendered":"DDD Bir Klas\u00f6r Yap\u0131s\u0131 De\u011fildir: Bounded Context&#8217;i Yanl\u0131\u015f Anlad\u0131\u011f\u0131m\u0131z Yer"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Bir projenin klas\u00f6rleri \u015f\u00f6yle olabilir:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Domain\/\nApplication\/\nInfrastructure\/\nPresentation\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu yap\u0131 tek ba\u015f\u0131na projeyi Domain-Driven Design yapmaz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ayn\u0131 \u015fekilde her modelin yan\u0131nda Repository interface olmas\u0131 da DDD de\u011fildir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DDD&#8217;nin as\u0131l de\u011feri kodu hangi klas\u00f6re koydu\u011fumuzdan \u00f6nce <strong>sistemi hangi kavramsal s\u0131n\u0131rlara b\u00f6ld\u00fc\u011f\u00fcm\u00fczde<\/strong> ortaya \u00e7\u0131kar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ayn\u0131 kelime her yerde ayn\u0131 \u015feyi ifade etmeyebilir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bir e-ticaret sisteminde <code>Customer<\/code> kavram\u0131n\u0131 d\u00fc\u015f\u00fcnelim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sales a\u00e7\u0131s\u0131ndan customer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name\nsegment\ncampaignEligibility<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Billing a\u00e7\u0131s\u0131ndan ise:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>billingAddress\ntaxNumber\ncreditStatus<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00f6nemlidir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Her iki context&#8217;in tek bir devasa <code>Customer<\/code> modeli payla\u015fmas\u0131 zamanla modelin b\u00fct\u00fcn domain&#8217;lerin ihtiya\u00e7lar\u0131n\u0131 ta\u015f\u0131maya ba\u015flamas\u0131na neden olur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DDD&#8217;nin Bounded Context kavram\u0131 burada \u00f6nem kazan\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Martin Fowler&#8217;\u0131n a\u00e7\u0131klamas\u0131nda da Bounded Context, b\u00fcy\u00fck domain modellerinin a\u00e7\u0131k s\u0131n\u0131rlara ayr\u0131lmas\u0131 ve bu modeller aras\u0131ndaki ili\u015fkilerin bilin\u00e7li bi\u00e7imde tan\u0131mlanmas\u0131 olarak ele al\u0131n\u0131yor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Database tablosu domain s\u0131n\u0131r\u0131 de\u011fildir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">S\u0131k rastlanan tasar\u0131m:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OrderService \u2192 customer table\nPaymentService \u2192 customer table\nNotificationService \u2192 customer table<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kod katmanlar\u0131 g\u00fczel g\u00f6r\u00fcnse bile asl\u0131nda context boundary yoktur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Her mod\u00fcl di\u011ferinin datas\u0131na do\u011frudan eri\u015febilmektedir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sonu\u00e7 olarak schema de\u011fi\u015fikli\u011fi b\u00fct\u00fcn sistemi etkiler.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daha sa\u011fl\u0131kl\u0131 modelde her context kendi bilgisinin sahibi olur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Payment context&#8217;in ihtiyac\u0131 yaln\u0131zca:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>customer_id\nbilling_reference<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ise Customer context&#8217;in internal tablosunu okumak yerine gerekli veriyi bir contract veya integration event \u00fczerinden al\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cross-context mutation k\u0131rm\u0131z\u0131 bayrakt\u0131r<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6zellikle \u015fu tip kodlar mimari a\u00e7\u0131s\u0131ndan dikkat ister:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PaymentService\n   \u2192 CustomerRepository\n   \u2192 OrderRepository\n   \u2192 InvoiceRepository<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bir application service \u00fc\u00e7 farkl\u0131 domain&#8217;in state&#8217;ini kontrols\u00fcz bi\u00e7imde de\u011fi\u015ftiriyorsa bounded context s\u0131n\u0131rlar\u0131 ka\u011f\u0131t \u00fczerinde kalm\u0131\u015f olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bunun yerine:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PaymentCompleted<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">event&#8217;i yay\u0131mlanabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Order kendi state&#8217;ini de\u011fi\u015ftirir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Invoice kendi s\u00fcrecini ba\u015flat\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification kendi mesaj\u0131n\u0131 \u00fcretir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu yap\u0131 otomatik olarak do\u011fru de\u011fildir; eventual consistency gibi yeni maliyetleri vard\u0131r. Ama domain ownership \u00e7ok daha nettir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">DDD&#8217;nin amac\u0131 pattern say\u0131s\u0131n\u0131 art\u0131rmak de\u011fildir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aggregate, Value Object, Repository ve Domain Event ara\u00e7t\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hepsini her projede kullanmak zorunda de\u011filsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bir CRUD admin ekran\u0131n\u0131n d\u00f6rt katman, \u00fc\u00e7 factory ve alt\u0131 interface&#8217;e ihtiyac\u0131 olmayabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DDD&#8217;nin ba\u015far\u0131l\u0131 kullan\u0131m\u0131 kodun ne kadar \u201centerprise\u201d g\u00f6r\u00fcnd\u00fc\u011f\u00fcyle \u00f6l\u00e7\u00fclmez.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Model ile ger\u00e7ek i\u015f alan\u0131n\u0131n birbirine ne kadar iyi uydu\u011fuyla \u00f6l\u00e7\u00fcl\u00fcr.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0130yi mimari klas\u00f6r a\u011fac\u0131na bakt\u0131\u011f\u0131n\u0131zda de\u011fil, de\u011fi\u015fiklik geldi\u011finde kendini belli eder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bir i\u015f kural\u0131 de\u011fi\u015fti\u011finde sistemin yaln\u0131zca ilgili domain alan\u0131nda de\u011fi\u015febilmesi as\u0131l kazan\u0131md\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bir projenin klas\u00f6rleri \u015f\u00f6yle olabilir: Bu yap\u0131 tek ba\u015f\u0131na projeyi Domain-Driven Design yapmaz. Ayn\u0131 \u015fekilde her modelin yan\u0131nda Repository interface olmas\u0131 da DDD de\u011fildir. DDD&#8217;nin as\u0131l de\u011feri kodu hangi klas\u00f6re koydu\u011fumuzdan \u00f6nce sistemi hangi kavramsal s\u0131n\u0131rlara b\u00f6ld\u00fc\u011f\u00fcm\u00fczde ortaya \u00e7\u0131kar. Ayn\u0131 kelime her yerde ayn\u0131 \u015feyi ifade etmeyebilir Bir e-ticaret sisteminde Customer kavram\u0131n\u0131 d\u00fc\u015f\u00fcnelim. Sales a\u00e7\u0131s\u0131ndan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-21","post","type-post","status-publish","format-standard","hentry","category-mimari"],"_links":{"self":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":1,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":22,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/22"}],"wp:attachment":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}