Part 2 – DDD Layers in Telugu

2–3 minutes

DDD Layers (DDD యొక్క లేయర్లు)

1. Presentation Layer

ఈ లేయర్‌లో సాధారణంగా ఇవి ఉంటాయి:

  • ASP.NET Core API
  • MVC
  • Angular
  • React

ఉదాహరణ:

POST

/api/account/transfer

ఈ Layer యొక్క పని:

  • Client నుండి Request స్వీకరించడం
  • Request‌ను Application Layerకు పంపించడం
  • Response‌ను Clientకు తిరిగి పంపించడం

గమనిక: ఈ Layerలో ఎలాంటి Business Logic ఉండకూడదు.

ప్రవాహం (Flow):

Request

↓

Application Layer

2. Application Layer

ఈ Layer యొక్క ముఖ్యమైన బాధ్యతలు:

  • Use Cases నిర్వహించడం
  • వివిధ Components మధ్య సమన్వయం (Coordination)
  • Transactions నిర్వహించడం
  • Domain Objects‌ను ఉపయోగించి పని చేయించడం

ఉదాహరణ:

TransferMoneyCommand

↓

TransferMoneyHandler

↓

Domain

↓

Repository

↓

Save

ఈ Layerలో కూడా Business Rules ఉండవు.

ఇది కేవలం అన్ని Operations‌ను సరైన క్రమంలో నిర్వహిస్తుంది (Orchestration).


3. Domain Layer (DDD యొక్క హృదయం)

DDDలో అత్యంత ముఖ్యమైన Layer ఇదే.

ఇందులో ఉండేవి:

  • Entities
  • Value Objects
  • Aggregates
  • Domain Events
  • Repository Interfaces
  • Business Rules
  • Domain Services (అవసరమైతే)

అప్లికేషన్‌కు సంబంధించిన అన్ని ముఖ్యమైన Business Logic ఇక్కడే ఉంటుంది.


Entity అంటే ఏమిటి?

Entity అనేది Identity (ప్రత్యేక గుర్తింపు) కలిగిన Object.

ఉదాహరణ:

Account

Id

AccountNumber

Balance

CustomerId

ఈ Entityలో Methods:

Deposit()

Withdraw()

Transfer()

ముఖ్యమైన విషయం

Controllerలో ఇలా చేయకూడదు:

Balance = Balance - amount

అలా చేస్తే Business Rules బయటకు వెళ్తాయి.

సరైన విధానం:

Account.Withdraw(amount)

అంటే Accountకు సంబంధించిన అన్ని నియమాలు Account Entityలోనే ఉండాలి.


ఉదాహరణ (C#)

public class Account
{
    public decimal Balance { get; private set; }

    public void Deposit(decimal amount)
    {
        if(amount <= 0)
            throw new Exception("Invalid amount");

        Balance += amount;
    }

    public void Withdraw(decimal amount)
    {
        if(amount > Balance)
            throw new Exception("Insufficient funds");

        Balance -= amount;
    }
}

ఇక్కడ Business Rule:

Accountలో ఉన్న Balance కంటే ఎక్కువ డబ్బు Withdraw చేయకూడదు.

ఈ Rule పూర్తిగా Entityలోనే అమలు చేయబడింది.

అందువల్ల Controller లేదా Serviceలో ఈ Logic రాయాల్సిన అవసరం ఉండదు.


Value Object అంటే ఏమిటి?

Value Object అనేది Identity లేని Object.

దాని విలువ (Value) మాత్రమే ముఖ్యం.

ఉదాహరణ:

Address

Street

City

State

ZipCode

రెండు Addressలు ఒకే Values కలిగి ఉంటే అవి సమానంగా పరిగణించబడతాయి.

ఉదాహరణ:

Address A

=

Address B

Value Objects లక్షణాలు

  • Immutable (ఒకసారి సృష్టించిన తర్వాత మారవు)
  • Identity ఉండదు
  • Values ఆధారంగా Equality నిర్ణయించబడుతుంది

మరో ఉదాహరణ

Money

100 INR

కేవలం

decimal

వాడటం కంటే

Money అనే Value Object వాడటం ఉత్తమం.

ఎందుకంటే అది Currency, Validation మరియు ఇతర Business Rules‌ను కూడా కలిగి ఉండవచ్చు.


Aggregate అంటే ఏమిటి?

Aggregate అనేది పరస్పర సంబంధం ఉన్న Entities మరియు Value Objects సమూహం.

ఉదాహరణ:

Customer

↓

Accounts

↓

Transactions

ఇక్కడ Customer అనేది Aggregate Root.


మరొక ఉదాహరణ:

Customer

↓

Savings Account

↓

Current Account

↓

Transactions

ఇక్కడ:

  • Savings Account
  • Current Account
  • Transactions

వాటిని నేరుగా Modify చేయకూడదు.

అన్ని మార్పులు తప్పనిసరిగా Aggregate Root ద్వారా జరగాలి.

దీనివల్ల Data Consistency కాపాడబడుతుంది మరియు Business Rules ఉల్లంఘించబడవు.


Repository Pattern

Repository Pattern యొక్క ఉద్దేశ్యం:

Database Implementationను Domain నుండి వేరు చేయడం.

ఉదాహరణకు ఇలా రాయకూడదు:

DbContext.Accounts.First()

దాని బదులుగా Repository Interface ఉపయోగించాలి.

IAccountRepository

ఉదాహరణ:

public interface IAccountRepository
{
    Task<Account> GetById(Guid id);

    Task Save(Account account);
}

ఈ Interfaceను Domain Layerలో నిర్వచిస్తారు.

దాని అసలు Implementation మాత్రం Infrastructure Layerలో ఉంటుంది.

దీని వల్ల:

  • Domain Layerకు Database గురించి తెలియదు.
  • SQL Server స్థానంలో మరో Database వచ్చినా Domain మారదు.
  • Unit Testing చాలా సులభమవుతుంది.
  • Loose Coupling ఏర్పడుతుంది.
  • Maintainability పెరుగుతుంది.

ఇప్పటివరకు నేర్చుకున్నవి

ఈ భాగంలో మనం తెలుసుకున్నవి:

  • Presentation Layer
  • Application Layer
  • Domain Layer
  • Entity
  • Value Object
  • Aggregate
  • Aggregate Root
  • Repository Pattern

ఇవన్నీ కలిసి Domain-Driven Design (DDD) యొక్క బలమైన పునాది (Foundation)గా పనిచేస్తాయి.