Bonjour à tous,
Je réalise un petit POC perso. Je prépare une appli xamarin. Cette appli stockera des données locales (j'utilise sqlite.net pcl).
J'ai déjà tester avec des projets en production l'approche edm first, databse sql frst, et là j'aimerai faire du Interface/code first.
J'utilise des interfaces que j'implémente 2 fois (entité et DTO).
Ca me donne qq chose comme :
Du coup je peux faire des trucs comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 interface IPlayer{ Id {get;set;} Nom {get ; set;} } class Player: IPlayer{ {PrimaryKey] IPlayer.Id {get;set;} [MaxLenght(20)] IPlayer.Nom {get;set;} } class PlayerDto: IPlayer { IPlayer.Id {get;set;} IPlayer.Nom {get ; set;} }
Pas besoin de mapper mes propriétés de l'entité vers le DTO à la main ou d'utiliser un automapper.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IPlayer p = new Player("entité"); IPlayer pp = new PlayerDto("dto"); // pp.Nom = "dto" pp = (IPlayer)p; // pp.Nom = "entité"
Je fais de l'implémentation explicite pour avoir une erreur de compilation si jamais un champ de ma table est supprimé ou renommé. (et pour tester les limites : je passe tjrs par de l'implicite, envie de changer ^^)
Dans l'idéal, j'aimerai auto générer mes interfaces, entités et dto avec du template T4.
Je bêche un peu sur la façon d'implémenter les relations 1 to many et many to many. J'aimerai un système de navigation entre propriété comme dans EF.
Quelle sont les meilleures pratique ? Comment procéder ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 IPlayer{ int IdFavoriteGame {get;set;} // sera implémenté avec [Indexed] // ou IGame IdFavoriteGame {get;set;} // sera implémenté avec [Ignore] //complication : liste d'objets lié ; IList<IGame> Games {get;set;} // sera implémenté avec [Ignore] // ou bien IList<int> IdGames {get;set;} // sera implémenté avec [Ignore] } IPlayerGame { int IdPlayerGame {get;set;} // sera implémenté avec [PrimaryKey] int IdPlayer {get;set;} // sera implémenté avec [Indexed] int IdGame {get;set;} // sera implémenté avec [Indexed] } IGame { int IdGame {get;set;} // sera implémenté avec [PrimaryKeyed] //complication : liste d'objets lié ; IList<IPlayer> Players {get;set;} // sera implémenté avec [Ignore] // ou bien IList<int> IdPlayers {get;set;} // sera implémenté avec [Ignore] }
On ne trouve pas grand chose sur le net.
80% du code est du pure sql, je préfère l'approche Linq pour bénéficier du refactoring, intelisense etc.
Pour info, c'est plus à but pédagogique qu'autre chose : ça n'ira pas en prod . Je réfléchis à comment synchroniser des données d'un storage locale avec une base distante.
Et tant qu'à faire, voir de nouveaux concepts, architectures.
Merci aux autres lecteurs qui se pencheront sur le sujet !!
Partager