Donc, je suis assez nouveau programmeur de travailler vers un diplôme de premier cycle Comp Sci degré, avec une très petite quantité d'expérience de travail. Dans la recherche de stage-type d'emplois pour mon programme, j'ai remarqué que ce que j'ai entendu de plusieurs profs -- "travailler avec des bases de données constitue 90% de l'ensemble de la science moderne ordinateur emplois" -- ressemble, il est vrai. Cependant, mon programme n'a pas vraiment de cours avec des bases de données jusqu'à la 3ème année, donc j'essaye de faire au moins apprendre certaines choses moi-même dans le temps de le dire.
J'ai vu très peu sur soi et de l'internet en général, pour quelqu'un comme moi. Il semble y avoir des tonnes de tutoriels sur la façon de lire et écrire des données dans une base de données, mais peu sur les meilleures pratiques. Pour démontrer ce dont je parle, et pour aider à mettre en travers de ma réelle question, voici ce qui peut être facilement trouvé sur internet:
public static void Main ()
{
using (var conn = new OdbcConnection())
{
var command = new OdbcCommand();
command.Connection = conn;
command.CommandText = "SELECT * FROM Customer WHERE id = 1";
var dbAdapter = new OdbcDataAdapter();
dbAdapter.SelectCommand = command;
var results = new DataTable();
dbAdapter.Fill(results);
}
// then you would do something like
string customerName = (string) results.Rows[0]["name"];
}
Et ainsi de suite. C'est assez simple à comprendre mais, évidemment, plein de problèmes. J'ai commencé avec ce code et a rapidement commencé à dire des choses comme: "eh bien, il semble stupide d'avoir juste SQL dans tous les sens, je devrais mettre le tout dans un fichier de constantes." Et puis j'ai réalisé que c'était ridicule d'avoir ces mêmes lignes de code sur la place et vient de mettre tout ça avec des objets de connexion etc à l'intérieur d'une méthode:
public DataTable GetTableFromDB (string sql)
{
// code similar to first sample
}
string getCustomerSql = String.Format(Constants.SelectAllFromCustomer, customerId);
DataTable customer = GetTableFromDB(getCustomerSql);
string customerName = (string) customer.Rows[0]["name"];
Cela semblait être une grande amélioration. Maintenant, c'est super-facile, par exemple, à modifier à partir d'un OdbcConnection à un SQLiteConnection. Mais cette dernière ligne, l'accès aux données, semblait encore maladroit; et c'est toujours une douleur au changement d'un nom de champ (comme de passer de "nom" pour "CustName" ou quelque chose). J'ai commencé à lire à propos de l'aide tapé des ensembles de Données ou d'entreprise personnalisés objets. Je suis encore un peu confuse par la terminologie, mais il a décidé d'y regarder de toute façon. Je me figure que c'est stupide de s'appuyer sur un brillant Assistant de Base de données pour faire tout ça pour moi (comme dans les liens d'articles) avant de réellement savoir ce qui se passe, et pourquoi. J'ai donc pris un coup de couteau à moi-même et a commencé à faire des choses comme:
public class Customer
{
public string Name {get; set;}
public int Id {get; set;}
public void Populate ()
{
string getCustomerSql = String.Format(Constants.SelectAllFromCustomer, this.Id);
DataTable customer = GetTableFromDB(getCustomerSql);
this.Name = (string) customer.Rows[0]["name"];
}
public static IEnumerable<Customer> GetAll()
{
foreach ( ... ) {
// blah blah
yield return customer;
}
}
}
pour cacher le vilain tableau de trucs et de fournir certaines taper fort, permettant à l'extérieur de code pour faire des choses comme
var customer = new Customer(custId);
customer.Populate();
string customerName = customer.Name;
ce qui est vraiment agréable. Et si le Client change de table, des changements dans le code qu'il faut faire en un seul endroit: à l'intérieur de l' Customer
classe.
Ainsi, à la fin de toute cette randonnée, ma question est la suivante. A ma lenteur de l'évolution de la base de données de code va dans la bonne direction? Et où dois-je aller? Ce style est très bon pour un petit-ish bases de données, mais quand il ya des tonnes de différents tableaux, l'écriture de toutes les classes pour chacun pourrait être une douleur. J'ai entendu parler d'un logiciel qui peut générer ce type de code pour vous, mais je suis encore troublé par le DAL/ORM/LINQ2SQL/etc jargon et ces énormes morceaux de logiciel sont un peu écrasante. Je suis à la recherche de quelques bonnes pas-massivement-complexe de ressources qui peut me pointer dans la bonne direction. Tout ce que je peux trouver sur ce sujet sont complexes, les articles qui vont bien au-dessus de ma tête, ou les articles que vous montrer comment utiliser le point-et-cliquez sur assistants de Visual Studio, par exemple. Notez également que je suis à la recherche d'informations sur le travail avec les Bases de données dans le code, pas d'informations sur la conception de Base de données/normalisation...il y a beaucoup de bon matériel sur que là-bas.
Merci pour la lecture de ce mur géant de texte.