In letzter Zeit zu verbessern, finde ich mich Datenzugriffsschicht Auswahlmethoden zu schreiben, wo der Code alle diese allgemeine Form annimmt:Wie Datenzugriffsschicht Auswahlmethode Muster
public static DataTable GetSomeData(... arguments)
{
string sql = " ... sql string here: often it's just a stored procedure name ... ";
DataTable result = new DataTable();
// GetOpenConnection() is a private method in the class:
// it manages the connection string and returns an open and ready connection
using (SqlConnection cn = GetOpenConnection())
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
// could be any number of parameters, each with a different type
cmd.Parameters.Add("@Param1", SqlDbType.VarChar, 50).Value = param1; //argument passed to function
using (SqlDataReader rdr = cmd.ExecuteReader())
{
result.Load(rdr);
}
}
return result;
}
Oder wie folgt aus:
public static DataRow GetSomeSingleRecord(... arguments)
{
string sql = " ... sql string here: often it's just a stored procedure name ... ";
DataTable dt = new DataTable();
// GetOpenConnection() is a private method in the class:
// it manages the connection string and returns an open and ready connection
using (SqlConnection cn = GetOpenConnection())
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
// could be any number of parameters, each with a different type
cmd.Parameters.Add("@Param1", SqlDbType.VarChar, 50).Value = param1; //argument passed to function
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
dt.Load(rdr);
}
}
if (dt.Rows.Count > 0)
return dt.Rows[0];
return null;
}
These Methoden werden von Business-Layer-Code aufgerufen, der die DataTable- oder DataRecord-Basis in stark typisierte Geschäftsobjekte konvertiert, die von der Präsentationsschicht verwendet werden können.
Da ich wiederholt ähnlichen Code verwende, möchte ich sicherstellen, dass dieser Code der beste Code ist. Wie kann es verbessert werden? Und es lohnt sich zu versuchen, den gemeinsamen Code von diesem auf seine eigene Methode zu übertragen. Wenn ja, wie würde diese Methode aussehen (insbesondere hinsichtlich der Übergabe einer SqlParameter-Sammlung)?
Sie tun dies, genau wie ich - obwohl ich mag wirklich, wie Sie Ihre Dual-using-Anweisungen stapeln die tiefe Verschachtelung zu vermeiden. gut gemacht! eine Sache, die mich interessiert, ist, wie Sie Ihre DAL logistisch/phyiscally vs. your BIZ einrichten - setzen Sie das in ein eigenes Projekt? oder als Namensraum? oder was? – dfasdljkhfaskldjhfasklhf
Wenn keine Parameter vorhanden sind, können Sie den Datenreader ebenfalls stapeln. DAL ist in seiner eigenen Assembly, DAL + BL teilt sich einen gemeinsamen Parent-Namespace. –
Ja, so mache ich es jetzt. Wie sieht Ihr Mapping zwischen Business-Objekten und DAL-Objekten aus? also gehst du 1: 1? Eine Sache, die ich interessant fand, war jemand, der die DAL in das Geschäftsobjekt gezogen und alles mit CodeSmith generiert hat. Sehr interessant – dfasdljkhfaskldjhfasklhf