惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
腾讯CDC
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
Vercel News
Vercel News
P
Proofpoint News Feed
雷峰网
雷峰网
博客园_首页
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
MyScale Blog
MyScale Blog
S
SegmentFault 最新的问题

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I Thought Domain-Driven Design Was a Waste of Time. I Was...
Mostafijur R · 2026-05-22 · via DEV Community

Mostafijur Rahman

The first time someone explained Domain-Driven Design (DDD) to me, I thought it was a lot of ceremony for very little payoff.

Aggregates, value objects, bounded contexts — a whole vocabulary to learn. I had shipped plenty of features without any of it. My honest assumption: this will just slow me down.

I was wrong. Here's the short version of how I found out.

The project that changed my mind

I worked on a system with a hierarchy — Site, then Aggregator, then a unit under that. A "plan" existed at every level.

In the code, all three were just plan. Same name, same shared object, everywhere.

It worked — until it didn't. Features started colliding. A change to one level's plan quietly broke another. Every function needed a comment explaining which plan it meant. New people asked the same question every week: "is this the site plan or the unit plan?"

The code ran fine. The understanding around it was rotting.

That's the exact problem DDD is built to fix.

What DDD actually is

DDD is not a framework. Nothing to install. It's a discipline: design your software around the business problem, not the database or the framework.

The patterns get all the attention, but the real value is in two boring ideas.

1. Ubiquitous language — name things honestly

Pick precise words and use them everywhere — in conversations, tickets, and the code itself.

If the business has a "draft plan" and a "submitted plan," those exact words belong in your class names. Not plan with a vague status field. The moment a name is vague, logic starts hiding inside it.

My entire mess traced back to one overloaded word.

2. Bounded context — stop forcing one model

"Customer" means different things to billing, support, and analytics. Forcing one shared Customer class gives you 40 fields nobody dares touch.

A bounded context is a line you draw: inside this boundary, a word means exactly one thing. Cross the line, you're allowed a different model.

This is also the most reliable way to answer "how do I split this microservice?" — split where the domain actually splits.

The patterns, in one line each

  • Entity — has a stable identity over time (an order stays that order).
  • Value object — defined only by its values (money, a date range).
  • Aggregate — a group of objects with one entry point that enforces the rules.
  • Repository — hides how data is stored from your domain code.
  • Domain event — something meaningful happened (PlanSubmitted).

But these only make sense after the language and boundary work. Reach for them first and you get fancy code that models nothing real.

When to skip DDD

My old skepticism wasn't wrong — just aimed at the wrong project.

Skip DDD if: the app is simple CRUD, the project is small or short-lived, or the complexity is technical (algorithms, performance) rather than business logic.

Use DDD if: the domain is genuinely complex and the software has to live and evolve for years.

"This will slow me down" is correct — for simple projects. It's completely wrong for complex ones.

What I'd tell my earlier self

The patterns are not the point. You can memorize aggregates and value objects and still build a mess.

The point is the boring stuff: talk to the people who understand the business, agree on exact words, draw honest boundaries, and let the code follow.

DDD is overhead. On a simple project, bad trade. On a complex one meant to last, it's the cheapest insurance you'll ever buy.


Originally published on mrsajib.com. I write weekly about backend engineering and building software that lasts.