|
Five minutes tutorial (VB)
Imagine that you would like to write application which main task would be handling some requests.
Chain.NET library delivers you all base classes that brings such functionality.
Below you can find few steps that allows to accomplish such task using Chain.NET library:
1. Each request handling logic can be implemented as particular command. To do it, simly implement
ICommand interface as below and place request handling logic in execute method.
Our first command will handle 'noise' request by making some noise:
Public Class MakeNoise
Inherits CommandBase
Implements ICommand
Public Function execute(ByVal context As NChain.IContext) As Boolean _
Implements NChain.ICommand.execute
''' check if this command should handle current request
If DirectCast(context, RequestContext).RequestID.Equals("noise") Then
DirectCast(context, RequestContext).RequestHandlingResult = _
"Aaaaaaaaaaa !!!! I'm making nooOOOOOoise !!!"
''' signalize that request is handled
Return PROCESSING_COMPLETED
Else
''' signalize that this command do not care about this request
Return CONTINUE_PROCESSING
End If
End Function
End Class
Our second command will handle 'sandwitch' request by making a sandwitch:
Public Class MakeSandwitch
Inherits CommandBase
Implements ICommand
Public Function execute(ByVal context As NChain.IContext) As Boolean _
Implements NChain.ICommand.execute
''' check if this command should handle current request
If DirectCast(context, RequestContext).RequestID.Equals("sandwitch") Then
DirectCast(context, RequestContext).RequestHandlingResult = _
"Yes Master. Your sandwitch is ready."
''' signalize that request is handled
Return PROCESSING_COMPLETED
Else
''' signalize that this command do not care about this request
Return CONTINUE_PROCESSING
End If
End Function
End Class
2. Gather your 'requests handlers' (commands) in one chain:
Public Class RequestsHandlersChain
Inherits ChainBase
Sub New()
Me.addCommand(New MakeNoise)
Me.addCommand(New MakeSandwitch)
End Sub
End Class
3. Extend standard context available via ContextBase class by adding some properties that will
give you type-safe access to context's values:
Public Class RequestContext
Inherits ContextBase
Public Const REQUEST_ID_KEY = "R_D"
Public Const REQUEST_HANDLING_RESULT_KEY = "R_H_R_K"
Public Property RequestID() As String
Get
Return CStr(Me(REQUEST_ID_KEY))
End Get
Set(ByVal Value As String)
Me(REQUEST_ID_KEY) = Value
End Set
End Property
Public Property RequestHandlingResult() As String
Get
Return CStr(Me(REQUEST_HANDLING_RESULT_KEY))
End Get
Set(ByVal Value As String)
Me(REQUEST_HANDLING_RESULT_KEY) = Value
End Set
End Property
End Class
4. To handle request simply set the request identifier in your context and process that context using your
'request handlers' chain. Pull execution result from context after processing finishes.
Module Module1
Dim oRequestHandlersChain As RequestsHandlersChain = _
New RequestsHandlersChain
Dim oRequestContext As RequestContext = _
New RequestContext
Sub Main()
Dim bRequestResult As Boolean
System.Console.WriteLine("Sending 'sandwitch' request...")
SendRequest("sandwitch")
System.Console.WriteLine("Sending 'noise' request...")
SendRequest("noise")
System.Console.WriteLine("Sending 'something' request...")
SendRequest("something")
System.Console.ReadLine()
End Sub
Private Sub SendRequest(ByVal sRequestId As String)
''' set request id in context
oRequestContext.RequestID = sRequestId
''' process the request by passing it to the chain
Dim bResult As Boolean = _
oRequestHandlersChain.execute(oRequestContext)
''' check processing result
If bResult.Equals(CommandBase.PROCESSING_COMPLETED) Then
''' pull the result from context
System.Console.WriteLine("Request handling result: " & _
oRequestContext.RequestHandlingResult)
Else
System.Console.WriteLine("This request cannot be handled.")
End If
End Sub
End Module
Execution output:
Sending 'sandwitch' request...
Request handling result: Yes Master. Your sandwitch is ready.
Sending 'noise' request...
Request handling result: Aaaaaaaaaaa !!!! I'm making nooOOOOOoise !!!
Sending 'something' request...
This request cannot be handled.
|
|