topics

Separation of Concerns

Forstå hvorfor kode bliver nemmere at arbejde med, når ansvar deles op i mindre dele.

1) Hvad betyder Separation of Concerns?

Separation of Concerns handler om at dele ansvar op i mindre dele. Hver klasse, komponent eller service bør have ét tydeligt ansvar.

Jo flere ting en klasse prøver at gøre på én gang, desto sværere bliver den at forstå, teste og vedligeholde.

2) Problemet uden SoC

Her håndterer samme klasse både brugerlogik, databaseadgang og mails.

Too Many Responsibilities

cs · 20 lines

cs
1
2public class UserService
3{
4 public void RegisterUser(User user)
5 {
6 using var connection =
7 new SqlConnection(connectionString);
8
9 connection.Insert(user);
10
11 var smtp = new SmtpClient();
12
13 smtp.Send(
14 "welcome@email.com",
15 user.Email,
16 "Welcome"
17 );
18 }
19}
20

3) Med SoC

Her har hver klasse ét ansvar. Det gør koden nemmere at ændre, fordi ændringer kun rammer den rigtige del.

Separated Responsibilities

cs · 37 lines

cs
1
2public class UserRepository
3{
4 public void Save(User user)
5 {
6 // Save user
7 }
8}
9
10public class EmailService
11{
12 public void SendWelcomeEmail(string email)
13 {
14 // Send mail
15 }
16}
17
18public class UserService
19{
20 private readonly UserRepository _repo;
21 private readonly EmailService _email;
22
23 public UserService(
24 UserRepository repo,
25 EmailService email)
26 {
27 _repo = repo;
28 _email = email;
29 }
30
31 public void RegisterUser(User user)
32 {
33 _repo.Save(user);
34 _email.SendWelcomeEmail(user.Email);
35 }
36}
37

4) Typisk API struktur

ASP.NET Core Structure

txt · 7 lines

txt
1
2Controllers/
3Services/
4Repositories/
5Models/
6Data/
7

5) Kort huskeregel

Hvis du kan beskrive en klasse med flere “og’er”, har den ofte for mange ansvarsområder.