# Domain Architecture

> Every principle in this category is listed as a record.

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#arch-category-domain-architecture

Every principle in this category is listed as a record. Each record carries its kind, its severity, the scopes it applies at and the layer it lives in, then the edge relations that join it to other records, the records that point back at it, the contracts that answer to it and the tensions it takes part in. The descriptors say how it is violated, detected, measured, repaired and enforced. Where the record carries one, an exemplar shows the shape before and after the principle is applied.

Relations diagram

The relations inside this category.

```mermaid
flowchart LR
n_domain_driven_design["Domain-Driven Design (DDD)"]
n_domain_model["Domain Model"]
n_bounded_context["Bounded Context"]
n_context_mapping["Context Mapping"]
n_anti_corruption_layer["Anti-Corruption Layer"]
n_explicit_boundaries["Explicit Boundaries"]
n_aggregate["Aggregate"]
n_value_object["Value Object"]
n_entity["Entity"]
n_domain_service["Domain Service"]
n_domain_driven_design --> n_bounded_context
n_domain_driven_design --> n_domain_model
n_bounded_context --> n_explicit_boundaries
n_bounded_context --> n_context_mapping
n_context_mapping --> n_bounded_context
n_context_mapping --> n_explicit_boundaries
n_context_mapping --> n_anti_corruption_layer
n_aggregate --> n_explicit_boundaries
n_entity --> n_domain_model
n_entity -.-> n_value_object
n_domain_service --> n_domain_model
n_domain_service -.-> n_aggregate
```

### Domain-Driven Design (DDD)

- Kind: [style](https://banes-lab.com/records/kind/style.md)
- Severity: contextual
- Scope: domain, bounded context, system
- Aliases: DDD
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md), [Bounded Context](https://banes-lab.com/records/arch/bounded-context.md)

Reinforces
[Domain Model](https://banes-lab.com/records/arch/domain-model.md), [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md)

Enables
[Domain Alignment](https://banes-lab.com/records/lex/domain-alignment.md)

In tension with
[Simple CRUD](https://banes-lab.com/records/lex/simple-crud.md)

Conflicts with
[Anemic Transaction Script](https://banes-lab.com/records/lex/anemic-transaction-script.md)

Referenced by
[Domain Events](https://banes-lab.com/records/arch/domain-events.md), [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)

Tensions
[Domain-Driven Design (DDD) Simple CRUD](https://banes-lab.com/records/tension/domain-driven-design-ddd-simple-crud.md)

Violated by
domain logic in infrastructure/controllers

Detected by
anemic models, scattered business rules

Measured by
domain logic locality

Refactored by
Extract Domain Model, Add Aggregate, Split Context

Enforced by
layer rules, domain tests

Before

```typescript
function updateFoo(row: FooRow, name: string) {
row.name = name;
row.updated_at = Date.now();
return fooTable.save(row);
}
```

After

```typescript
class Foo {
private constructor(readonly id: FooId, private name: string) {}
rename(name: FooName) { this.name = name.value; }
}
foo.rename(FooName.create(name));
```

### Domain Model

- Kind: [artifact](https://banes-lab.com/records/kind/artifact.md)
- Severity: contextual
- Scope: domain, bounded context
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md), [Invariants](https://banes-lab.com/records/arch/invariants.md)

Reinforces
[Correctness](https://banes-lab.com/records/arch/correctness.md), [Semantic Contracts](https://banes-lab.com/records/arch/semantic-contracts.md)

Enables
[Business Rule Encapsulation](https://banes-lab.com/records/lex/business-rule-encapsulation.md)

In tension with
[Persistence Simplicity](https://banes-lab.com/records/lex/persistence-simplicity.md)

Conflicts with
[Anemic Model](https://banes-lab.com/records/lex/anemic-model.md)

Referenced by
[Semantic Contracts](https://banes-lab.com/records/arch/semantic-contracts.md), [Domain-Driven Design (DDD)](https://banes-lab.com/records/arch/domain-driven-design.md), [Entity](https://banes-lab.com/records/arch/entity.md), [Domain Service](https://banes-lab.com/records/arch/domain-service.md), [Domain Events](https://banes-lab.com/records/arch/domain-events.md)

Tensions
[Domain Model Persistence Simplicity](https://banes-lab.com/records/tension/domain-model-persistence-simplicity.md)

Violated by
business rules outside domain objects/services

Detected by
procedural domain logic in services/controllers

Measured by
rule locality, invariant coverage

Refactored by
Move Logic to Domain, Add Value Object, Add Aggregate

Enforced by
domain layer rules, [tests](https://banes-lab.com/records/lex/tests.md)

Before

```typescript
type Foo = { status: string; count: number };
function closeFoo(foo: Foo) { foo.status = "closed"; }
```

After

```typescript
class Foo {
#status: "open" | "closed" = "open";
close() {
if (this.#status === "closed") throw new Error("Foo already closed");
this.#status = "closed";
}
}
```

### Bounded Context

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Severity: recommended
- Scope: domain, service, team
- Aliases: Bounded Contexts
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md), [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)

Reinforces
[Modularity](https://banes-lab.com/records/arch/modularity.md), [Autonomy](https://banes-lab.com/records/arch/autonomy.md)

Enables
[Context Mapping](https://banes-lab.com/records/arch/context-mapping.md), [Microservices](https://banes-lab.com/records/arch/microservices.md)

In tension with
[Cross-Context Reuse](https://banes-lab.com/records/lex/cross-context-reuse.md)

Conflicts with
[Shared Global Model](https://banes-lab.com/records/lex/shared-global-model.md)

Referenced by
[Package by Feature](https://banes-lab.com/records/arch/package-by-feature.md), [Microservices](https://banes-lab.com/records/arch/microservices.md), [Domain-Driven Design (DDD)](https://banes-lab.com/records/arch/domain-driven-design.md), [Context Mapping](https://banes-lab.com/records/arch/context-mapping.md)

Tensions
[Bounded Context Cross-Context Reuse](https://banes-lab.com/records/tension/bounded-context-cross-context-reuse.md)

Violated by
cross-context model leakage

Detected by
shared domain entities across contexts

Measured by
context coupling

Refactored by
Split Model, Add Anti-Corruption Layer, Define Context Map

Enforced by
package/service boundaries

Before

```typescript
type FooStatus = "A" | "D";
function priceBar(status: FooStatus) { return status === "A" ? 10 : 0; }
```

After

```typescript
type FooStatus = "active" | "disabled";
type BarEligibility = "eligible" | "ineligible";
function toBarEligibility(status: FooStatus): BarEligibility {
return status === "active" ? "eligible" : "ineligible";
}
```

### Context Mapping

- Kind: [activity](https://banes-lab.com/records/kind/activity.md)
- Severity: recommended
- Scope: bounded contexts, integration
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Bounded Context](https://banes-lab.com/records/arch/bounded-context.md), [Relationship Semantics](https://banes-lab.com/records/lex/relationship-semantics.md)

Reinforces
[Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md), [Integration Clarity](https://banes-lab.com/records/lex/integration-clarity.md)

Enables
[Anti-Corruption Layer](https://banes-lab.com/records/arch/anti-corruption-layer.md)

In tension with
[Documentation Overhead](https://banes-lab.com/records/lex/documentation-overhead.md)

Conflicts with
[Implicit Integration](https://banes-lab.com/records/lex/implicit-integration.md)

Referenced by
[Bounded Context](https://banes-lab.com/records/arch/bounded-context.md)

Tensions
[Context Mapping Documentation Overhead](https://banes-lab.com/records/tension/context-mapping-documentation-overhead.md)

Violated by
undocumented service/domain relationships

Detected by
unclear ownership, ambiguous integration flows

Measured by
undocumented dependency count

Refactored by
Define Context Map, Classify Upstream/Downstream

Enforced by
architecture docs, dependency reviews

Before

```typescript
fooService.writeDirectly(barDatabase, foo);
barService.readDirectly(fooDatabase, foo.id);
```

After

```typescript
const contextMap = {
upstream: "FooContext",
downstream: "BarContext",
relationship: "published-language",
} as const;
fooEvents.publish(toBarIntegrationEvent(foo));
```

### Anti-Corruption Layer

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: recommended
- Scope: integration, bounded context boundary
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Explicit Boundary](https://banes-lab.com/records/lex/explicit-boundary.md), [Translation Model](https://banes-lab.com/records/lex/translation-model.md)

Reinforces
[Domain Purity](https://banes-lab.com/records/lex/domain-purity.md), [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)

Enables
[Legacy/System Integration](https://banes-lab.com/records/lex/legacy-system-integration.md)

In tension with
[Mapping Overhead](https://banes-lab.com/records/lex/mapping-overhead.md)

Conflicts with
[Shared Model Coupling](https://banes-lab.com/records/lex/shared-model-coupling.md), [Vendor Lock-In Leakage](https://banes-lab.com/records/arch/vendor-lock-in-leakage.md)

Referenced by
[Context Mapping](https://banes-lab.com/records/arch/context-mapping.md), [Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)

Contracts
[Anti-Corruption Layer Over Cross-Context Leak](https://banes-lab.com/records/algo/no-leaky-context.md)

Tensions
[Anti-Corruption Layer Mapping Overhead](https://banes-lab.com/records/tension/anti-corruption-layer-mapping-overhead.md)

Violated by
external model leaking into domain

Detected by
external DTOs used in domain layer

Measured by
leakage count, adapter coverage

Refactored by
Add Translator, Add Adapter, Introduce Boundary DTO

Enforced by
import rules, layer tests

Before

```typescript
function createBar(fooResponse: FooApiResponse) {
return barService.create({ foo_status: fooResponse.state_code });
}
```

After

```typescript
type BarInput = { eligible: boolean };
function fromFoo(response: FooApiResponse): BarInput {
return { eligible: response.state_code === "A" };
}
barService.create(fromFoo(fooResponse));
```

### Explicit Boundaries

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: mandatory
- Scope: module, component, service, domain
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md), [Ownership](https://banes-lab.com/records/lex/ownership.md)

Reinforces
[Modularity](https://banes-lab.com/records/arch/modularity.md), [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)

Enables
[Replaceability](https://banes-lab.com/records/arch/replaceability.md), [Governance](https://banes-lab.com/records/arch/governance.md)

In tension with
[Cross-Cutting Concerns](https://banes-lab.com/records/lex/cross-cutting-concerns.md)

Conflicts with
[Boundary Leakage](https://banes-lab.com/records/arch/boundary-leakage.md)

Referenced by
[Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md), [Separation of Concerns](https://banes-lab.com/records/arch/separation-of-concerns.md), [High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md), [Modularity](https://banes-lab.com/records/arch/modularity.md), [Independence](https://banes-lab.com/records/arch/independence.md), [Bounded Context](https://banes-lab.com/records/arch/bounded-context.md), [Context Mapping](https://banes-lab.com/records/arch/context-mapping.md), [Aggregate](https://banes-lab.com/records/arch/aggregate.md), [Declared Jurisdiction](https://banes-lab.com/records/arch/declared-jurisdiction.md)

Tensions
[Explicit Boundaries Cross-Cutting Concerns](https://banes-lab.com/records/tension/cross-cutting-concerns-explicit-boundaries.md)

Violated by
internal imports, shared mutable internals

Detected by
forbidden imports, [cyclic dependencies](https://banes-lab.com/records/lex/cyclic-dependencies.md)

Measured by
boundary violation count

Refactored by
Move Code, Extract API, Restrict Exports

Enforced by
module rules, architecture tests

Before

```typescript
import { fooDatabase } from "../../foo/infrastructure/database";
export function loadBar(id: string) { return fooDatabase.query(id); }
```

After

```typescript
export interface FooGateway { find(id: FooId): Promise<FooSnapshot>; }
export function loadBar(id: FooId, foos: FooGateway) { return foos.find(id); }
```

### Aggregate

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: domain, consistency boundary, bounded context
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md)

Reinforces
[Invariants](https://banes-lab.com/records/arch/invariants.md), [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)

Enables
[Transactional Consistency Boundary](https://banes-lab.com/records/lex/transactional-consistency-boundary.md), [Root-Guarded Invariants](https://banes-lab.com/records/lex/root-guarded-invariants.md)

In tension with
[Aggregate Size](https://banes-lab.com/records/lex/aggregate-size.md)

Conflicts with
[Anemic Domain Model](https://banes-lab.com/records/arch/anemic-domain-model.md)

Referenced by
[Domain Service](https://banes-lab.com/records/arch/domain-service.md)

Tensions
[Aggregate Aggregate Size](https://banes-lab.com/records/tension/aggregate-aggregate-size.md)

Violated by
invariants enforced by services outside the entity cluster

Detected by
cross-entity invariant checks scattered in services

Measured by
out-of-aggregate invariant enforcement count

Refactored by
Define Aggregate Root, Enforce Invariants Within

Enforced by
domain model review

Before

```typescript
fooOrder.total -= item.price;
fooOrderItems.delete(item.id);
```

After

```typescript
class FooOrder {
#items: FooItem[] = [];
#total = 0;
removeItem(id: FooItemId) {
this.#items = this.#items.filter(item => item.id !== id);
this.#total = this.#items.reduce((sum, item) => sum + item.price, 0);
}
}
```

### Value Object

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: recommended
- Scope: domain, modeling, immutability
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Value Equality](https://banes-lab.com/records/lex/value-equality.md)

Reinforces
[Immutability](https://banes-lab.com/records/arch/immutability.md), [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)

Enables
[Self-Validating Values](https://banes-lab.com/records/lex/self-validating-values.md), [Side-Effect-Free Equality](https://banes-lab.com/records/lex/side-effect-free-equality.md)

In tension with
[Object Count](https://banes-lab.com/records/lex/object-count.md)

Conflicts with
[Primitive Obsession](https://banes-lab.com/records/arch/primitive-obsession.md), [Data Clumps](https://banes-lab.com/records/arch/data-clumps.md), [Long Parameter List](https://banes-lab.com/records/arch/long-parameter-list.md)

Referenced by
[Entity](https://banes-lab.com/records/arch/entity.md)

Tensions
[Value Object Object Count](https://banes-lab.com/records/tension/object-count-value-object.md)

Violated by
domain concepts carried as bare primitives

Detected by
repeated validation of the same primitive shape

Measured by
primitive-typed domain concept count

Refactored by
Introduce Value Object

Enforced by
domain model review

Before

```typescript
function priceFoo(amount: number, currency: string) { return { amount, currency }; }
```

After

```typescript
class Money {
private constructor(readonly amount: number, readonly currency: string) {}
static of(amount: number, currency: string): Money {
if (amount < 0) throw new Error("negative money");
return new Money(amount, currency);
}
equals(other: Money) { return this.amount === other.amount && this.currency === other.currency; }
add(other: Money): Money { return Money.of(this.amount + other.amount, this.currency); }
}
```

### Entity

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: domain, identity, lifecycle
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Stable Identity](https://banes-lab.com/records/lex/stable-identity.md)

Reinforces
[Domain Model](https://banes-lab.com/records/arch/domain-model.md), [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)

Enables
[Identity-Based Equality](https://banes-lab.com/records/lex/identity-based-equality.md), [Lifecycle Tracking](https://banes-lab.com/records/lex/lifecycle-tracking.md)

In tension with
[Value Object](https://banes-lab.com/records/arch/value-object.md)

Conflicts with
[Anemic Domain Model](https://banes-lab.com/records/arch/anemic-domain-model.md)

Tensions
[Entity Value Object](https://banes-lab.com/records/tension/entity-value-object.md)

Violated by
identity equated by attribute comparison

Detected by
equality by field value where identity is meant

Measured by
attribute-equality misuse count

Refactored by
Model Identity Explicitly

Enforced by
domain model review

Before

```typescript
type Foo = { id: string; name: string; status: string };
foo.status = "active";
```

After

```typescript
class Foo {
constructor(readonly id: FooId, private name: string, private status: FooStatus) {}
equals(other: Foo) { return this.id === other.id; }
activate() { this.status = "active"; }
}
```

### Domain Service

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: domain, behavior, coordination
- Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)

Details

Requires
[Domain Model](https://banes-lab.com/records/arch/domain-model.md)

Reinforces
[Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md), [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)

Enables
[Cross-Entity Domain Logic](https://banes-lab.com/records/lex/cross-entity-domain-logic.md)

In tension with
[Aggregate](https://banes-lab.com/records/arch/aggregate.md)

Conflicts with
[Fat Controller](https://banes-lab.com/records/arch/fat-controller.md), [Transaction Script Sprawl](https://banes-lab.com/records/arch/transaction-script-sprawl.md)

Tensions
[Domain Service Aggregate](https://banes-lab.com/records/tension/aggregate-domain-service.md)

Violated by
multi-entity domain rules living in controllers

Detected by
domain logic in application/transport layers

Measured by
misplaced domain-rule count

Refactored by
Extract Domain Service

Enforced by
domain model review

Before

```typescript
class FooAccount {
transferTo(other: FooAccount, amount: number) {
this.balance -= amount;
other.balance += amount;
}
}
```

After

```typescript
class FooTransferService {
transfer(from: FooAccount, to: FooAccount, amount: Money) {
from.withdraw(amount);
to.deposit(amount);
}
}
```

## Links to

- [style](https://banes-lab.com/records/kind/style.md)
- [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)
- [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)
- [Bounded Context](https://banes-lab.com/records/arch/bounded-context.md)
- [Domain Model](https://banes-lab.com/records/arch/domain-model.md)
- [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md)
- [Domain Alignment](https://banes-lab.com/records/lex/domain-alignment.md)
- [Simple CRUD](https://banes-lab.com/records/lex/simple-crud.md)
- [Anemic Transaction Script](https://banes-lab.com/records/lex/anemic-transaction-script.md)
- [Domain Events](https://banes-lab.com/records/arch/domain-events.md)
- [Domain-Driven Design (DDD) / Simple CRUD](https://banes-lab.com/records/tension/domain-driven-design-ddd-simple-crud.md)
- [artifact](https://banes-lab.com/records/kind/artifact.md)
- [Invariants](https://banes-lab.com/records/arch/invariants.md)
- [Correctness](https://banes-lab.com/records/arch/correctness.md)
- [Semantic Contracts](https://banes-lab.com/records/arch/semantic-contracts.md)
- [Business Rule Encapsulation](https://banes-lab.com/records/lex/business-rule-encapsulation.md)
- [Persistence Simplicity](https://banes-lab.com/records/lex/persistence-simplicity.md)
- [Anemic Model](https://banes-lab.com/records/lex/anemic-model.md)
- [Domain-Driven Design (DDD)](https://banes-lab.com/records/arch/domain-driven-design.md)
- [Entity](https://banes-lab.com/records/arch/entity.md)
- [Domain Service](https://banes-lab.com/records/arch/domain-service.md)
- [Domain Model / Persistence Simplicity](https://banes-lab.com/records/tension/domain-model-persistence-simplicity.md)
- [Tests](https://banes-lab.com/records/lex/tests.md)
- [constraint](https://banes-lab.com/records/kind/constraint.md)
- [Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md)
- [Modularity](https://banes-lab.com/records/arch/modularity.md)
- [Autonomy](https://banes-lab.com/records/arch/autonomy.md)
- [Context Mapping](https://banes-lab.com/records/arch/context-mapping.md)
- [Microservices](https://banes-lab.com/records/arch/microservices.md)
- [Cross-Context Reuse](https://banes-lab.com/records/lex/cross-context-reuse.md)
- [Shared Global Model](https://banes-lab.com/records/lex/shared-global-model.md)
- [Package by Feature](https://banes-lab.com/records/arch/package-by-feature.md)
- [Bounded Context / Cross-Context Reuse](https://banes-lab.com/records/tension/bounded-context-cross-context-reuse.md)
- [activity](https://banes-lab.com/records/kind/activity.md)
- [Relationship Semantics](https://banes-lab.com/records/lex/relationship-semantics.md)
- [Integration Clarity](https://banes-lab.com/records/lex/integration-clarity.md)
- [Anti-Corruption Layer](https://banes-lab.com/records/arch/anti-corruption-layer.md)
- [Documentation Overhead](https://banes-lab.com/records/lex/documentation-overhead.md)
- [Implicit Integration](https://banes-lab.com/records/lex/implicit-integration.md)
- [Context Mapping / Documentation Overhead](https://banes-lab.com/records/tension/context-mapping-documentation-overhead.md)
- [pattern](https://banes-lab.com/records/kind/pattern.md)
- [Explicit Boundary](https://banes-lab.com/records/lex/explicit-boundary.md)
- [Translation Model](https://banes-lab.com/records/lex/translation-model.md)
- [Domain Purity](https://banes-lab.com/records/lex/domain-purity.md)
- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)
- [Legacy/System Integration](https://banes-lab.com/records/lex/legacy-system-integration.md)
- [Mapping Overhead](https://banes-lab.com/records/lex/mapping-overhead.md)
- [Shared Model Coupling](https://banes-lab.com/records/lex/shared-model-coupling.md)
- [Vendor Lock-In Leakage](https://banes-lab.com/records/arch/vendor-lock-in-leakage.md)
- [Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)
- [Anti-Corruption Layer Over Cross-Context Leak](https://banes-lab.com/records/algo/no-leaky-context.md)
- [Anti-Corruption Layer / Mapping Overhead](https://banes-lab.com/records/tension/anti-corruption-layer-mapping-overhead.md)
- [principle](https://banes-lab.com/records/kind/principle.md)
- [Stable Interfaces](https://banes-lab.com/records/arch/stable-interfaces.md)
- [Ownership](https://banes-lab.com/records/lex/ownership.md)
- [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)
- [Replaceability](https://banes-lab.com/records/arch/replaceability.md)
- [Governance](https://banes-lab.com/records/arch/governance.md)
- [Cross-Cutting Concerns](https://banes-lab.com/records/lex/cross-cutting-concerns.md)
- [Boundary Leakage](https://banes-lab.com/records/arch/boundary-leakage.md)
- [Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md)
- [Separation of Concerns](https://banes-lab.com/records/arch/separation-of-concerns.md)
- [High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md)
- [Independence](https://banes-lab.com/records/arch/independence.md)
- [Aggregate](https://banes-lab.com/records/arch/aggregate.md)
- [Declared Jurisdiction](https://banes-lab.com/records/arch/declared-jurisdiction.md)
- [Explicit Boundaries / Cross-Cutting Concerns](https://banes-lab.com/records/tension/cross-cutting-concerns-explicit-boundaries.md)
- [Cyclic Dependencies](https://banes-lab.com/records/lex/cyclic-dependencies.md)
- [Transactional Consistency Boundary](https://banes-lab.com/records/lex/transactional-consistency-boundary.md)
- [Root-Guarded Invariants](https://banes-lab.com/records/lex/root-guarded-invariants.md)
- [Aggregate Size](https://banes-lab.com/records/lex/aggregate-size.md)
- [Anemic Domain Model](https://banes-lab.com/records/arch/anemic-domain-model.md)
- [Aggregate / Aggregate Size](https://banes-lab.com/records/tension/aggregate-aggregate-size.md)
- [Value Equality](https://banes-lab.com/records/lex/value-equality.md)
- [Immutability](https://banes-lab.com/records/arch/immutability.md)
- [Self-Validating Values](https://banes-lab.com/records/lex/self-validating-values.md)
- [Side-Effect-Free Equality](https://banes-lab.com/records/lex/side-effect-free-equality.md)
- [Object Count](https://banes-lab.com/records/lex/object-count.md)
- [Primitive Obsession](https://banes-lab.com/records/arch/primitive-obsession.md)
- [Data Clumps](https://banes-lab.com/records/arch/data-clumps.md)
- [Long Parameter List](https://banes-lab.com/records/arch/long-parameter-list.md)
- [Value Object / Object Count](https://banes-lab.com/records/tension/object-count-value-object.md)
- [Stable Identity](https://banes-lab.com/records/lex/stable-identity.md)
- [Identity-Based Equality](https://banes-lab.com/records/lex/identity-based-equality.md)
- [Lifecycle Tracking](https://banes-lab.com/records/lex/lifecycle-tracking.md)
- [Value Object](https://banes-lab.com/records/arch/value-object.md)
- [Entity / Value Object](https://banes-lab.com/records/tension/entity-value-object.md)
- [Cross-Entity Domain Logic](https://banes-lab.com/records/lex/cross-entity-domain-logic.md)
- [Fat Controller](https://banes-lab.com/records/arch/fat-controller.md)
- [Transaction Script Sprawl](https://banes-lab.com/records/arch/transaction-script-sprawl.md)
- [Domain Service / Aggregate](https://banes-lab.com/records/tension/aggregate-domain-service.md)

## Linked from

- [The layer topology](https://banes-lab.com/ontology/schema/the-layer-topology.md)
- [The membership](https://banes-lab.com/ontology/schema/the-membership.md)
