Builder Pattern API Reference
Complete API documentation for the Builder pattern in PatternKit.
Namespace
using PatternKit.Creational.Builder;
MutableBuilder<T>
Builder for configuring mutable objects with mutations and validations.
public sealed class MutableBuilder<T>
Type Parameters
| Parameter |
Description |
T |
The type of object to build |
Static Methods
| Method |
Returns |
Description |
New(Func<T> factory) |
MutableBuilder<T> |
Create builder with factory |
Instance Methods
| Method |
Returns |
Description |
With(Action<T> mutation) |
MutableBuilder<T> |
Append mutation |
Require(Func<T, string?> validator) |
MutableBuilder<T> |
Append validation |
Build() |
T |
Create and validate instance |
Exceptions
| Method |
Exception |
Condition |
Build |
InvalidOperationException |
First failing validation message |
Example
var person = MutableBuilder<Person>
.New(() => new Person())
.With(p => p.Name = "Ada")
.With(p => p.Age = 30)
.Require(p => p.Age >= 0 ? null : "Age must be positive")
.Build();
Composer<T>
Functional composition builder with transforms and validators.
public sealed class Composer<T>
Static Methods
| Method |
Returns |
Description |
Create() |
Builder |
Create a new builder |
Methods (after Build)
| Method |
Returns |
Description |
Apply(T input) |
T |
Transform and validate |
TryApply(T input, out T result, out string? error) |
bool |
Safe transform |
Builder Methods
| Method |
Returns |
Description |
Transform(Func<T, T> transform) |
Builder |
Add transformation |
Validate(Func<T, string?> validator) |
Builder |
Add validation |
Build() |
Composer<T> |
Build immutable composer |
Example
var normalizer = Composer<string>
.Create()
.Transform(s => s.Trim())
.Transform(s => s.ToLowerInvariant())
.Validate(s => s.Length > 0 ? null : "Empty string")
.Build();
var result = normalizer.Apply(" HELLO "); // "hello"
ChainBuilder<T>
Builder for processing chains.
public sealed class ChainBuilder<T>
Static Methods
| Method |
Returns |
Description |
Create() |
ChainBuilder<T> |
Create a new builder |
Instance Methods
| Method |
Returns |
Description |
Add(IHandler<T> handler) |
ChainBuilder<T> |
Add handler to chain |
Add(Action<T> handler) |
ChainBuilder<T> |
Add action handler |
Build() |
IChain<T> |
Build the chain |
Example
var chain = ChainBuilder<Request>
.Create()
.Add(new LoggingHandler())
.Add(new AuthHandler())
.Add(new ProcessingHandler())
.Build();
chain.Execute(request);
BranchBuilder<TIn, TOut>
First-match router builder.
public sealed class BranchBuilder<TIn, TOut>
Static Methods
| Method |
Returns |
Description |
Create() |
BranchBuilder<TIn, TOut> |
Create a new builder |
Instance Methods
| Method |
Returns |
Description |
When(Func<TIn, bool> predicate, Func<TIn, TOut> handler) |
BranchBuilder<TIn, TOut> |
Add conditional handler |
Default(Func<TIn, TOut> handler) |
BranchBuilder<TIn, TOut> |
Set default handler |
Build() |
IBranch<TIn, TOut> |
Build the router |
Example
var router = BranchBuilder<Request, Response>
.Create()
.When(r => r.Type == "GET", HandleGet)
.When(r => r.Type == "POST", HandlePost)
.Default(HandleUnknown)
.Build();
var response = router.Route(request);
Execution Order
MutableBuilder
sequenceDiagram
participant B as Builder
participant F as Factory
participant M as Mutations
participant V as Validators
B->>F: Call factory()
F-->>B: New instance
B->>M: Apply mutations in order
B->>V: Run validators in order
alt First validator fails
V-->>B: Error message
B-->>Caller: Throw InvalidOperationException
else All pass
B-->>Caller: Return instance
end
Composer
sequenceDiagram
participant C as Composer
participant T as Transforms
participant V as Validators
C->>T: Apply transforms in order
T-->>C: Transformed value
C->>V: Run validators in order
alt Validator fails
V-->>C: Error message
C-->>Caller: Throw or return false
else All pass
C-->>Caller: Return transformed value
end
Thread Safety
| Component |
Thread-Safe |
MutableBuilder |
No - single-threaded use |
Composer (built) |
Yes - immutable |
ChainBuilder |
No - single-threaded use |
BranchBuilder |
No - single-threaded use |
| Built chains/routers |
Depends on handlers |
Complete Example
using PatternKit.Creational.Builder;
// Test data builder pattern
public class UserBuilder
{
private readonly MutableBuilder<User> _builder;
public UserBuilder()
{
_builder = MutableBuilder<User>
.New(() => new User { Id = Guid.NewGuid(), CreatedAt = DateTime.UtcNow })
.Require(u => !string.IsNullOrEmpty(u.Email) ? null : "Email required")
.Require(u => u.Email?.Contains("@") == true ? null : "Invalid email");
}
public UserBuilder WithEmail(string email)
{
_builder.With(u => u.Email = email);
return this;
}
public UserBuilder WithName(string first, string last)
{
_builder.With(u => u.FirstName = first);
_builder.With(u => u.LastName = last);
return this;
}
public UserBuilder WithRole(string role)
{
_builder.With(u => u.Roles.Add(role));
return this;
}
public User Build() => _builder.Build();
}
// Usage
var admin = new UserBuilder()
.WithEmail("admin@example.com")
.WithName("Admin", "User")
.WithRole("Admin")
.WithRole("User")
.Build();
See Also