Strategic architecture, tactical design, and testable code principles (SOLID, Clean Architecture, Design Patterns, Testable Design)
97
97%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Entities encapsulate enterprise-wide business rules that would exist regardless of automation. They must not contain application-specific logic, persistence code, or UI concerns.
Incorrect (entity mixed with infrastructure concerns):
class Invoice {
id: string
items: LineItem[]
status: InvoiceStatus
dueDate: Date
calculateTotal(): Money {
return this.items.reduce((sum, item) => sum.add(item.amount), Money.zero())
}
isOverdue(): boolean {
return this.status === InvoiceStatus.Unpaid && new Date() > this.dueDate
}
markPaid(): void {
this.status = InvoiceStatus.Paid
database.invoices.update(this) // Entity cannot be tested without database
emailService.send(this.customerEmail, 'Payment received') // Coupled to email system
}
}Correct (entity contains only business rules):
class Invoice {
id: string
items: LineItem[]
status: InvoiceStatus
dueDate: Date
calculateTotal(): Money {
return this.items.reduce((sum, item) => sum.add(item.amount), Money.zero())
}
isOverdue(): boolean {
return this.status === InvoiceStatus.Unpaid && new Date() > this.dueDate
}
markPaid(): void {
if (this.status !== InvoiceStatus.Unpaid) {
throw new InvalidOperationError('Invoice already processed')
}
this.status = InvoiceStatus.Paid
}
}Benefits:
Reference: Clean Architecture - Entities
clean-architecture
evals
references
design-patterns
solid-principles
testable-design