Je joue autour avec SQLite et attributs, et j'avoir des propriétés tout au long de mon code qui ressemble à ceci:Comment est-ce que je peux réduire le passe-partout dans mes propriétés en utilisant des attributs?
const string FooKey = "foo";
...
string m_foo;
[DatabaseColumn (FooKey)]
public string Foo {
get { return m_foo; }
set {
if (m_foo == value)
return;
m_foo = value;
OnFooChanged(); // Calls the event FooChanged after a null check
Update (FooKey, Foo); // Updates the field in the database
}
}
Ceci est identique pour chaque propriété qui correspond à une colonne dans la table, avec les seuls changements étant le nom et le type. À savoir, il pourrait y avoir une autre propriété comme celui-ci:
const string BarKey = "bar";
...
bool m_bar;
[DatabaseColumn (BarKey)]
public bool Bar {
get { return m_bar; }
set {
if (m_bar == value)
return;
m_bar = value;
OnBarChanged(); // Calls the event BarChanged after a null check
Update (BarKey, Bar); // Updates the field in the database
}
}
En ce moment, je n'utilise que l'DatabaseColumn attribut pour identifier les champs qui correspondent aux colonnes de la table, afin que je puisse plus facilement insérer toute la ligne dans la base de données. Y at-il un moyen d'en faire plus de la responsabilité de DatabaseColumn, de réduire la norme dans mon code?
IMHO mettre à jour le DB dès que la propriété est mise à jour n'est pas une très bonne idée ... Regardez les cadres ORM existants, aucun d'entre eux fonctionnent comme ça, donc il y a probablement de bonnes raisons pour cela (au dessus de ma tête, je peux penser à 2: l'efficacité et l'intégrité des données/la cohérence) –
@Thomas: Merci, je vais jeter un coup d'oeil autour. Je n'ai jamais fait d'ORM auparavant - il existe peut-être déjà un cadre qui répond à mes besoins. –
oui, il est certainement;). Ecrire un ORM est * dur *, donc à moins que vous ayez des besoins très spécifiques, je recommanderais d'en utiliser un existant (Entity Framework est plutôt bon, NHibernate est aussi largement utilisé mais beaucoup plus difficile IMO) –