Sample: Design Patterns & Advanced OOP
This sample is a comprehensive showcase of Class Diagram generation for sophisticated C# architectures. It demonstrates ProjGraph's support for design patterns, generic constraints, multi-level inheritance, and complex associations.
🏙️ Domain: Enterprise Order System
The sample implements several industry-standard design patterns:
- Creational:
OrderBuilder(Fluent Builder), Generic Repository, and Unit of Work. - Structural:
LoggingNotificationService(Decorator),CompositeValidator(Composite). - Behavioral:
IPricingStrategy(Strategy),IDomainEvent(Observer), andICommand(Command).
📊 Visual Snapshot
Below is a high-level view of the Order aggregate and its related patterns:
classDiagram
class IRepository~T~ {
<<interface>>
+Add(T entity)
+GetById(Guid id)
}
class OrderBuilder {
+WithCustomer(User user)
+WithItem(Product p, int qty)
+Build() Order
}
class IPricingStrategy {
<<interface>>
+CalculatePrice(Order order) decimal
}
class Order {
+Guid Id
+User Customer
+List~OrderItem~ Items
+OrderStatus Status
}
OrderBuilder ..> Order : built
Order "*" --> OrderItem : contains
Order "1" --> IPricingStrategy : uses
Tip
Use the --depth and --dependencies flags to explore this complex web of relationships. View the latest snapshot in design-patterns.mmd.
🚀 Quick Start
To generate a detailed diagram of the Order class including its dependencies and inheritance, run:
projgraph classdiagram ./samples/classdiagram/design-patterns/Domain/Order.cs --inheritance --dependencies --depth 2 --properties true --functions true > ./samples/classdiagram/design-patterns/design-patterns.mmd
Parameters explained
--inheritance: Shows the full hierarchy ofOrder(e.g.,AuditableEntity->Entity).--dependencies: Discovers related types likeUser,OrderItem, andIPricingStrategy.--properties true: Includes fields and properties in the diagram nodes.
🛠️ Build and Test
This is a multi-file enterprise-grade sample. Build it using:
dotnet build ./samples/classdiagram/design-patterns/
Analyze Specific Patterns
Run these from the repository root to see ProjGraph in action:
# Analyze the entire service layer
projgraph classdiagram ./samples/classdiagram/design-patterns/Services/OrderService.cs
# View the repository pattern implementation
projgraph classdiagram ./samples/classdiagram/design-patterns/Repositories/Repository.cs
# Strategy pattern visualization
projgraph classdiagram ./samples/classdiagram/design-patterns/Interfaces/IPaymentStrategy.cs
# Builder pattern
projgraph classdiagram ./samples/classdiagram/design-patterns/Builders/OrderBuilder.cs
# Repository pattern with generic constraints
projgraph classdiagram ./samples/classdiagram/design-patterns/Repositories/UserRepository.cs
Discovery Options
# Deep discovery (show all relationships up to depth 5)
projgraph classdiagram ./samples/classdiagram/design-patterns/Domain/Order.cs --depth 5
# Include only direct dependencies
projgraph classdiagram ./samples/classdiagram/design-patterns/Services/OrderService.cs --depth 1
Key Features Demonstrated
1. Complex Inheritance Chains
IEntity → Entity → AuditableEntity → User/Product/Order
2. Generic Constraints
IRepository<T> where T : class, IEntity
Repository<T> : IRepository<T> where T : Entity
3. Multiple Interfaces
OrderService : IOrderService, INotificationService
4. Composition & Aggregation
- Order composes OrderItems (strong ownership)
- ShoppingCart aggregates Products (weak reference)
5. Strategy Pattern
- Interchangeable payment methods
- Different pricing strategies
6. Builder Pattern
- Fluent API for complex object creation
Expected Output
The tool will generate a comprehensive Mermaid diagram showing:
- ✅ Multiple inheritance levels
- ✅ Generic type parameters with constraints
- ✅ Interface implementations
- ✅ Composition relationships (filled diamonds)
- ✅ Association relationships (lines)
- ✅ Dependency relationships (dashed lines)
- ✅ Cardinality markers (1, *, 0..1)
- ✅ Abstract classes marked with
<<abstract>> - ✅ Interface markers with
<<interface>> - ✅ Enum types with
<<enumeration>>
Running the Sample
Navigate to the sample directory:
cd samples\classdiagram\design-patternsRun the class diagram tool:
projgraph classdiagram Domain/Order.csThe output will be a complete Mermaid class diagram showing the entire domain model with all relationships.
Learning Outcomes
This sample demonstrates:
- ✅ How to model complex business domains
- ✅ Proper application of design patterns
- ✅ Clean architecture principles
- ✅ SOLID principles in action
- ✅ Advanced C# features (generics, constraints, etc.)
- ✅ How the class diagram tool handles real-world complexity