Skip to content

Commit 322eebd

Browse files
author
RedIsGaming
committed
update: Week2/3 explaination added to notes.
1 parent e58a605 commit 322eebd

File tree

7 files changed

+190
-12
lines changed

7 files changed

+190
-12
lines changed

notes_wpfw/.obsidian/workspace.json

+9-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"state": {
1414
"type": "markdown",
1515
"state": {
16-
"file": "csharp/wpfw_deel1/week4/orm_en_linq.md",
16+
"file": "csharp/wpfw_deel1/week1/csharp.md",
1717
"mode": "source",
1818
"source": false
1919
}
@@ -85,7 +85,7 @@
8585
"state": {
8686
"type": "backlink",
8787
"state": {
88-
"file": "csharp/wpfw_deel1/week4/orm_en_linq.md",
88+
"file": "csharp/wpfw_deel1/week1/csharp.md",
8989
"collapseAll": false,
9090
"extraContext": false,
9191
"sortOrder": "alphabetical",
@@ -102,7 +102,7 @@
102102
"state": {
103103
"type": "outgoing-link",
104104
"state": {
105-
"file": "csharp/wpfw_deel1/week4/orm_en_linq.md",
105+
"file": "csharp/wpfw_deel1/week1/csharp.md",
106106
"linksCollapsed": false,
107107
"unlinkedCollapsed": true
108108
}
@@ -125,7 +125,7 @@
125125
"state": {
126126
"type": "outline",
127127
"state": {
128-
"file": "csharp/wpfw_deel1/week4/orm_en_linq.md"
128+
"file": "csharp/wpfw_deel1/week1/csharp.md"
129129
}
130130
}
131131
}
@@ -148,13 +148,15 @@
148148
},
149149
"active": "9f997fb097ca76a3",
150150
"lastOpenFiles": [
151-
"csharp/wpfw_deel1/week3/async_(en_functioneel)_programmeren.md",
152151
"csharp/wpfw_deel1/week2/testen_mocks.md",
152+
"csharp/wpfw_deel1/week3/async_(en_functioneel)_programmeren.md",
153153
"csharp/wpfw_deel1/week4/orm_en_linq.md",
154-
"csharp/wpfw_deel1/week1/csharp.md",
155154
"csharp/wpfw_deel1/week5/internet.md",
156-
"csharp/wpfw_deel1/week6/api.md",
157155
"csharp/wpfw_deel1/week7/specflow.md",
156+
"csharp/wpfw_deel1/week6/api.md",
157+
"Pasted image 20231210153422.png",
158+
"mock_result.png",
159+
"csharp/wpfw_deel1/week1/csharp.md",
158160
"Pasted image 20231209171503.png",
159161
"Pasted image 20231209171224.png",
160162
"Pasted image 20231209170921.png",

notes_wpfw/csharp/wpfw_deel1/week2/testen_mocks.md

+16-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opm
88
99
## Create Mock
1010

11+
Wat is een Mock in #unit-testing? Een Mock is ervoor zorgen dat je niet afhankelijk bent van andere classen en objecten. Je test niet productie #code en dus niet de implementatie. Wat je test is de nabootsing van de methods om bepaald gedrag terug te krijgen. Hieronder zie je een Mock in actie. Je moeten weten hoe je een Mock moet schrijven. Dus niet het Framework: Moq.
12+
1113
```C#
1214
using System.Numerics;
1315
namespace TestProject1;
@@ -44,7 +46,13 @@ where T : INumber<T>
4446

4547
```
4648

47-
Hier komt nog uitleg.
49+
We maken een #interface ICalculator met een #generics met type #T. Daaraan geven we twee methods: Add en Substract. Die hebben beide 2 arguments met #T a en #T b. Vervolgens maken we een MockCalculator die de #interface implementeert. We geven een #dynamic c die we vullen met waarde a. Vervolgens returnen we die c en b. Hierboven zie je hoe dat gebeurd.
50+
51+
Nadat we de Mock hebben, maken we een #class / #struct met de daadwerkelijke implementatie. We maken een Calculator en in de #Primary-Constructor geven we de #interface mee met iCalculator argument. Dit is #Dependency-Injection . Je implementeert niet de #interface, maar geeft dit als waarde mee.
52+
53+
De MockCalculator die de #interface implementeert is #Dependency-Inversion. Terug naar Calculator. De argument die meegegeven is een #interface-Injection en de #Property een #setter-Injection. Die is #readonly en #private. We willen niet de Mock implementatie aanroepen. Je ziet ook een #generics constraint met where #T : #INumber #T.
54+
55+
Nu is het alleen mogelijk om arithmatic getallen eraan mee te geven. Als laatste hebben we de twee methods die we in de test gaan gebruiken. De implementatie lijkt bijna hetzelfde als de #interface , maar we kunnen de namen van die method voor de => aanpassen. Voor het gemak laten we het zoals het is. #generics types zijn optioneel. Het is geen requirement voor een Mock.
4856

4957
## Test Mock
5058

@@ -84,4 +92,10 @@ public class TestCalculator
8492

8593
```
8694

87-
Hier komt ook wat uitleg later.
95+
Laten we nu naar de tests gaan. De best practice voor een test is maximaal 1 #assert per method. Hoe je je methods en #class noemt is aan jou, maar houdt het simpel. We hebben een TestCalculator #class en twee methods. Beide zijn het van het type #void en ze heten: TestAdd en TestSubstract. Je kunt met data annotaties #Fact of #Theory je test maken.
96+
97+
We maken een nieuw object van MockCalculator met het type #u32 / #uint. Daarna maken we ook een nieuw object aan van Calculator met hetzelfde type. Daar gooien we de mock in. Hierbij wordt #Dependency-Injection toegepast. Het is slim om de test op te delen met de 3 AAA's. Arrange, Act en Assert. In Arrange maak je nieuwe objecten aan. In de Act set je de waardes.
98+
99+
In de Assert test je hetgeen dat je wilt testen. Er zijn verschillende methods die je kan gebruiken om te testen, maar we zullen dat niet behandelen hier. Speel daar zelf mee. Equal en True zul je het meest gebruiken. We roepen in de Act de method aan die we willen gebruiken. Add of Substract. Hier geven we de waardes mee. Vervolgens testen we die. De test slaagt, congrats!
100+
101+
![[mock_result.png]]

notes_wpfw/csharp/wpfw_deel1/week3/async_(en_functioneel)_programmeren.md

+157-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
> Note: Functioneel programmeren met #delegate en Func<> zullen niet worden beschreven.
2+
13
# Intro
24

35
Hier vind je de onderdelen van lesweek3. Alles wat je moet weten van deze week wat ook in het #toetsmatrijs staat beschreven. Als er een stukje staat met dat er nog later uitleg komt, dan vul ik dat later in. Er is geen garantie dat #code perfect is. Daar gaat het niet om. Als je de #code shit vindt, dan snap je niet het punt, want het gaat puur om het concept.
@@ -6,14 +8,20 @@ Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opm
68

79
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
810
9-
## Async programming with Await and Task
11+
## Async programming with #await and #Task
12+
13+
### Async #class Example
14+
15+
We hebben hier een DownloadSource #class met 2 methods. Ze lijken beide op elkaar en violaten meerdere #OOP regels, maar das niet belangrijk hier. We maken een DownloadAsync method met het type #Task. Let daarbij op dat async #void geen goeie manier is om een method te maken. Aangezien de #Task een #collection is van asynchroon programmeren.
16+
17+
Om asynchroon te kunnen programmeren, gebruiken we het keyword: async. Bij synchroon programmeren wordt alles tegelijk uitgevoerd. Bij Asynchroon heb je verschillende #threads die anders om gaan met bepaalde taken. We printen de eerste #Console regel uit. Daarna voeren we de regel uit: #await #Task .Delay(3000). Hierdoor wacht het programma 3 seconden lang.
1018

1119
```C#
1220
namespace ConsoleApp3;
1321

1422
public class DownloadSource
1523
{
16-
private const int TOTAL = 50;
24+
private const int TOTAL = 50; //const to be used for this program.
1725
1826
public async Task DownloadAsync()
1927
{
@@ -67,7 +75,41 @@ public class DownloadSource
6775

6876
```
6977

70-
Hier zal later wat uitgelegd worden. Alhoewel beide methodes bijna precies op elkaar lijken, gaat het hier niet om of de code perfect is en aan alle principes van OOP voldoet, het gaat om de concepten. En deze keer is dat voor week3 async/await/Task.
78+
We zijn niet verplicht om #await ervoor te zetten, maar de waarschuwing geeft het volgende aan: <span style=color:#FFA500>Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.</span> Daarna maken we een nieuwe #List aan met een #List Initializer met de waarde: "Downloading from Source".
79+
80+
We maken ook een variabele aan met type #var waarin een #Enumerable Range tussen de 0-50 zit. Die wordt 50x aangeroepen in de #foreach loop. Vervolgens maken we een result #var aan met een #Task .Run. Hierin voeren we de code welke we willen runnen. We gebruiken #linq met de #Select #OrderBy en de #ToList. In de #Select maken we een anonieme type.
81+
82+
Deze bevat de #key-value variant en die geven we mee aan de #Properties . Om #side-effects te voorkomen zetten we de #foreach #linq apart neer. Daarin zetten we de taken uit de #List neer met het nummer 1 tot en met 50. Een index begint met 0, dus tellen we er 1 bij op. Als laatste roepen we #Task.Delay(150).Wait() aan.
83+
84+
Als je de .Wait() weghaald, dan zullen alle elementen tegelijk op het scherm komen, desondanks dat de #Task .Run awaited wordt. De SourceAsync method heeft dezelfde opbouw, dus dat is eigenlijk precies hetzelfde, alleen zijn er wat namen anders en voegen we een #Random toe met #Next. Daarbij krijg je een random getal tussen 1-50.
85+
86+
>Dit heb ik gedaan om het downloaden te simuleren en de processen komen 2x zo snel. Daarna stopt het programma.
87+
88+
### #Task #List All
89+
90+
> Hier vind je de volledige lijst van de #Task methods die er zijn. Er zijn er in totaal 15.
91+
92+
```C#
93+
CompletedTask //Task
94+
CurrentId //int?
95+
Factory //TaskFactory
96+
Delay //Task
97+
FromCanceled<> //Task<TResult>
98+
FromCanceled //Task
99+
FromException //Task
100+
FromException<> //Task<TResult>
101+
FromResult //Task<TResult>
102+
Run //Task
103+
WaitAll //void
104+
WaitAny //int
105+
WhenAll //Task
106+
WhenAny //Task<Task>
107+
Yield //YieldAwaitable
108+
```
109+
110+
> Je hoeft niet alles uit je hoofd te kennen. Waarschijnlijk zul je zelf maar maximaal 3 nodig hebben. Delay, Run en CompletedTask gebruik je het meest. Maar FromResult kan handig zijn als je in een synchroon programma werkt, waarin je niet met async en #await bezig bent.
111+
112+
### Running Main Program
71113

72114
```C#
73115
namespace ConsoleApp3;
@@ -84,3 +126,115 @@ public class Program
84126
}
85127

86128
```
129+
130+
> Hier roepen we de objecten aan. Nadat de downloads klaar zijn, zie je: Awaiting processes... verschijnen. Dit heeft een vertraging van 1,5 seconden.
131+
132+
### Result Async Program
133+
134+
```C#
135+
Awaiting downloads...
136+
Task: Downloading from Source 1...
137+
Task: Downloading from Source 2...
138+
Task: Downloading from Source 3...
139+
Task: Downloading from Source 4...
140+
Task: Downloading from Source 5...
141+
Task: Downloading from Source 6...
142+
Task: Downloading from Source 7...
143+
Task: Downloading from Source 8...
144+
Task: Downloading from Source 9...
145+
Task: Downloading from Source 10...
146+
Task: Downloading from Source 11...
147+
Task: Downloading from Source 12...
148+
Task: Downloading from Source 13...
149+
Task: Downloading from Source 14...
150+
Task: Downloading from Source 15...
151+
Task: Downloading from Source 16...
152+
Task: Downloading from Source 17...
153+
Task: Downloading from Source 18...
154+
Task: Downloading from Source 19...
155+
Task: Downloading from Source 20...
156+
Task: Downloading from Source 21...
157+
Task: Downloading from Source 22...
158+
Task: Downloading from Source 23...
159+
Task: Downloading from Source 24...
160+
Task: Downloading from Source 25...
161+
Task: Downloading from Source 26...
162+
Task: Downloading from Source 27...
163+
Task: Downloading from Source 28...
164+
Task: Downloading from Source 29...
165+
Task: Downloading from Source 30...
166+
Task: Downloading from Source 31...
167+
Task: Downloading from Source 32...
168+
Task: Downloading from Source 33...
169+
Task: Downloading from Source 34...
170+
Task: Downloading from Source 35...
171+
Task: Downloading from Source 36...
172+
Task: Downloading from Source 37...
173+
Task: Downloading from Source 38...
174+
Task: Downloading from Source 39...
175+
Task: Downloading from Source 40...
176+
Task: Downloading from Source 41...
177+
Task: Downloading from Source 42...
178+
Task: Downloading from Source 43...
179+
Task: Downloading from Source 44...
180+
Task: Downloading from Source 45...
181+
Task: Downloading from Source 46...
182+
Task: Downloading from Source 47...
183+
Task: Downloading from Source 48...
184+
Task: Downloading from Source 49...
185+
Task: Downloading from Source 50...
186+
Awaiting processes...
187+
Process: Processing data from Source 1 27MB / 27MB...
188+
Process: Processing data from Source 2 41MB / 41MB...
189+
Process: Processing data from Source 3 18MB / 18MB...
190+
Process: Processing data from Source 4 37MB / 37MB...
191+
Process: Processing data from Source 5 15MB / 15MB...
192+
Process: Processing data from Source 6 1MB / 1MB...
193+
Process: Processing data from Source 7 7MB / 7MB...
194+
Process: Processing data from Source 8 29MB / 29MB...
195+
Process: Processing data from Source 9 3MB / 3MB...
196+
Process: Processing data from Source 10 38MB / 38MB...
197+
Process: Processing data from Source 11 26MB / 26MB...
198+
Process: Processing data from Source 12 8MB / 8MB...
199+
Process: Processing data from Source 13 8MB / 8MB...
200+
Process: Processing data from Source 14 37MB / 37MB...
201+
Process: Processing data from Source 15 46MB / 46MB...
202+
Process: Processing data from Source 16 35MB / 35MB...
203+
Process: Processing data from Source 17 15MB / 15MB...
204+
Process: Processing data from Source 18 7MB / 7MB...
205+
Process: Processing data from Source 19 45MB / 45MB...
206+
Process: Processing data from Source 20 47MB / 47MB...
207+
Process: Processing data from Source 21 17MB / 17MB...
208+
Process: Processing data from Source 22 7MB / 7MB...
209+
Process: Processing data from Source 23 16MB / 16MB...
210+
Process: Processing data from Source 24 42MB / 42MB...
211+
Process: Processing data from Source 25 2MB / 2MB...
212+
Process: Processing data from Source 26 5MB / 5MB...
213+
Process: Processing data from Source 27 12MB / 12MB...
214+
Process: Processing data from Source 28 8MB / 8MB...
215+
Process: Processing data from Source 29 9MB / 9MB...
216+
Process: Processing data from Source 30 17MB / 17MB...
217+
Process: Processing data from Source 31 44MB / 44MB...
218+
Process: Processing data from Source 32 30MB / 30MB...
219+
Process: Processing data from Source 33 31MB / 31MB...
220+
Process: Processing data from Source 34 14MB / 14MB...
221+
Process: Processing data from Source 35 23MB / 23MB...
222+
Process: Processing data from Source 36 24MB / 24MB...
223+
Process: Processing data from Source 37 38MB / 38MB...
224+
Process: Processing data from Source 38 10MB / 10MB...
225+
Process: Processing data from Source 39 22MB / 22MB...
226+
Process: Processing data from Source 40 32MB / 32MB...
227+
Process: Processing data from Source 41 15MB / 15MB...
228+
Process: Processing data from Source 42 2MB / 2MB...
229+
Process: Processing data from Source 43 20MB / 20MB...
230+
Process: Processing data from Source 44 31MB / 31MB...
231+
Process: Processing data from Source 45 12MB / 12MB...
232+
Process: Processing data from Source 46 27MB / 27MB...
233+
Process: Processing data from Source 47 15MB / 15MB...
234+
Process: Processing data from Source 48 46MB / 46MB...
235+
Process: Processing data from Source 49 30MB / 30MB...
236+
Process: Processing data from Source 50 18MB / 18MB...
237+
All downloads and processes completed!!!
238+
239+
Process finished with exit code 0.
240+
```

notes_wpfw/csharp/wpfw_deel1/week5/internet.md

+2
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ Hier vind je de onderdelen van lesweek5. Alles wat je moet weten van deze week w
55
Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opmerkingen kun je me altijden dmen op #Discord: redisgaming of #Whatsapp. Deze intro zal ook in de andere documenten als intro staan, dus al je dit hebt gelezen, kun je de intro H1 skippen. Voor de rest ben ik meer gefocust op voorbeelden dan op het uitleggen. Houdt daar rekening mee. Good luck :)
66

77
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
8+
9+
## <span style="color:#FF0000">Waarschijnlijk kom ik hier niet aan toe.</span>

notes_wpfw/csharp/wpfw_deel1/week6/api.md

+2
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ Hier vind je de onderdelen van lesweek6. Alles wat je moet weten van deze week w
55
Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opmerkingen kun je me altijden dmen op #Discord: redisgaming of #Whatsapp. Deze intro zal ook in de andere documenten als intro staan, dus al je dit hebt gelezen, kun je de intro H1 skippen. Voor de rest ben ik meer gefocust op voorbeelden dan op het uitleggen. Houdt daar rekening mee. Good luck :)
66

77
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
8+
9+
## <span style="color:#FF0000">Waarschijnlijk kom ik hier niet aan toe.</span>

notes_wpfw/csharp/wpfw_deel1/week7/specflow.md

+4
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ Hier vind je de onderdelen van lesweek7. Alles wat je moet weten van deze week w
55
Als je de concepten begrijpt, dan ben je al een stap vooruit. Voor vragen of opmerkingen kun je me altijden dmen op #Discord: redisgaming of #Whatsapp. Deze intro zal ook in de andere documenten als intro staan, dus al je dit hebt gelezen, kun je de intro H1 skippen. Voor de rest ben ik meer gefocust op voorbeelden dan op het uitleggen. Houdt daar rekening mee. Good luck :)
66

77
> Note: De uitleg is in het Nederlands. De code en H2/H3 in het Engels.
8+
9+
## Specflow Feature Format
10+
11+
Wordt nog beschreven later.

notes_wpfw/mock_result.png

212 KB
Loading

0 commit comments

Comments
 (0)