1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Book : Aggregate { //DOMAIN
  private List<AuthorData> _authors;

  private Book(IEvent @event) { ApplyEvent(@event); }

  public static Book NewBook(string isbn, params Author[] authors) {
    return new Book(new NewBookAdded(isbn, authors.Select(x => new BookAuthorData(x.Name, x.Identifier)));   
  }

  private void Apply(NewBookAdded @event) {
    _authors = new List<AuthorData>(@event.Authors.Select(x => new AuthorData { Name = x.Name, Identifier = x.Identifier}));
  }
}

internal class AuthorData { //DOMAIN
  public string Name { get; set; }
  public string Identifier { get; set; }
}

public class BookAuthorData { //EVENTS
  public string Name { get; private set; }
  public string Identifier { get; private set; }
  public BookAuthorData(string name, string identifier) { Name = name; Identifier = identifier; }
}

public class NewBookAdded {
  public string ISBN { get; private set; }
  public BookAuthorData[] Authors { get; private set; }
  public NewBookAdded(string isbn, IEnumerable<BookAuthorData> authors) { ISBN = isbn; Authors = authors.ToArray(); }
}