@mytechtoday/augment-extensions 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +33 -1
- package/README.md +3 -3
- package/augment-extensions/domain-rules/software-architecture/README.md +143 -0
- package/augment-extensions/domain-rules/software-architecture/examples/banking-layered.md +961 -0
- package/augment-extensions/domain-rules/software-architecture/examples/ecommerce-microservices.md +990 -0
- package/augment-extensions/domain-rules/software-architecture/examples/iot-eventdriven.md +882 -0
- package/augment-extensions/domain-rules/software-architecture/examples/monolith-to-microservices-migration.md +703 -0
- package/augment-extensions/domain-rules/software-architecture/examples/serverless-imageprocessing.md +957 -0
- package/augment-extensions/domain-rules/software-architecture/examples/trading-eventdriven.md +747 -0
- package/augment-extensions/domain-rules/software-architecture/module.json +119 -0
- package/augment-extensions/domain-rules/software-architecture/rules/challenges-solutions.md +763 -0
- package/augment-extensions/domain-rules/software-architecture/rules/definitions-terminology.md +409 -0
- package/augment-extensions/domain-rules/software-architecture/rules/design-principles.md +684 -0
- package/augment-extensions/domain-rules/software-architecture/rules/evaluation-testing.md +1381 -0
- package/augment-extensions/domain-rules/software-architecture/rules/event-driven-architecture.md +616 -0
- package/augment-extensions/domain-rules/software-architecture/rules/fundamentals.md +306 -0
- package/augment-extensions/domain-rules/software-architecture/rules/industry-architectures.md +554 -0
- package/augment-extensions/domain-rules/software-architecture/rules/layered-architecture.md +776 -0
- package/augment-extensions/domain-rules/software-architecture/rules/microservices-architecture.md +503 -0
- package/augment-extensions/domain-rules/software-architecture/rules/modeling-documentation.md +1199 -0
- package/augment-extensions/domain-rules/software-architecture/rules/monolithic-architecture.md +351 -0
- package/augment-extensions/domain-rules/software-architecture/rules/principles.md +556 -0
- package/augment-extensions/domain-rules/software-architecture/rules/quality-attributes.md +797 -0
- package/augment-extensions/domain-rules/software-architecture/rules/scalability-performance.md +1345 -0
- package/augment-extensions/domain-rules/software-architecture/rules/security-architecture.md +1039 -0
- package/augment-extensions/domain-rules/software-architecture/rules/serverless-architecture.md +711 -0
- package/augment-extensions/domain-rules/software-architecture/rules/skills-development.md +568 -0
- package/augment-extensions/domain-rules/software-architecture/rules/tools-methodologies.md +961 -0
- package/augment-extensions/workflows/beads/rules/workflow.md +1 -1
- package/modules.md +40 -3
- package/package.json +1 -1
|
@@ -0,0 +1,961 @@
|
|
|
1
|
+
# Tools and Methodologies
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document covers architectural frameworks, methodologies, and tools including TOGAF, Domain-Driven Design (DDD), CI/CD practices, and architecture documentation tools.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Knowledge
|
|
10
|
+
|
|
11
|
+
### TOGAF (The Open Group Architecture Framework)
|
|
12
|
+
|
|
13
|
+
**What is TOGAF?**
|
|
14
|
+
- Enterprise architecture framework
|
|
15
|
+
- Provides methods and tools for developing architectures
|
|
16
|
+
- Industry-standard approach
|
|
17
|
+
- Version 9.2 is current standard
|
|
18
|
+
|
|
19
|
+
**TOGAF Architecture Development Method (ADM)**
|
|
20
|
+
|
|
21
|
+
**ADM Phases**
|
|
22
|
+
1. **Preliminary Phase** - Framework and principles
|
|
23
|
+
2. **Phase A: Architecture Vision** - Scope and stakeholders
|
|
24
|
+
3. **Phase B: Business Architecture** - Business strategy and processes
|
|
25
|
+
4. **Phase C: Information Systems Architecture** - Data and application architecture
|
|
26
|
+
5. **Phase D: Technology Architecture** - Infrastructure and platforms
|
|
27
|
+
6. **Phase E: Opportunities and Solutions** - Implementation planning
|
|
28
|
+
7. **Phase F: Migration Planning** - Transition architecture
|
|
29
|
+
8. **Phase G: Implementation Governance** - Architecture compliance
|
|
30
|
+
9. **Phase H: Architecture Change Management** - Continuous improvement
|
|
31
|
+
|
|
32
|
+
**TOGAF Deliverables**
|
|
33
|
+
- Architecture Vision Document
|
|
34
|
+
- Architecture Definition Document
|
|
35
|
+
- Architecture Requirements Specification
|
|
36
|
+
- Architecture Roadmap
|
|
37
|
+
- Transition Architecture
|
|
38
|
+
- Architecture Building Blocks (ABBs)
|
|
39
|
+
|
|
40
|
+
**When to Use TOGAF**
|
|
41
|
+
- Large enterprise transformations
|
|
42
|
+
- Complex multi-system integrations
|
|
43
|
+
- Regulatory compliance requirements
|
|
44
|
+
- Long-term strategic planning
|
|
45
|
+
|
|
46
|
+
### Domain-Driven Design (DDD)
|
|
47
|
+
|
|
48
|
+
**Core Concepts**
|
|
49
|
+
|
|
50
|
+
**Ubiquitous Language**
|
|
51
|
+
- Shared vocabulary between developers and domain experts
|
|
52
|
+
- Used in code, documentation, and conversations
|
|
53
|
+
- Reduces translation errors
|
|
54
|
+
- Evolves with understanding
|
|
55
|
+
|
|
56
|
+
**Bounded Contexts**
|
|
57
|
+
- Explicit boundaries for models
|
|
58
|
+
- Each context has its own ubiquitous language
|
|
59
|
+
- Models can differ across contexts
|
|
60
|
+
- Clear integration points
|
|
61
|
+
|
|
62
|
+
**Strategic Design Patterns**
|
|
63
|
+
- **Context Mapping** - Relationships between bounded contexts
|
|
64
|
+
- **Shared Kernel** - Common code shared between contexts
|
|
65
|
+
- **Customer-Supplier** - Upstream/downstream relationships
|
|
66
|
+
- **Conformist** - Downstream conforms to upstream
|
|
67
|
+
- **Anti-Corruption Layer** - Translation layer between contexts
|
|
68
|
+
- **Open Host Service** - Published API for integration
|
|
69
|
+
- **Published Language** - Well-documented integration format
|
|
70
|
+
|
|
71
|
+
**Tactical Design Patterns**
|
|
72
|
+
- **Entities** - Objects with identity
|
|
73
|
+
- **Value Objects** - Immutable objects without identity
|
|
74
|
+
- **Aggregates** - Cluster of entities with consistency boundary
|
|
75
|
+
- **Aggregate Root** - Entry point to aggregate
|
|
76
|
+
- **Repositories** - Persistence abstraction
|
|
77
|
+
- **Domain Services** - Stateless operations
|
|
78
|
+
- **Domain Events** - Something that happened in the domain
|
|
79
|
+
- **Factories** - Complex object creation
|
|
80
|
+
|
|
81
|
+
**DDD Layers**
|
|
82
|
+
```
|
|
83
|
+
┌─────────────────────────────┐
|
|
84
|
+
│ Presentation Layer │ ← UI, API Controllers
|
|
85
|
+
├─────────────────────────────┤
|
|
86
|
+
│ Application Layer │ ← Use Cases, Application Services
|
|
87
|
+
├─────────────────────────────┤
|
|
88
|
+
│ Domain Layer │ ← Entities, Value Objects, Domain Services
|
|
89
|
+
├─────────────────────────────┤
|
|
90
|
+
│ Infrastructure Layer │ ← Repositories, External Services
|
|
91
|
+
└─────────────────────────────┘
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### CI/CD for Architecture
|
|
95
|
+
|
|
96
|
+
**Continuous Integration**
|
|
97
|
+
|
|
98
|
+
**Architecture as Code**
|
|
99
|
+
- Infrastructure as Code (IaC)
|
|
100
|
+
- Terraform, CloudFormation, Pulumi
|
|
101
|
+
- Version-controlled infrastructure
|
|
102
|
+
- Automated provisioning
|
|
103
|
+
|
|
104
|
+
**Architecture Decision Records (ADRs)**
|
|
105
|
+
- Document significant decisions
|
|
106
|
+
- Version-controlled with code
|
|
107
|
+
- Template: Context, Decision, Consequences
|
|
108
|
+
- Immutable (new ADR to reverse)
|
|
109
|
+
|
|
110
|
+
**Automated Architecture Validation**
|
|
111
|
+
- Dependency rules enforcement
|
|
112
|
+
- Architecture fitness functions
|
|
113
|
+
- Static analysis tools
|
|
114
|
+
- Automated testing of architectural constraints
|
|
115
|
+
|
|
116
|
+
**Continuous Deployment**
|
|
117
|
+
|
|
118
|
+
**Deployment Strategies**
|
|
119
|
+
- **Blue-Green Deployment** - Two identical environments
|
|
120
|
+
- **Canary Deployment** - Gradual rollout to subset
|
|
121
|
+
- **Rolling Deployment** - Incremental instance updates
|
|
122
|
+
- **Feature Flags** - Runtime feature toggling
|
|
123
|
+
|
|
124
|
+
**Infrastructure Automation**
|
|
125
|
+
- Automated environment provisioning
|
|
126
|
+
- Configuration management
|
|
127
|
+
- Secrets management
|
|
128
|
+
- Monitoring and alerting setup
|
|
129
|
+
|
|
130
|
+
### Architecture Documentation Tools
|
|
131
|
+
|
|
132
|
+
**Diagramming Tools**
|
|
133
|
+
|
|
134
|
+
**C4 Model Tools**
|
|
135
|
+
- Structurizr - DSL for C4 diagrams
|
|
136
|
+
- PlantUML - Text-based diagrams
|
|
137
|
+
- Mermaid - Markdown-embedded diagrams
|
|
138
|
+
- Draw.io - Visual diagramming
|
|
139
|
+
|
|
140
|
+
**UML Tools**
|
|
141
|
+
- Enterprise Architect
|
|
142
|
+
- Visual Paradigm
|
|
143
|
+
- StarUML
|
|
144
|
+
- PlantUML
|
|
145
|
+
|
|
146
|
+
**Architecture as Code**
|
|
147
|
+
- Structurizr DSL
|
|
148
|
+
- Diagrams (Python library)
|
|
149
|
+
- Terraform Graph
|
|
150
|
+
- CloudCraft (AWS)
|
|
151
|
+
|
|
152
|
+
**Documentation Platforms**
|
|
153
|
+
- Confluence
|
|
154
|
+
- Notion
|
|
155
|
+
- GitBook
|
|
156
|
+
- MkDocs
|
|
157
|
+
|
|
158
|
+
### Architecture Governance
|
|
159
|
+
|
|
160
|
+
**Architecture Review Board (ARB)**
|
|
161
|
+
- Regular architecture reviews
|
|
162
|
+
- Decision-making authority
|
|
163
|
+
- Standards enforcement
|
|
164
|
+
- Exception handling
|
|
165
|
+
|
|
166
|
+
**Architecture Compliance**
|
|
167
|
+
- Automated compliance checks
|
|
168
|
+
- Manual code reviews
|
|
169
|
+
- Architecture fitness functions
|
|
170
|
+
- Continuous monitoring
|
|
171
|
+
|
|
172
|
+
**Architecture Metrics**
|
|
173
|
+
- Coupling metrics
|
|
174
|
+
- Cohesion metrics
|
|
175
|
+
- Complexity metrics
|
|
176
|
+
- Technical debt tracking
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Skills
|
|
181
|
+
|
|
182
|
+
### Applying TOGAF
|
|
183
|
+
|
|
184
|
+
**Skill: Execute ADM Phases**
|
|
185
|
+
- Define architecture vision and scope
|
|
186
|
+
- Develop baseline and target architectures
|
|
187
|
+
- Perform gap analysis
|
|
188
|
+
- Create migration roadmap
|
|
189
|
+
- Establish governance framework
|
|
190
|
+
|
|
191
|
+
**Skill: Create Architecture Artifacts**
|
|
192
|
+
- Architecture Vision Document
|
|
193
|
+
- Architecture Definition Document
|
|
194
|
+
- Architecture Requirements Specification
|
|
195
|
+
- Transition Architecture
|
|
196
|
+
- Architecture Roadmap
|
|
197
|
+
|
|
198
|
+
**Skill: Stakeholder Management**
|
|
199
|
+
- Identify stakeholders and concerns
|
|
200
|
+
- Manage stakeholder expectations
|
|
201
|
+
- Communicate architecture decisions
|
|
202
|
+
- Build consensus
|
|
203
|
+
|
|
204
|
+
### Implementing DDD
|
|
205
|
+
|
|
206
|
+
**Skill: Model Bounded Contexts**
|
|
207
|
+
- Identify domain boundaries
|
|
208
|
+
- Define ubiquitous language per context
|
|
209
|
+
- Map context relationships
|
|
210
|
+
- Design integration strategies
|
|
211
|
+
|
|
212
|
+
**Skill: Design Aggregates**
|
|
213
|
+
- Identify aggregate boundaries
|
|
214
|
+
- Define aggregate roots
|
|
215
|
+
- Enforce invariants
|
|
216
|
+
- Manage consistency
|
|
217
|
+
|
|
218
|
+
**Skill: Implement Tactical Patterns**
|
|
219
|
+
- Create entities and value objects
|
|
220
|
+
- Design repositories
|
|
221
|
+
- Implement domain services
|
|
222
|
+
- Publish domain events
|
|
223
|
+
|
|
224
|
+
### Setting Up CI/CD
|
|
225
|
+
|
|
226
|
+
**Skill: Implement Infrastructure as Code**
|
|
227
|
+
- Write Terraform/CloudFormation templates
|
|
228
|
+
- Version control infrastructure
|
|
229
|
+
- Automate provisioning
|
|
230
|
+
- Manage environments
|
|
231
|
+
|
|
232
|
+
**Skill: Create Architecture Fitness Functions**
|
|
233
|
+
- Define architectural constraints
|
|
234
|
+
- Implement automated tests
|
|
235
|
+
- Enforce dependency rules
|
|
236
|
+
- Monitor compliance
|
|
237
|
+
|
|
238
|
+
**Skill: Implement Deployment Strategies**
|
|
239
|
+
- Set up blue-green deployments
|
|
240
|
+
- Configure canary releases
|
|
241
|
+
- Implement feature flags
|
|
242
|
+
- Automate rollbacks
|
|
243
|
+
|
|
244
|
+
### Creating Architecture Documentation
|
|
245
|
+
|
|
246
|
+
**Skill: Create C4 Diagrams**
|
|
247
|
+
- Context diagrams (system boundaries)
|
|
248
|
+
- Container diagrams (high-level technology)
|
|
249
|
+
- Component diagrams (internal structure)
|
|
250
|
+
- Code diagrams (class/sequence)
|
|
251
|
+
|
|
252
|
+
**Skill: Write ADRs**
|
|
253
|
+
- Document context and problem
|
|
254
|
+
- Describe decision and rationale
|
|
255
|
+
- List consequences and trade-offs
|
|
256
|
+
- Version control with code
|
|
257
|
+
|
|
258
|
+
**Skill: Generate Diagrams from Code**
|
|
259
|
+
- Use Structurizr DSL
|
|
260
|
+
- Generate PlantUML from code
|
|
261
|
+
- Create Mermaid diagrams
|
|
262
|
+
- Automate diagram updates
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Examples
|
|
267
|
+
|
|
268
|
+
### Example 1: TOGAF ADM for E-Commerce Platform
|
|
269
|
+
|
|
270
|
+
**Phase A: Architecture Vision**
|
|
271
|
+
|
|
272
|
+
```markdown
|
|
273
|
+
# Architecture Vision: E-Commerce Platform Modernization
|
|
274
|
+
|
|
275
|
+
## Business Goals
|
|
276
|
+
- Increase scalability to handle 10x traffic
|
|
277
|
+
- Reduce time-to-market for new features
|
|
278
|
+
- Improve system reliability (99.99% uptime)
|
|
279
|
+
|
|
280
|
+
## Scope
|
|
281
|
+
- Customer-facing web and mobile applications
|
|
282
|
+
- Order management system
|
|
283
|
+
- Inventory management
|
|
284
|
+
- Payment processing
|
|
285
|
+
- Analytics and reporting
|
|
286
|
+
|
|
287
|
+
## Stakeholders
|
|
288
|
+
- CTO (sponsor)
|
|
289
|
+
- Engineering teams (implementers)
|
|
290
|
+
- Product managers (requirements)
|
|
291
|
+
- Operations (support)
|
|
292
|
+
|
|
293
|
+
## High-Level Architecture
|
|
294
|
+
- Microservices architecture
|
|
295
|
+
- Event-driven communication
|
|
296
|
+
- Cloud-native (AWS)
|
|
297
|
+
- API-first design
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Phase B: Business Architecture**
|
|
301
|
+
|
|
302
|
+
```markdown
|
|
303
|
+
# Business Architecture
|
|
304
|
+
|
|
305
|
+
## Business Capabilities
|
|
306
|
+
1. Customer Management
|
|
307
|
+
- Registration and authentication
|
|
308
|
+
- Profile management
|
|
309
|
+
- Preferences and settings
|
|
310
|
+
|
|
311
|
+
2. Product Catalog
|
|
312
|
+
- Product search and discovery
|
|
313
|
+
- Category management
|
|
314
|
+
- Pricing and promotions
|
|
315
|
+
|
|
316
|
+
3. Order Management
|
|
317
|
+
- Shopping cart
|
|
318
|
+
- Checkout process
|
|
319
|
+
- Order tracking
|
|
320
|
+
- Returns and refunds
|
|
321
|
+
|
|
322
|
+
4. Inventory Management
|
|
323
|
+
- Stock tracking
|
|
324
|
+
- Warehouse management
|
|
325
|
+
- Supplier integration
|
|
326
|
+
|
|
327
|
+
5. Payment Processing
|
|
328
|
+
- Payment gateway integration
|
|
329
|
+
- Fraud detection
|
|
330
|
+
- Refund processing
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**Phase C: Information Systems Architecture**
|
|
334
|
+
|
|
335
|
+
```markdown
|
|
336
|
+
# Application Architecture
|
|
337
|
+
|
|
338
|
+
## Microservices
|
|
339
|
+
- User Service
|
|
340
|
+
- Product Service
|
|
341
|
+
- Cart Service
|
|
342
|
+
- Order Service
|
|
343
|
+
- Inventory Service
|
|
344
|
+
- Payment Service
|
|
345
|
+
- Notification Service
|
|
346
|
+
|
|
347
|
+
## Data Architecture
|
|
348
|
+
- User Database (PostgreSQL)
|
|
349
|
+
- Product Catalog (Elasticsearch)
|
|
350
|
+
- Order Database (PostgreSQL)
|
|
351
|
+
- Inventory Database (PostgreSQL)
|
|
352
|
+
- Event Store (Kafka)
|
|
353
|
+
- Cache (Redis)
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Example 2: DDD Bounded Contexts for Banking System
|
|
357
|
+
|
|
358
|
+
**Context Map**
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
// Bounded Contexts
|
|
362
|
+
// 1. Account Management Context
|
|
363
|
+
// 2. Transaction Processing Context
|
|
364
|
+
// 3. Fraud Detection Context
|
|
365
|
+
// 4. Customer Service Context
|
|
366
|
+
|
|
367
|
+
// Context Relationships
|
|
368
|
+
// Account Management ←→ Transaction Processing (Shared Kernel)
|
|
369
|
+
// Transaction Processing → Fraud Detection (Customer-Supplier)
|
|
370
|
+
// Fraud Detection → Customer Service (Open Host Service)
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Account Management Context**
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
// Ubiquitous Language
|
|
377
|
+
// - Account: A customer's bank account
|
|
378
|
+
// - Account Holder: Person who owns the account
|
|
379
|
+
// - Balance: Current amount in account
|
|
380
|
+
// - Transaction: Money movement
|
|
381
|
+
|
|
382
|
+
// Aggregate: Account
|
|
383
|
+
class Account {
|
|
384
|
+
private id: AccountId;
|
|
385
|
+
private accountHolder: AccountHolder;
|
|
386
|
+
private balance: Money;
|
|
387
|
+
private transactions: Transaction[];
|
|
388
|
+
|
|
389
|
+
// Aggregate Root enforces invariants
|
|
390
|
+
deposit(amount: Money): void {
|
|
391
|
+
if (amount.isNegative()) {
|
|
392
|
+
throw new Error('Cannot deposit negative amount');
|
|
393
|
+
}
|
|
394
|
+
this.balance = this.balance.add(amount);
|
|
395
|
+
this.recordTransaction(new Deposit(amount));
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
withdraw(amount: Money): void {
|
|
399
|
+
if (amount.isNegative()) {
|
|
400
|
+
throw new Error('Cannot withdraw negative amount');
|
|
401
|
+
}
|
|
402
|
+
if (this.balance.isLessThan(amount)) {
|
|
403
|
+
throw new InsufficientFundsError();
|
|
404
|
+
}
|
|
405
|
+
this.balance = this.balance.subtract(amount);
|
|
406
|
+
this.recordTransaction(new Withdrawal(amount));
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
private recordTransaction(transaction: Transaction): void {
|
|
410
|
+
this.transactions.push(transaction);
|
|
411
|
+
// Publish domain event
|
|
412
|
+
DomainEvents.publish(new TransactionRecorded(this.id, transaction));
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Value Object
|
|
417
|
+
class Money {
|
|
418
|
+
constructor(
|
|
419
|
+
private readonly amount: number,
|
|
420
|
+
private readonly currency: Currency
|
|
421
|
+
) {}
|
|
422
|
+
|
|
423
|
+
add(other: Money): Money {
|
|
424
|
+
this.ensureSameCurrency(other);
|
|
425
|
+
return new Money(this.amount + other.amount, this.currency);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
subtract(other: Money): Money {
|
|
429
|
+
this.ensureSameCurrency(other);
|
|
430
|
+
return new Money(this.amount - other.amount, this.currency);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
isLessThan(other: Money): boolean {
|
|
434
|
+
this.ensureSameCurrency(other);
|
|
435
|
+
return this.amount < other.amount;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
isNegative(): boolean {
|
|
439
|
+
return this.amount < 0;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
private ensureSameCurrency(other: Money): void {
|
|
443
|
+
if (this.currency !== other.currency) {
|
|
444
|
+
throw new Error('Currency mismatch');
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Repository Interface (in domain layer)
|
|
450
|
+
interface AccountRepository {
|
|
451
|
+
findById(id: AccountId): Promise<Account | null>;
|
|
452
|
+
save(account: Account): Promise<void>;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Domain Service
|
|
456
|
+
class TransferService {
|
|
457
|
+
constructor(private accountRepository: AccountRepository) {}
|
|
458
|
+
|
|
459
|
+
async transfer(
|
|
460
|
+
fromAccountId: AccountId,
|
|
461
|
+
toAccountId: AccountId,
|
|
462
|
+
amount: Money
|
|
463
|
+
): Promise<void> {
|
|
464
|
+
const fromAccount = await this.accountRepository.findById(fromAccountId);
|
|
465
|
+
const toAccount = await this.accountRepository.findById(toAccountId);
|
|
466
|
+
|
|
467
|
+
if (!fromAccount || !toAccount) {
|
|
468
|
+
throw new Error('Account not found');
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Domain logic
|
|
472
|
+
fromAccount.withdraw(amount);
|
|
473
|
+
toAccount.deposit(amount);
|
|
474
|
+
|
|
475
|
+
// Persist changes
|
|
476
|
+
await this.accountRepository.save(fromAccount);
|
|
477
|
+
await this.accountRepository.save(toAccount);
|
|
478
|
+
|
|
479
|
+
// Publish domain event
|
|
480
|
+
DomainEvents.publish(new TransferCompleted(fromAccountId, toAccountId, amount));
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Example 3: CI/CD Architecture Pipeline
|
|
486
|
+
|
|
487
|
+
**Infrastructure as Code (Terraform)**
|
|
488
|
+
|
|
489
|
+
```hcl
|
|
490
|
+
# main.tf
|
|
491
|
+
terraform {
|
|
492
|
+
required_version = ">= 1.0"
|
|
493
|
+
backend "s3" {
|
|
494
|
+
bucket = "my-terraform-state"
|
|
495
|
+
key = "architecture/terraform.tfstate"
|
|
496
|
+
region = "us-east-1"
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
# VPC Module
|
|
501
|
+
module "vpc" {
|
|
502
|
+
source = "./modules/vpc"
|
|
503
|
+
|
|
504
|
+
vpc_cidr = "10.0.0.0/16"
|
|
505
|
+
availability_zones = ["us-east-1a", "us-east-1b"]
|
|
506
|
+
|
|
507
|
+
tags = {
|
|
508
|
+
Environment = var.environment
|
|
509
|
+
Project = "ecommerce"
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
# EKS Cluster
|
|
514
|
+
module "eks" {
|
|
515
|
+
source = "./modules/eks"
|
|
516
|
+
|
|
517
|
+
cluster_name = "ecommerce-${var.environment}"
|
|
518
|
+
cluster_version = "1.27"
|
|
519
|
+
vpc_id = module.vpc.vpc_id
|
|
520
|
+
subnet_ids = module.vpc.private_subnet_ids
|
|
521
|
+
|
|
522
|
+
node_groups = {
|
|
523
|
+
general = {
|
|
524
|
+
desired_size = 3
|
|
525
|
+
min_size = 2
|
|
526
|
+
max_size = 10
|
|
527
|
+
instance_types = ["t3.medium"]
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
# RDS Database
|
|
533
|
+
module "database" {
|
|
534
|
+
source = "./modules/rds"
|
|
535
|
+
|
|
536
|
+
identifier = "ecommerce-${var.environment}"
|
|
537
|
+
engine = "postgres"
|
|
538
|
+
engine_version = "14.7"
|
|
539
|
+
instance_class = "db.t3.medium"
|
|
540
|
+
|
|
541
|
+
vpc_id = module.vpc.vpc_id
|
|
542
|
+
subnet_ids = module.vpc.database_subnet_ids
|
|
543
|
+
|
|
544
|
+
backup_retention_period = 7
|
|
545
|
+
multi_az = true
|
|
546
|
+
}
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
**Architecture Fitness Function**
|
|
550
|
+
|
|
551
|
+
```typescript
|
|
552
|
+
// tests/architecture/dependency-rules.test.ts
|
|
553
|
+
import { ArchUnitTS } from 'archunit-ts';
|
|
554
|
+
|
|
555
|
+
describe('Architecture Rules', () => {
|
|
556
|
+
const arch = new ArchUnitTS('./src');
|
|
557
|
+
|
|
558
|
+
it('domain layer should not depend on infrastructure', () => {
|
|
559
|
+
arch
|
|
560
|
+
.classes()
|
|
561
|
+
.that()
|
|
562
|
+
.resideInPackage('domain')
|
|
563
|
+
.should()
|
|
564
|
+
.notDependOnPackage('infrastructure')
|
|
565
|
+
.check();
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
it('controllers should only be in presentation layer', () => {
|
|
569
|
+
arch
|
|
570
|
+
.classes()
|
|
571
|
+
.that()
|
|
572
|
+
.haveNameMatching(/.*Controller$/)
|
|
573
|
+
.should()
|
|
574
|
+
.resideInPackage('presentation')
|
|
575
|
+
.check();
|
|
576
|
+
});
|
|
577
|
+
|
|
578
|
+
it('repositories should only be accessed through interfaces', () => {
|
|
579
|
+
arch
|
|
580
|
+
.classes()
|
|
581
|
+
.that()
|
|
582
|
+
.implementInterface('Repository')
|
|
583
|
+
.should()
|
|
584
|
+
.resideInPackage('infrastructure')
|
|
585
|
+
.check();
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
it('domain events should be immutable', () => {
|
|
589
|
+
arch
|
|
590
|
+
.classes()
|
|
591
|
+
.that()
|
|
592
|
+
.implementInterface('DomainEvent')
|
|
593
|
+
.should()
|
|
594
|
+
.haveAllFieldsReadonly()
|
|
595
|
+
.check();
|
|
596
|
+
});
|
|
597
|
+
});
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
**Deployment Pipeline (GitHub Actions)**
|
|
601
|
+
|
|
602
|
+
```yaml
|
|
603
|
+
# .github/workflows/deploy.yml
|
|
604
|
+
name: Deploy Architecture
|
|
605
|
+
|
|
606
|
+
on:
|
|
607
|
+
push:
|
|
608
|
+
branches: [main]
|
|
609
|
+
pull_request:
|
|
610
|
+
branches: [main]
|
|
611
|
+
|
|
612
|
+
jobs:
|
|
613
|
+
validate-architecture:
|
|
614
|
+
runs-on: ubuntu-latest
|
|
615
|
+
steps:
|
|
616
|
+
- uses: actions/checkout@v3
|
|
617
|
+
|
|
618
|
+
- name: Run Architecture Tests
|
|
619
|
+
run: npm run test:architecture
|
|
620
|
+
|
|
621
|
+
- name: Validate Terraform
|
|
622
|
+
run: |
|
|
623
|
+
cd infrastructure
|
|
624
|
+
terraform init
|
|
625
|
+
terraform validate
|
|
626
|
+
terraform plan
|
|
627
|
+
|
|
628
|
+
- name: Check Architecture Diagrams
|
|
629
|
+
run: |
|
|
630
|
+
npm run generate:diagrams
|
|
631
|
+
git diff --exit-code docs/architecture/
|
|
632
|
+
|
|
633
|
+
deploy-infrastructure:
|
|
634
|
+
needs: validate-architecture
|
|
635
|
+
if: github.ref == 'refs/heads/main'
|
|
636
|
+
runs-on: ubuntu-latest
|
|
637
|
+
steps:
|
|
638
|
+
- uses: actions/checkout@v3
|
|
639
|
+
|
|
640
|
+
- name: Deploy with Terraform
|
|
641
|
+
run: |
|
|
642
|
+
cd infrastructure
|
|
643
|
+
terraform init
|
|
644
|
+
terraform apply -auto-approve
|
|
645
|
+
|
|
646
|
+
- name: Update Architecture Documentation
|
|
647
|
+
run: |
|
|
648
|
+
npm run generate:diagrams
|
|
649
|
+
git config user.name "GitHub Actions"
|
|
650
|
+
git config user.email "actions@github.com"
|
|
651
|
+
git add docs/architecture/
|
|
652
|
+
git commit -m "Update architecture diagrams [skip ci]"
|
|
653
|
+
git push
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### Example 4: Architecture Decision Record (ADR)
|
|
657
|
+
|
|
658
|
+
```markdown
|
|
659
|
+
# ADR-001: Use Microservices Architecture
|
|
660
|
+
|
|
661
|
+
## Status
|
|
662
|
+
Accepted
|
|
663
|
+
|
|
664
|
+
## Context
|
|
665
|
+
Our monolithic e-commerce application is experiencing:
|
|
666
|
+
- Difficulty scaling individual components
|
|
667
|
+
- Long deployment cycles (2-3 hours)
|
|
668
|
+
- Team coordination bottlenecks
|
|
669
|
+
- Technology stack lock-in
|
|
670
|
+
|
|
671
|
+
We need to improve:
|
|
672
|
+
- Independent scalability of services
|
|
673
|
+
- Deployment frequency (target: multiple times per day)
|
|
674
|
+
- Team autonomy
|
|
675
|
+
- Technology flexibility
|
|
676
|
+
|
|
677
|
+
## Decision
|
|
678
|
+
We will adopt a microservices architecture with the following characteristics:
|
|
679
|
+
|
|
680
|
+
1. **Service Boundaries**: Aligned with business capabilities
|
|
681
|
+
- User Service
|
|
682
|
+
- Product Service
|
|
683
|
+
- Order Service
|
|
684
|
+
- Inventory Service
|
|
685
|
+
- Payment Service
|
|
686
|
+
|
|
687
|
+
2. **Communication**:
|
|
688
|
+
- Synchronous: REST APIs for queries
|
|
689
|
+
- Asynchronous: Event-driven (Kafka) for commands
|
|
690
|
+
|
|
691
|
+
3. **Data Management**: Database per service pattern
|
|
692
|
+
|
|
693
|
+
4. **Deployment**: Containerized (Docker) on Kubernetes
|
|
694
|
+
|
|
695
|
+
5. **API Gateway**: Single entry point for clients
|
|
696
|
+
|
|
697
|
+
## Consequences
|
|
698
|
+
|
|
699
|
+
### Positive
|
|
700
|
+
- Independent deployment and scaling
|
|
701
|
+
- Technology diversity (choose best tool per service)
|
|
702
|
+
- Team autonomy and parallel development
|
|
703
|
+
- Fault isolation
|
|
704
|
+
- Easier to understand individual services
|
|
705
|
+
|
|
706
|
+
### Negative
|
|
707
|
+
- Increased operational complexity
|
|
708
|
+
- Distributed system challenges (network latency, partial failures)
|
|
709
|
+
- Data consistency challenges
|
|
710
|
+
- Testing complexity
|
|
711
|
+
- Need for service discovery and orchestration
|
|
712
|
+
- Higher infrastructure costs initially
|
|
713
|
+
|
|
714
|
+
### Mitigation Strategies
|
|
715
|
+
- Invest in observability (logging, monitoring, tracing)
|
|
716
|
+
- Implement circuit breakers and retry logic
|
|
717
|
+
- Use saga pattern for distributed transactions
|
|
718
|
+
- Comprehensive integration testing
|
|
719
|
+
- Gradual migration (strangler fig pattern)
|
|
720
|
+
|
|
721
|
+
## Alternatives Considered
|
|
722
|
+
|
|
723
|
+
### Modular Monolith
|
|
724
|
+
- Pros: Simpler deployment, easier testing
|
|
725
|
+
- Cons: Still coupled deployment, scaling limitations
|
|
726
|
+
- Rejected: Doesn't address scaling and deployment frequency goals
|
|
727
|
+
|
|
728
|
+
### Serverless
|
|
729
|
+
- Pros: No infrastructure management, auto-scaling
|
|
730
|
+
- Cons: Vendor lock-in, cold start latency, cost at scale
|
|
731
|
+
- Rejected: Not suitable for our traffic patterns and cost constraints
|
|
732
|
+
|
|
733
|
+
## References
|
|
734
|
+
- "Building Microservices" by Sam Newman
|
|
735
|
+
- "Microservices Patterns" by Chris Richardson
|
|
736
|
+
- Martin Fowler's Microservices Resource Guide
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
### Example 5: C4 Model with Structurizr DSL
|
|
740
|
+
|
|
741
|
+
```dsl
|
|
742
|
+
workspace "E-Commerce Platform" "Architecture for e-commerce system" {
|
|
743
|
+
|
|
744
|
+
model {
|
|
745
|
+
customer = person "Customer" "A user of the e-commerce platform"
|
|
746
|
+
admin = person "Administrator" "Manages products and orders"
|
|
747
|
+
|
|
748
|
+
ecommerce = softwareSystem "E-Commerce Platform" "Allows customers to browse and purchase products" {
|
|
749
|
+
webapp = container "Web Application" "Delivers content and UI" "React" {
|
|
750
|
+
tags "Web Browser"
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
apiGateway = container "API Gateway" "Routes requests to services" "Kong" {
|
|
754
|
+
tags "API Gateway"
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
userService = container "User Service" "Manages user accounts" "Node.js" {
|
|
758
|
+
tags "Microservice"
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
productService = container "Product Service" "Manages product catalog" "Node.js" {
|
|
762
|
+
tags "Microservice"
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
orderService = container "Order Service" "Processes orders" "Node.js" {
|
|
766
|
+
tags "Microservice"
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
userDb = container "User Database" "Stores user data" "PostgreSQL" {
|
|
770
|
+
tags "Database"
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
productDb = container "Product Database" "Stores product data" "PostgreSQL" {
|
|
774
|
+
tags "Database"
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
orderDb = container "Order Database" "Stores order data" "PostgreSQL" {
|
|
778
|
+
tags "Database"
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
eventBus = container "Event Bus" "Asynchronous messaging" "Kafka" {
|
|
782
|
+
tags "Message Bus"
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
paymentGateway = softwareSystem "Payment Gateway" "Processes payments" {
|
|
787
|
+
tags "External System"
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
# Relationships
|
|
791
|
+
customer -> webapp "Uses"
|
|
792
|
+
admin -> webapp "Manages via"
|
|
793
|
+
|
|
794
|
+
webapp -> apiGateway "Makes API calls to" "HTTPS"
|
|
795
|
+
|
|
796
|
+
apiGateway -> userService "Routes to"
|
|
797
|
+
apiGateway -> productService "Routes to"
|
|
798
|
+
apiGateway -> orderService "Routes to"
|
|
799
|
+
|
|
800
|
+
userService -> userDb "Reads/writes"
|
|
801
|
+
productService -> productDb "Reads/writes"
|
|
802
|
+
orderService -> orderDb "Reads/writes"
|
|
803
|
+
|
|
804
|
+
userService -> eventBus "Publishes events to"
|
|
805
|
+
productService -> eventBus "Publishes events to"
|
|
806
|
+
orderService -> eventBus "Publishes/subscribes to"
|
|
807
|
+
|
|
808
|
+
orderService -> paymentGateway "Processes payments via" "HTTPS"
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
views {
|
|
812
|
+
systemContext ecommerce "SystemContext" {
|
|
813
|
+
include *
|
|
814
|
+
autoLayout
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
container ecommerce "Containers" {
|
|
818
|
+
include *
|
|
819
|
+
autoLayout
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
component orderService "OrderServiceComponents" {
|
|
823
|
+
include *
|
|
824
|
+
autoLayout
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
styles {
|
|
828
|
+
element "Person" {
|
|
829
|
+
shape person
|
|
830
|
+
background #08427b
|
|
831
|
+
color #ffffff
|
|
832
|
+
}
|
|
833
|
+
element "Microservice" {
|
|
834
|
+
shape hexagon
|
|
835
|
+
background #1168bd
|
|
836
|
+
color #ffffff
|
|
837
|
+
}
|
|
838
|
+
element "Database" {
|
|
839
|
+
shape cylinder
|
|
840
|
+
background #438dd5
|
|
841
|
+
color #ffffff
|
|
842
|
+
}
|
|
843
|
+
element "External System" {
|
|
844
|
+
background #999999
|
|
845
|
+
color #ffffff
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
---
|
|
853
|
+
|
|
854
|
+
## Understanding
|
|
855
|
+
|
|
856
|
+
### When to Use TOGAF
|
|
857
|
+
|
|
858
|
+
**Use TOGAF When:**
|
|
859
|
+
- Large enterprise with multiple systems
|
|
860
|
+
- Regulatory compliance requirements
|
|
861
|
+
- Long-term strategic planning (3-5 years)
|
|
862
|
+
- Need for stakeholder alignment
|
|
863
|
+
- Complex organizational structure
|
|
864
|
+
|
|
865
|
+
**Don't Use TOGAF When:**
|
|
866
|
+
- Small startup or single product
|
|
867
|
+
- Need for rapid iteration
|
|
868
|
+
- Simple system architecture
|
|
869
|
+
- Limited resources for governance
|
|
870
|
+
|
|
871
|
+
### When to Apply DDD
|
|
872
|
+
|
|
873
|
+
**Use DDD When:**
|
|
874
|
+
- Complex business domain
|
|
875
|
+
- Domain experts available
|
|
876
|
+
- Long-lived system
|
|
877
|
+
- Core business differentiator
|
|
878
|
+
- Frequent domain changes
|
|
879
|
+
|
|
880
|
+
**Don't Use DDD When:**
|
|
881
|
+
- Simple CRUD application
|
|
882
|
+
- No domain experts
|
|
883
|
+
- Short-lived project
|
|
884
|
+
- Generic problem (use off-the-shelf)
|
|
885
|
+
|
|
886
|
+
### CI/CD Best Practices
|
|
887
|
+
|
|
888
|
+
**Architecture Automation**
|
|
889
|
+
- Version control everything (code, infrastructure, configuration)
|
|
890
|
+
- Automate testing at all levels
|
|
891
|
+
- Implement architecture fitness functions
|
|
892
|
+
- Use feature flags for gradual rollouts
|
|
893
|
+
- Monitor and alert on architectural violations
|
|
894
|
+
|
|
895
|
+
**Documentation Automation**
|
|
896
|
+
- Generate diagrams from code
|
|
897
|
+
- Keep ADRs with code
|
|
898
|
+
- Automate documentation updates
|
|
899
|
+
- Use living documentation
|
|
900
|
+
|
|
901
|
+
### Common Pitfalls
|
|
902
|
+
|
|
903
|
+
**TOGAF Pitfalls**
|
|
904
|
+
- Over-documentation (analysis paralysis)
|
|
905
|
+
- Ignoring agile principles
|
|
906
|
+
- Treating it as waterfall
|
|
907
|
+
- Not adapting to organization
|
|
908
|
+
|
|
909
|
+
**DDD Pitfalls**
|
|
910
|
+
- Applying tactical patterns without strategic design
|
|
911
|
+
- Ignoring bounded contexts
|
|
912
|
+
- Anemic domain models
|
|
913
|
+
- Over-engineering simple domains
|
|
914
|
+
|
|
915
|
+
**CI/CD Pitfalls**
|
|
916
|
+
- Manual steps in pipeline
|
|
917
|
+
- Insufficient testing
|
|
918
|
+
- No rollback strategy
|
|
919
|
+
- Ignoring security in pipeline
|
|
920
|
+
|
|
921
|
+
---
|
|
922
|
+
|
|
923
|
+
## References
|
|
924
|
+
|
|
925
|
+
### TOGAF
|
|
926
|
+
- **Official**: The Open Group Architecture Framework (TOGAF) Version 9.2
|
|
927
|
+
- **Books**:
|
|
928
|
+
- "TOGAF 9 Foundation Study Guide" by Rachel Harrison
|
|
929
|
+
- "The TOGAF Standard, Version 9.2" by The Open Group
|
|
930
|
+
|
|
931
|
+
### Domain-Driven Design
|
|
932
|
+
- **Books**:
|
|
933
|
+
- "Domain-Driven Design" by Eric Evans (Blue Book)
|
|
934
|
+
- "Implementing Domain-Driven Design" by Vaughn Vernon (Red Book)
|
|
935
|
+
- "Domain-Driven Design Distilled" by Vaughn Vernon
|
|
936
|
+
- **Resources**:
|
|
937
|
+
- DDD Community: https://dddcommunity.org/
|
|
938
|
+
- Context Mapping: https://github.com/ddd-crew/context-mapping
|
|
939
|
+
|
|
940
|
+
### CI/CD
|
|
941
|
+
- **Books**:
|
|
942
|
+
- "Continuous Delivery" by Jez Humble and David Farley
|
|
943
|
+
- "The DevOps Handbook" by Gene Kim et al.
|
|
944
|
+
- **Tools**:
|
|
945
|
+
- Terraform: https://www.terraform.io/
|
|
946
|
+
- GitHub Actions: https://github.com/features/actions
|
|
947
|
+
- ArchUnit: https://www.archunit.org/
|
|
948
|
+
|
|
949
|
+
### Architecture Documentation
|
|
950
|
+
- **C4 Model**: https://c4model.com/
|
|
951
|
+
- **Structurizr**: https://structurizr.com/
|
|
952
|
+
- **ADR**: https://adr.github.io/
|
|
953
|
+
- **PlantUML**: https://plantuml.com/
|
|
954
|
+
|
|
955
|
+
### Related Architecture Documents
|
|
956
|
+
- [Fundamentals](./fundamentals.md) - Core architectural elements
|
|
957
|
+
- [Microservices Architecture](./microservices-architecture.md) - Microservices patterns
|
|
958
|
+
- [Quality Attributes](./quality-attributes.md) - Non-functional requirements
|
|
959
|
+
- [Security Architecture](./security-architecture.md) - Security patterns
|
|
960
|
+
|
|
961
|
+
|