Design Patterns in VB.NET
Patterns (with VB idioms) Factory Method, Abstract Factory, Builder (fluent Return Me), Singleton (Lazy(Of T) or a DI singleton), Prototype (MemberwiseClone)
Adapter, Decorator (wrap an interface implementation), Facade, Proxy (lazy/remote/caching), Composite (tree of IComponent), Bridge, Flyweight
Strategy (Func(Of) or interfaces), Observer (events, IObservable), Command (ICommand, undo stacks), Template Method (MustOverride steps), State (state classes), Chain of Responsibility (middleware/handlers), Mediator, Iterator (Iterator Function), Visitor, Memento, Specification
Repository, Unit of Work, Service Layer, DTO, Mapper (AutoMapper / Mapster or manual), Dependency Injection, Options, Result type, CQRS, Domain Events, Outbox
' Decorator: add caching to a repository without changing it
Public Class CachedProductRepository
Implements IProductRepository
Private ReadOnly _inner As IProductRepository
Private ReadOnly _cache As Microsoft.Extensions.Caching.Memory.IMemoryCache
Public Sub New(inner As IProductRepository, cache As Microsoft.Extensions.Caching.Memory.IMemoryCache)
_inner = inner : _cache = cache
End Sub
Public Function GetByIdAsync(id As Integer) As Task(Of Product) Implements IProductRepository.GetByIdAsync
Return _cache.GetOrCreateAsync($"product:{id}",
Function(entry)
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
Return _inner.GetByIdAsync(id)
End Function)
End Function
End Class
' State pattern
Public MustInherit Class OrderState
Public MustOverride Function [Next](order As Order) As OrderState
Public Overridable Function CanCancel() As Boolean
Return False
End Function
End Class
Public Class PendingState
Inherits OrderState
Public Overrides Function [Next](order As Order) As OrderState
Return New ShippedState()
End Function
Public
…