, . , () , , .
-, COPY-PASTE. , .
public class DatabaseGateway
{
public IList<T> RetrieveSqlAs<T>(string queryString, ITransformer<SqlDataReader, T> rowTransformer)
{
var result = new List<T>();
using (var sqlConn = new SqlConnection(connectionString)) // you can use a CONSTANT, or call to a .config file here
using (var sqlCommand = new SqlCommand(queryString, sqlConn))
{
var myreader = sqlComm.ExecuteReader();
while (myreader.Read())
{
result.Add(rowTransformer.Transform(myreader));
}
}
return result;
}
}
public class MemberRowTransformer : ITransformer<SqlDataReader, string>
{
public string Transform(SqlDataReader from)
{
from["members"]; // handle null and anything else here
}
}
public interface ITransformer<TFrom, TTo>
{
TTo Transform(TFrom)
}
:
var gateway = new DatabaseGateway();
var transformer = new MemberRowTransformer();
cmb.Items.Clear();
foreach (string i in gateway.RetrieveSqlAs("SELECT members FROM dbo.tbl_Category", transformer))
{
cmb.Items.Add(i);
}
, Repository Pattern. :
public class MembershipRepository
{
public List<string> GetMembers()
{
var gateway = new DatabaseGateway();
var transformer = new MemberRowTransformer();
var result = new List<string>();
foreach (string i in gateway.RetrieveSqlAs("SELECT members FROM dbo.tbl_Category", transformer))
{
result.Add(i);
}
return result;
}
}
:
var repository = new MembershipRepository();
cmb.Items.Clear();
foreach(string i in repository.GetMembers())
{
cmb.Items.Add(i);
}
: Generics, Repository Pattern Data Transfer Objects (DTOs), , , .
.. , , , !