У меня следующая ситуация: Мне нужно получить доступ к базе данных и использовать этот доступ для заполнения группы простых объектов данных информацией из нее,Иногда объект данных заполняется одной таблицей , иногда большим количеством таблиц .
Моя реализация на данный момент группирует определенные объекты данных в репозитории , которые связаны друг с другом в том смысле, что они используются вместе в бизнес-логике.
sql-запросы и отображение между ответом из базы данных и объектами данных также выполняются в хранилище.
Это правильная реализация шаблона хранилища?
public class ConnectionStringParametersSQL
{
public ConnectionStringParametersSQL(String[] value) {Value = value; }
public String[] Value {get; set;}
public static ConnectionStringParametersSQL DB{ get { return new ConnectionStringParametersSQL(new String[]{"xxxx","xxxx","xxxx","xxx","xxx"} ); }}
public static ConnectionStringParametersSQL DB2 { get { return new ConnectionStringParametersSQL(new String[]{"xxxx","xxxx","xxxx","xxx","xxxx"} ); }}
}
public class BaseRepositorySQL
{
private String[] connectionParameters;
public BaseRepositorySQL(String[] parameters)
{
this.connectionParameters = parameters;
}
protected Database getDb()
{
Database db = new Database();
db.ConnectMySQL(connectionParameters[0],int.Parse(connectionParameters[1]),connectionParameters[2],connectionParameters[3],connectionParameters[4]);
return db;
}
}
public class RegelnRepositorySQL : BaseRepositorySQL, IRegelnRepository
{
public RegelnRepositorySQL() : base(ConnectionStringParametersSQL.DB.Value){}
public List<RegelSML> getRegelSMLListByStand(DateTime stand)
{
List<RegelSML> regelSMLList = new List<RegelSML>();
String sStand = stand.Date.ToString("yyyy-MM-dd");
using(DbDataReader reader = this.getDb().Execute("Select * from xxxxxx
xxStand=" + "'" + sStand + "'",false))
{
while(reader.Read())
{
RegelSML regelSML = new RegelSML();
for(int i = 0; i < reader.FieldCount; i++)
{
if(reader.GetValue(i) == DBNull.Value) continue;
if(reader.GetName(i) == "Stand") regelSML.dateTime = reader.GetDateTime(i);
if(reader.GetName(i) == "ID") regelSML.id = reader.GetInt32(i);
if(reader.GetName(i) == "SML") regelSML.SML = reader.GetString(i);
if(reader.GetName(i) == "Merkmal") regelSML.Merkmal = reader.GetString(i);
if(reader.GetName(i) == "Tabelle") regelSML.Tabelle = reader.GetString(i);
if(reader.GetName(i) == "Feld") regelSML.Feld = reader.GetString(i);
if(reader.GetName(i) == "Format") regelSML.Format = reader.GetString(i);
}
regelSMLList.Add(regelSML);
}
return regelSMLList;
}
}
public List<Regel> getRegelListByStand(DateTime stand)
{
long lastRegelID = -1;
List<Regel> regelList = new List<Regel>();
String sStand = stand.Date.ToString("yyyy-MM-dd");
using(DbDataReader reader = this.getDb().Execute("Select * from xxxxxxx=" + "'" + sStand,false))
{
while(reader.Read())
{
Regel regel = new Regel();
for(int i = 0; i < reader.FieldCount; i++)
{
if(reader.GetValue(i) == DBNull.Value) continue;
if(reader.GetName(i) == "REGEL_ID") regel.ID = reader.GetInt32(i);
if(reader.GetName(i) == "kumGruppe") regel.kumGruppe = reader.GetInt64(i);
if(reader.GetName(i) == "Verdichten") regel.Verdichten = reader.GetBoolean(i);
if(reader.GetName(i) == "Bezeichnung2") regel.sBez2 = reader.GetString(i);
if(reader.GetName(i) == "Bezeichnung") regel.sBezl = reader.GetString(i);
if(reader.GetName(i) == "tabelle") regel.sTab = reader.GetString(i);
if(reader.GetName(i) == "DefaultHaken") regel.defHaken = reader.GetBoolean(i);
if(reader.GetName(i) == "pA_Artikel") regel.sArti = reader.GetString(i);
if(reader.GetName(i) == "pos") regel.pos = reader.GetInt32(i);
if(reader.GetName(i) == "feld") regel.sField = reader.GetString(i);
if(reader.GetName(i) == "Menge") regel.sMenge = reader.GetString(i);
if(reader.GetName(i) == "STAND") regel.stand = reader.GetDateTime(i);
}
regelList.Add(regel);
}
return regelList;
}
}
}```