Understanding Feature
Overview
Features in FlexBase are organized around CRUD operations (Create, Read, Update, Delete) with two distinct patterns: Command-based operations for data modification and Query-based operations for data retrieval.
Feature Categories
1. Command-Based Features (Data Modification)
These features use Controllers and Handlers to modify data:
Insert Features - Create New Data
Purpose: Add new entities to the system
Flow:
Controller → Service → Command Handler → Domain Model → DatabaseExample:
AddOrder,CreateProduct,RegisterUserHTTP Method:
POST
Update Features - Modify Existing Data
Purpose: Update existing entities
Flow:
Controller → Service → Command Handler → Domain Model → DatabaseExample:
UpdateOrder,EditProduct,ModifyUserHTTP Method:
PUT
Delete Features - Remove Data
Purpose: Permanently remove entities
Flow:
Controller → Service → Command Handler → Domain Model → DatabaseExample:
DeleteOrder,RemoveProduct,DeactivateUserHTTP Method:
DELETE
Soft Delete Features - Mark as Deleted
Purpose: Mark entities as deleted without removing them
Flow:
Controller → Service → Command Handler → Domain Model → DatabaseExample:
SoftDeleteOrder,ArchiveProduct,DeactivateUserHTTP Method:
PUT
2. Query-Based Features (Data Retrieval)
These features use Controllers and Query projects to retrieve data:
GetById Features - Retrieve Single Entity by ID
Purpose: Get one specific entity by its unique identifier
Flow:
Controller → Service → Query Handler → Database → ResponseExample:
GetOrderById,GetProductById,GetUserByIdHTTP Method:
GET
GetSingle Features - Retrieve Single Entity by Criteria
Purpose: Get one entity based on specific criteria
Flow:
Controller → Service → Query Handler → Database → ResponseExample:
GetOrderByNumber,GetProductBySku,GetUserByEmailHTTP Method:
GET
GetList Features - Retrieve Multiple Entities
Purpose: Get a collection of entities
Flow:
Controller → Service → Query Handler → Database → ResponseExample:
GetOrders,GetProducts,GetUsersHTTP Method:
GET
GetPagedList Features - Retrieve Paginated Results
Purpose: Get entities with pagination support
Flow:
Controller → Service → Query Handler → Database → ResponseExample:
GetOrdersPaged,GetProductsPaged,GetUsersPagedHTTP Method:
GET
Control Flow Comparison
Command Flow (Insert/Update/Delete/SoftDelete)
API Request → Controller → Service → Command Handler → Domain Model → Database → Event Publishing → ResponseKey Characteristics:
Modifies data in the system
Uses Command Handlers for business logic
Publishes events after successful operations
Returns success/failure status
Eventual vs Non-Eventual Provision
Non-Eventual (Synchronous) Flow:
API Request → Controller → Service → Command Handler → Domain Model → Database → ResponseImmediate Response: User gets response after data is saved
Synchronous Processing: All operations complete before response
Use Case: Critical operations requiring immediate confirmation
Example: Payment processing, user registration
Eventual (Asynchronous) Flow:
API Request → Controller → Service → Command Handler → Domain Model → Database → Event Publishing → ResponseImmediate Acknowledgment: User gets acknowledgment, processing continues in background
Asynchronous Processing: Events trigger additional processing
Use Case: Operations that can be processed later
Example: Email notifications, report generation, data synchronization
Query Flow (GetById/GetSingle/GetList/GetPagedList)
API Request → Controller → Service → Query Handler → Database → ResponseKey Characteristics:
Reads data from the system
Uses Query Handlers for data retrieval
No events published (read-only operations)
Returns data or empty results
Implementation Pattern
Command Features
Controller:
YourEntityController_Add.cs,YourEntityController_Update.csHandler:
AddYourEntityHandler.cs,UpdateYourEntityHandler.csMessage:
AddYourEntityCommand.cs,UpdateYourEntityCommand.csDTO:
AddYourEntityDto.cs,UpdateYourEntityDto.cs
Query Features
Controller:
YourEntityController_GetById.cs,YourEntityController_GetList.csQuery:
GetYourEntityByIdQuery.cs,GetYourEntityListQuery.csDTO:
GetYourEntityDto.cs,YourEntityListDto.cs
Benefits of This Approach
Clear Separation: Commands modify data, Queries retrieve data
Scalability: Can scale read and write operations independently
Maintainability: Each feature has a single responsibility
Testability: Easy to test each component in isolation
Performance: Optimized for different operation types
Next Steps: Learn how to implement these features in your FlexBase applications by exploring the specific feature implementation guides! 🚀
Last updated