Zum Hauptinhalt springen
Echtzeit-Radar & Feeds
Alle RSS Feeds ➔
👥 Community & Social
Windows Tipps & SecurityGrafikkarte vor Überhitzung schützen: So geht’s(25.09.2026 um 08:00 Uhr)
••••••••••
Windows Tipps & SecurityGrafikkarte vor Überhitzung schützen: So geht’s(25.09.2026 um 08:00 Uhr)
••••••••••
Intelligence View
⚡ tsecurity.de Intelligence

Anemic Entities vs Behavior-Rich Entities Από το Anti-Pattern σε σωστό Domain Model (.NET Core / C#)

1. Τι είναι τα Anemic Entities Anemic Entity (ή Anemic Domain Model) είναι μια κλάση που: Περιέχει μόνο properties Δεν περιέχει επιχειρησιακή λογική Συμπεριφέρεται σαν DTO με ORM annotations Η λογική μεταφέρεται σε Services Παράδειγμα …

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!

1. Τι είναι τα Anemic Entities



Anemic Entity (ή Anemic Domain Model) είναι μια κλάση που:




  • Περιέχει μόνο properties

  • Δεν περιέχει επιχειρησιακή λογική

  • Συμπεριφέρεται σαν DTO με ORM annotations

  • Η λογική μεταφέρεται σε Services



Παράδειγμα Anemic Entity




public class Order
{
public Guid Id { get; set; }
public decimal TotalAmount { get; set; }
public bool IsPaid { get; set; }
}






Και ένα service:




public class OrderService
{
public void Pay(Order order)
{
if (order.IsPaid)
throw new InvalidOperationException("Order already paid");

order.IsPaid = true;
}
}









2. Γιατί είναι πρόβλημα (Anti-Pattern)



2.1 Παραβίαση OOP



Η αντικειμενοστραφής φιλοσοφία λέει:



Data + Behavior = Object



Στα anemic entities:




  • Τα objects είναι “κουφά”

  • Τα services γίνονται God Objects






2.2 Παραβίαση Encapsulation



Οποιοσδήποτε μπορεί να γράψει:



order.IsPaid = true;

order.TotalAmount = -100;



❌ Δεν υπάρχει έλεγχος εγκυρότητας





2.3 Business Logic σκορπισμένη




  • Validation σε services

  • Rules σε controllers

  • Side effects παντού



➡️ Δύσκολη συντήρηση & refactoring





2.4 Δυσκολία στο Testing



Για να τεστάρεις behavior:




  • Πρέπει να στήσεις services

  • Mock repositories

  • Mock dependencies



Ενώ το domain θα έπρεπε να τεστάρεται αυτόνομα





3. Πώς πρέπει να είναι ένα σωστό Entity



Ένα Behavior-Rich Entity:




  • Κρατά κανόνες και invariants

  • Ελέγχει το state του

  • Δεν επιτρέπει invalid καταστάσεις

  • Εκφράζει έννοιες του domain





4. Μετατροπή Anemic → Behavior-Rich (Step by Step)



4.1 Αρχικό Anemic Model




public class BankAccount
{
public Guid Id { get; set; }
public decimal Balance { get; set; }
}






Service:




public class BankAccountService
{
public void Withdraw(BankAccount account, decimal amount)
{
if (amount <= 0)
throw new ArgumentException();

if (account.Balance < amount)
throw new InvalidOperationException();

account.Balance -= amount;
}
}









5. Behavior-Rich Entity (Σωστό Domain Model)



5.1 Entity με Συμπεριφορά




public class BankAccount
{
public Guid Id { get; private set; }
public decimal Balance { get; private set; }

protected BankAccount() { } // EF Core

public BankAccount(Guid id)
{
Id = id;
Balance = 0;
}

public void Deposit(decimal amount)
{
if (amount <= 0)
throw new InvalidOperationException("Amount must be positive");

Balance += amount;
}

public void Withdraw(decimal amount)
{
if (amount <= 0)
throw new InvalidOperationException("Amount must be positive");

if (Balance < amount)
throw new InvalidOperationException("Insufficient funds");

Balance -= amount;
}
}






Τι κερδίσαμε



✅ Encapsulation

✅ Business rules κοντά στα δεδομένα

✅ Καμία invalid κατάσταση

✅ Καθαρό domain logic





6. Πλήρες Παράδειγμα: Order Aggregate (DDD)



6.1 Entity




public class Order
{
private readonly List<OrderItem> _items = new();

public Guid Id { get; private set; }
public IReadOnlyCollection<OrderItem> Items => _items.AsReadOnly();
public bool IsPaid { get; private set; }

protected Order() { }

public Order(Guid id)
{
Id = id;
}

public void AddItem(Guid productId, decimal price, int quantity)
{
if (quantity <= 0)
throw new InvalidOperationException();

_items.Add(new OrderItem(productId, price, quantity));
}

public decimal GetTotal()
{
return _items.Sum(i => i.Price * i.Quantity);
}

public void Pay()
{
if (!_items.Any())
throw new InvalidOperationException("Cannot pay empty order");

if (IsPaid)
throw new InvalidOperationException("Order already paid");

IsPaid = true;
}
}






6.2 Value Object




public class OrderItem
{
public Guid ProductId { get; }
public decimal Price { get; }
public int Quantity { get; }

public OrderItem(Guid productId, decimal price, int quantity)
{
if (price <= 0)
throw new InvalidOperationException();

ProductId = productId;
Price = price;
Quantity = quantity;
}
}






7. Πώς αλλάζουν τα Services



ΠΡΙΝ



order.IsPaid = true;



ΜΕΤΑ



order.Pay();



Το service πλέον




public class OrderApplicationService
{
private readonly IOrderRepository _repository;

public async Task PayOrder(Guid orderId)
{
var order = await _repository.GetById(orderId);
order.Pay();
await _repository.Save(order);
}
}






➡️ Το service ορχηστρώνει, δεν σκέφτεται






8. Unit Testing γίνεται απλό




[Fact]
public void Cannot_pay_empty_order()
{
var order = new Order(Guid.NewGuid());

Action act = () => order.Pay();

act.Should().Throw<InvalidOperationException>();
}






❌ Χωρίς mocks

❌ Χωρίς database

✅ Καθαρό domain test






9. EF Core & Anemic Myth



❗ Το EF Core ΔΕΝ απαιτεί anemic entities



Υποστηρίζει:




  • private setters

  • backing fields

  • protected constructors



Άρα:



Το anemic model είναι επιλογή, όχι ανάγκη






10. Πότε ΔΕΝ πειράζει να είναι Anemic



✔ DTOs

✔ Read Models (CQRS)

✔ Projections

✔ ViewModels



❌ ΟΧΙ στο domain






11. Κανόνας Senior Developer



Αν το object σου δεν προστατεύει τον εαυτό του, δεν είναι object.






12. Σύνοψη




























Anemic Entity Behavior-Rich Entity
Properties μόνο Data + Logic
Services γεμάτα logic Thin services
Κακή συντήρηση Καθαρό domain
Invalid states Strong invariants





nikosst

1. Sofort-Triage & Abwehrmaßnahmen

SOC Incident Playbook: Vulnerability Remediation & Verification
Syntax validiert (0 Fehler)
title: Detect Exploitation - Anemic Entities vs Behavior-Rich Entities Από το Anti-Pattern σε σωστό Domain Model (.NET Core / C#)
id: ec8951a5-a96a-4ff6-8fe7-91c8298ccf0b
status: experimental
description: Automatisch generierte SIEM-Erkennungsregel basierend auf CTI Intelligence
references:
  - https://tsecurity.de/
author: iShareStuff CTI Automated Detection Engine
date: 2026-09-26
logsource:
  category: network_connection
  product: any
detection:
  selection:
      CommandLine|contains:
        - 'exploit'
  condition: selection
falsepositives:
  - Legitime administrative Zugriffe oder Penetrationstests
level: high
tags:
  - attack.initial_access
Syntax validiert (0 Fehler)
rule CTI_Threat_Indicator {
    meta:
        author = "iShareStuff CTI Automated Detection Engine"
        date = "2026-09-26"
        description = "YARA Signature for "
    strings:
        $str = "Anemic Entities vs Behavior-Ri" ascii wide
    condition:
        any of them
}
Syntax validiert (0 Fehler)
index=security sourcetype IN ("cisco:asa", "pan:traffic", "zeek_conn", "suricata", "WinEventLog:Security")
("Anemic Entities vs Behavior-Rich Entitie")
| stats count earliest(_time) as first_seen latest(_time) as last_seen by src_ip, dest_ip, dest_host, signature
| eval first_seen=strftime(first_seen, "%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen, "%Y-%m-%d %H:%M:%S")
| sort - count
Syntax validiert (0 Fehler)
message: "*Anemic Entities vs Behavior-Rich Entitie*"
Syntax validiert (0 Fehler)
CommonSecurityLog
| where Message has "Anemic Entities vs Behavior-Rich Entitie"
| summarize EventCount = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by SourceIP, DestinationIP, DestinationPort, Activity
| extend DetectionRule = "iShareStuff-CTI-Compiled"
| sort by EventCount desc

2. Cyber Threat Intelligence & Forensik

🎯
MITRE ATT&CK Matrix Navigator 14 Taktiken
Reconnaissance
-
Resource Development
-
Initial Access
Execution
Persistence
-
Privilege Escalation
Defense Evasion
Credential Access
-
Discovery
-
Lateral Movement
-
Collection
-
Command and Control
Exfiltration
-
Impact
tsecurity.de Cognitive Threat RAG
Fokus-Vektor:

Kognitive Analyse für identifizierte Bedrohung: Erhöhte Bedrohungslage im Bereich Anemic Entities vs Behavior-Rich Entitie.... Basierend auf 368k Vektor-Korrelationen werden sofortige Isolationsmaßnahmen für betroffene Endpunkte empfohlen.

🛡️ Angriffsfläche & Exposure

Netzwerk/Remote-Zugriff ohne Vorauthentifizierung möglich.

⚡ Empfohlene Sofortmaßnahmen
  • 1. Perimeter-Inspektion: Relevante Portfreigaben und exponierte Endpunkte unverzüglich scannen.
  • 2. Patch-Applikation: Hersteller-Hotfix einspielen oder betroffene Daemons in isolierte DMZ-Segmente überführen.
  • 3. Telemetrie & EDR-Alerts: Prozessaufrufe und Child-Processes auf anomale Shell-Spawns überwachen.
🔗 Semantisch verwandte Zero-Days MariaDB 11.7 VEC
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Anemic Entities vs Behavior-Rich Entities Από το Anti-Pattern σε σωστό Domain Model (.NET Core / C#)

Thematisch verwandte Begriffe: Anemic, Entities, BehaviorRich, AntiPattern · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Zum Aktualisieren ziehen
ZERO-DAY CVE-2026-100503 | Ghidra versions through 12.1.4 contain a heap use-after-free vulnerabil…
Advisory →
tsecurity.de Icon
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag