Розмітка зовнішніх ключів (шаблон проєктування)Розмітка зовнішніх ключів (англ. Foreign Key Mapping) — шаблон проєктування, який пропонує відображати асоціації між таблицями у вигляді посилань між об'єктами. ОписЗв'язки між таблицями в базі даних реалізовані за допомогою зовнішніх ключів. В той час, як об'єкти посилаються один на одного за допомогою вказівників. У реляційних базах даних зберігання пов'язаних вказівниками об'єктів може призвести до порушення правил нормалізації. Щоб зберегти граф об'єктів в сховище, необхідно перетворити ключ об'єкта за вказівником у зовнішній ключ. РеалізаціяНехай дані об'єкти, які представляють моделі таблиць у сховищі. class AlbumTable
{
public int Id { get; set; }
public string Title { get; set; }
public int ArtistId { get; set; }
}
class ArtistTable
{
public int Id { get; set; }
public string Name { get; set; }
}
Тоді у пам'яті таку структуру описують наступні об'єкти. class Album
{
public int Id { get; set; }
public string Title { get; set; }
public Artist Artist { get; set; }
}
class Artist
{
public int Id { get; set; }
public string Name { get; set; }
}
Тоді код для відображення об'єктів із пам'яті в структуру сховища та назад виглядатиме наступним чином. class Mapper
{
public Album GetAlbum(AlbumTable albumTable, Artist artistTable)
{
if (albumTable.ArtistId != artistTable.Id) throw new InvalidOperationException();
return new Album
{
Id = albumTable.Id,
Title = albumTable.Title,
Artist = new Artist
{
Id = artistTable.Id, // albumTable.ArtistId
Name = artistTable.Name,
},
};
}
public (AlbumTable, ArtistTable) GetAlbumWithArtistTable(Album album)
{
var albumTable = new AlbumTable
{
Id = album.Id,
Title = album.Title,
};
var artistTable = new ArtistTable
{
Id = album.Artist.Id,
Name = album.Artist.Name,
};
return (albumTable, artistTable);
}
}
Див. такожДжерела
|