Skip to content

Commit bf252b6

Browse files
Merge pull request #7 from viveksacademia4git/6-refactor-reduce-number-of-generics
6 refactor reduce number of generics
2 parents c60456d + 6e7bb8a commit bf252b6

File tree

35 files changed

+427
-286
lines changed

35 files changed

+427
-286
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Input.Responsibilities;
2+
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Orchestrators;
3+
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Orchestrators.Chains;
4+
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Orchestrators.Interfaces;
5+
using static GofPattern.Behavioral.ChainOfResponsibilityPattern.Enums.ChainOrchestratorHandleOptions;
6+
using static GofPattern.Behavioral.ChainOfResponsibilityPattern.Enums.ChainOrchestratorInvokeNextOptions;
7+
8+
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Input;
9+
10+
internal class ChainOfResponsibilityExample : AbstractExample
11+
{
12+
protected override void Steps()
13+
{
14+
var orchestrator = GetOrchestrator();
15+
16+
// Foo - Responsibility
17+
// Handle >>> Always
18+
// Invoke Next >>> Always
19+
orchestrator.Append(new ResponsibilityFoo(Logger), HandleAlways, InvokeNextAlways);
20+
21+
// Bar - Responsibility
22+
// Handle >>> WhenResponsible
23+
// Invoke Next >>> WhenNotResponsible
24+
orchestrator.Append(new ResponsibilityBar(Logger), HandleWhenResponsible, InvokeNextWhenNotResponsible);
25+
26+
// FooBar - Responsibility
27+
// Handle >>> WhenResponsible
28+
// Invoke Next >>> WhenNotResponsible
29+
orchestrator.Append(new ResponsibilityFooBar(Logger), HandleWhenResponsible, InvokeNextWhenNotResponsible);
30+
31+
SetBeforeHandling(orchestrator);
32+
SetAfterHandling(orchestrator);
33+
34+
Logger.LogInformation("------------- START Orchestrator -------------");
35+
Chain = orchestrator.Chain;
36+
37+
// Start with >>> Foo
38+
// HandleAlways >>>> Foo (Executes)
39+
// Invokes >> Bar
40+
// IsResponsible >>>>> Bar (Executes)
41+
// !!! Stops
42+
orchestrator.Execute("Bar");
43+
44+
Logger.LogInformation("------------- START Orchestrator -------------");
45+
Chain = orchestrator.Chain;
46+
47+
// Start with >>> Foo
48+
// HandleAlways >>>> Foo (Executes)
49+
// Invokes >> Bar
50+
// IsNotResponsible >> Bar (Not Executes)
51+
// Invokes >> FooBar
52+
// IsResponsible >>>>> FooBar (Executes)
53+
// !!! Stops
54+
orchestrator.Execute("FooBar");
55+
}
56+
57+
private void SetBeforeHandling(IResponsibilityChainActionBeforeHandling<string> orchestrator)
58+
{
59+
orchestrator.ActionBeforeHandling = () =>
60+
{
61+
Logger.LogInformation("---- Responsibility Chain ----");
62+
Logger.LogInformation(GetChainDetail());
63+
};
64+
65+
orchestrator.ActionInputBeforeHandling =
66+
input => Logger.LogInformation($"Executing before with input '{input}'.");
67+
}
68+
69+
private void SetAfterHandling(IResponsibilityChainActionAfterHandling<string> orchestrator)
70+
{
71+
orchestrator.ActionInputAfterHandling =
72+
input => Logger.LogInformation($"Executing before with input '{input}'.");
73+
74+
orchestrator.ActionAfterHandling = MoveToNext;
75+
}
76+
77+
private string GetChainDetail()
78+
{
79+
return
80+
$"Name({Chain!.Name}), HandleOption({Chain!.HandleOption}), InvokeNextHandlerOption({Chain!.InvokeNextHandlerOption}).";
81+
}
82+
83+
private void MoveToNext()
84+
{
85+
Chain = Chain?.Next;
86+
}
87+
88+
private ResponsibilityChain<string>? Chain { get; set; }
89+
90+
private static IResponsibilityChainOrchestrator<string> GetOrchestrator() =>
91+
new ResponsibilityChainOrchestrator<string>();
92+
}

GofConsoleApp/Examples/Behavioral/ChainOfResponsibility/Input/ChainOfResponsibilityExampleInput.cs

Lines changed: 0 additions & 41 deletions
This file was deleted.

GofConsoleApp/Examples/Behavioral/ChainOfResponsibility/Input/Orchestrators/ResponsibilityChainOrchestratorInput.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Input.Responsibilities;
55

6-
internal abstract class AbstractResponsibilityInput : IResponsibility<string>
6+
internal abstract class AbstractResponsibility : IResponsibility<string>
77
{
88
private readonly ICustomLogger log;
99
private readonly string name;
1010

11-
internal AbstractResponsibilityInput(ICustomLogger log, string name)
11+
protected AbstractResponsibility(ICustomLogger log, string name)
1212
{
1313
this.log = log;
1414
this.name = name;
@@ -18,6 +18,6 @@ internal AbstractResponsibilityInput(ICustomLogger log, string name)
1818

1919
public void Handle(string input)
2020
{
21-
log.LogInformation($"Handling '{input}' by '{name}'");
21+
log.LogInformation($"Handled '{input}' by '{name}'");
2222
}
2323
}

GofConsoleApp/Examples/Behavioral/ChainOfResponsibility/Input/Responsibilities/ResponsibilityBar.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Input.Responsibilities;
44

5-
internal class ResponsibilityBar : AbstractResponsibilityInput
5+
internal class ResponsibilityBar : AbstractResponsibility
66
{
7-
internal ResponsibilityBar(ICustomLogger log) : base(log, nameof(ResponsibilityBar)) { }
7+
public ResponsibilityBar(ICustomLogger log) : base(log, nameof(ResponsibilityBar)) { }
88

99
public override bool IsResponsible(string input)
1010
{

GofConsoleApp/Examples/Behavioral/ChainOfResponsibility/Input/Responsibilities/ResponsibilityFoo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Input.Responsibilities;
44

5-
internal class ResponsibilityFoo : AbstractResponsibilityInput
5+
internal class ResponsibilityFoo : AbstractResponsibility
66
{
7-
internal ResponsibilityFoo(ICustomLogger log) : base(log, nameof(ResponsibilityFoo)) { }
7+
public ResponsibilityFoo(ICustomLogger log) : base(log, nameof(ResponsibilityFoo)) { }
88

99
public override bool IsResponsible(string input)
1010
{

GofConsoleApp/Examples/Behavioral/ChainOfResponsibility/Input/Responsibilities/ResponsibilityFooBar.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Input.Responsibilities;
44

5-
internal class ResponsibilityFooBar : AbstractResponsibilityInput
5+
internal class ResponsibilityFooBar : AbstractResponsibility
66
{
7-
internal ResponsibilityFooBar(ICustomLogger log) : base(log, nameof(ResponsibilityFooBar)) { }
7+
public ResponsibilityFooBar(ICustomLogger log) : base(log, nameof(ResponsibilityFooBar)) { }
88

99
public override bool IsResponsible(string input)
1010
{
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.InputOutput.Responsibilities;
2+
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Orchestrators;
3+
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Orchestrators.Chains;
4+
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Orchestrators.Interfaces;
5+
6+
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.InputOutput;
7+
8+
internal class ChainOfResponsibilityExample : AbstractExample
9+
{
10+
protected override void Steps()
11+
{
12+
var orchestrator = GetOrchestrator();
13+
14+
orchestrator.Append(new ResponsibilityFoo());
15+
orchestrator.Append(new ResponsibilityBar());
16+
orchestrator.Append(new ResponsibilityFooBar());
17+
18+
SetBeforeHandling(orchestrator);
19+
20+
Logger.LogInformation("------------- START Orchestrator -------------");
21+
Chain = orchestrator.Chain;
22+
23+
// Start with >>> Foo
24+
// IsNotResponsible >> Foo (Not Executes)
25+
// Invokes >>> Bar
26+
// IsResponsible >>>>> Bar (Executes)
27+
var outputBar = orchestrator.Execute("Bar");
28+
Logger.LogInformation(outputBar);
29+
30+
31+
Logger.LogInformation("------------- START Orchestrator -------------");
32+
Chain = orchestrator.Chain;
33+
34+
// Start with >>> Foo
35+
// IsNotResponsible >> Foo (Not Executes)
36+
// Invokes >> Bar
37+
// IsNotResponsible >> Bar (Not Executes)
38+
// Invokes >> FooBar
39+
// IsResponsible >>>>> FooBar (Executes)
40+
var outputFooBar = orchestrator.Execute("FooBar");
41+
Logger.LogInformation(outputFooBar);
42+
}
43+
44+
private void SetBeforeHandling(IResponsibilityChainActionBeforeHandling<string> orchestrator)
45+
{
46+
// Adding Before Handling Tasks
47+
orchestrator.ActionBeforeHandling = () =>
48+
{
49+
Logger.LogInformation("---- Responsibility Chain ----");
50+
Logger.LogInformation(GetChainDetail());
51+
};
52+
53+
orchestrator.ActionInputBeforeHandling = input =>
54+
{
55+
Logger.LogInformation($"Executing before with input '{input}'.");
56+
MoveToNext();
57+
};
58+
}
59+
60+
private string GetChainDetail()
61+
{
62+
return $"Name({Chain!.Name}).";
63+
}
64+
65+
private void MoveToNext()
66+
{
67+
Chain = Chain?.Next;
68+
}
69+
70+
private static IResponsibilityChainOrchestrator<string, string> GetOrchestrator() =>
71+
new ResponsibilityChainOrchestrator<string, string>();
72+
73+
private ResponsibilityChain<string, string>? Chain { get; set; }
74+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
using GofPattern.Behavioral.ChainOfResponsibilityPattern.Responsibilities.Interfaces;
22

3-
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Output.Responsibilities;
3+
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.InputOutput.Responsibilities;
44

5-
internal abstract class AbstractResponsibilityInputOutput : IResponsibility<string, string>
5+
internal abstract class AbstractResponsibility : IResponsibility<string, string>
66
{
77
private readonly string name;
88

9-
internal AbstractResponsibilityInputOutput(string name)
9+
private protected AbstractResponsibility(string name)
1010
{
1111
this.name = name;
1212
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.Output.Responsibilities;
1+
namespace GofConsoleApp.Examples.Behavioral.ChainOfResponsibility.InputOutput.Responsibilities;
22

3-
internal class ResponsibilityBar : AbstractResponsibilityInputOutput
3+
internal class ResponsibilityBar : AbstractResponsibility
44
{
55
internal ResponsibilityBar() : base(nameof(ResponsibilityBar)) { }
66

0 commit comments

Comments
 (0)