Tutorials Design Patterns in C#
Command Pattern — Complete Guide
Command Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.
On this page
Design Patterns in C# · Lesson 14 of 69
Command Pattern
GoF Core ✓ → Enterprise → Cloud & Craft
Enterprise · 2 — App patterns · ~6 min · Module 3: Behavioral Design Patterns
What is this?
Command wraps a request as an object with Execute (and often Undo) — decoupling invokers from receivers.
Why should you care?
ShopNest admin actions (export, refund) need queueing, auditing, and undo-friendly operations.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public interface ICommand { void Execute(); }
public sealed class ExportOrdersCommand : ICommand
{
private readonly string _day;
public ExportOrdersCommand(string day) => _day = day;
public void Execute() => Console.WriteLine($"export orders {_day}");
}
public sealed class CommandBus
{
public void Run(ICommand cmd) => cmd.Execute();
}
new CommandBus().Run(new ExportOrdersCommand("2026-07-19"));
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- ExportOrdersCommand carries parameters and work.
- The bus (invoker) only calls Execute.
- MediatR IRequest is a modern command-bus cousin.
Practice next
- Execute the export command.
- Add RefundCommand.
- Store commands in a list for a mini undo stack.
- Add Undo() that prints revert.
- Serialize command name to a queue message.
Remember
Request as object. Invoker ↔ receiver decoupled. Enables queue/audit/undo.
ShopNest admin command bus
UI posts ExportOrdersCommand to a worker.
Outcome: Same command runs from UI or scheduler.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!