tdusko @ 04.07.2008. 21:19
Radim seminarski rad na temu paterna. Rad se sastoji od web aplikacije u kojoj trebam implementirati neki od paterna i dokumentacije u kojoj trebam da opisem te paterne koje sam koristio. Problem koji imam sastoji se u tome da sam ja napisao aplikaciju ali ne znam koje sam sve paterne koristio. Ja cu sada napisati kod u kome mislim da se moze prepoznati neki patern. Nadam se da ce se neko zainteresovati da mi pomogne
Rad sa metodama za rad sa bazom podataka uvek radim na isti nacin. Imam klasu OpstiManager koja ima genericke metode za Insert, Update, Delete. Evo metode za insert:
Za svaki objekat pravim po jednog managera koji nasledjuje klasu opstiManager i u njemu imam metode za insert, update, delete koje samo pripreme ulazne argumente za iste te metode opstegManagera i pozivaju metodu opsteg managera. Na primer klasa koja radi sa evidencijama ima metodu AddEvidence:
Da li ovo moze biti mozda Adapter patern?
[Shadowed: dodati code tagovi.]
[Ovu poruku je menjao Shadowed dana 04.07.2008. u 23:18 GMT+1]
Rad sa metodama za rad sa bazom podataka uvek radim na isti nacin. Imam klasu OpstiManager koja ima genericke metode za Insert, Update, Delete. Evo metode za insert:
Code:
protected void CreateObject(int PrimaryKey, DataTable Attributes)
{
try
{
string aTableName = Attributes.TableName;
SqlCommand aCommand = broker.CreateCommand();
string sqlQuery = "INSERT INTO " + aTableName + " (" + aTableName + "ID, ";
foreach (DataRow row in Attributes.Rows)
sqlQuery += row["Name"].ToString() + ", ";
sqlQuery = sqlQuery.Remove(sqlQuery.Length - 2);
sqlQuery += ") VALUES (";
sqlQuery += broker.FormatParameterName(aTableName + "ID, ");
foreach (DataRow row in Attributes.Rows)
sqlQuery += broker.FormatParameterName(row["Name"].ToString()) + ", ";
sqlQuery = sqlQuery.Remove(sqlQuery.Length - 2);
sqlQuery += ") ";
aCommand.CommandText = sqlQuery;
broker.AddInputParameter(aCommand, aTableName + "ID", DbType.Int32, PrimaryKey);
foreach (DataRow row in Attributes.Rows)
broker.AddInputParameter(aCommand, row["Name"].ToString(),
(DbType)row["DbType"], row["Value"]);
aCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
protected void CreateObject(int PrimaryKey, DataTable Attributes)
{
try
{
string aTableName = Attributes.TableName;
SqlCommand aCommand = broker.CreateCommand();
string sqlQuery = "INSERT INTO " + aTableName + " (" + aTableName + "ID, ";
foreach (DataRow row in Attributes.Rows)
sqlQuery += row["Name"].ToString() + ", ";
sqlQuery = sqlQuery.Remove(sqlQuery.Length - 2);
sqlQuery += ") VALUES (";
sqlQuery += broker.FormatParameterName(aTableName + "ID, ");
foreach (DataRow row in Attributes.Rows)
sqlQuery += broker.FormatParameterName(row["Name"].ToString()) + ", ";
sqlQuery = sqlQuery.Remove(sqlQuery.Length - 2);
sqlQuery += ") ";
aCommand.CommandText = sqlQuery;
broker.AddInputParameter(aCommand, aTableName + "ID", DbType.Int32, PrimaryKey);
foreach (DataRow row in Attributes.Rows)
broker.AddInputParameter(aCommand, row["Name"].ToString(),
(DbType)row["DbType"], row["Value"]);
aCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
Za svaki objekat pravim po jednog managera koji nasledjuje klasu opstiManager i u njemu imam metode za insert, update, delete koje samo pripreme ulazne argumente za iste te metode opstegManagera i pozivaju metodu opsteg managera. Na primer klasa koja radi sa evidencijama ima metodu AddEvidence:
Code:
public string AddEvidence(string SifraKorisnika, DateTime DatumEvidencije, int Glava, DataTable Stavke)
{
try
{
DataTable Evidencija = MasterManager.CreateAttributesTable("tblEvidencija");
string BrojEvidencije = GetEvidenceNumnber(Glava);
Evidencija.Rows.Add(new object[] { "BrojZahteva", BrojEvidencije, DbType.String });
Evidencija.Rows.Add(new object[] { "SifraKorisnika", SifraKorisnika, DbType.String });
Evidencija.Rows.Add(new object[] { "DatumPredajeZahteva", DatumEvidencije, DbType.DateTime });
Evidencija.Rows.Add(new object[] { "Glava", Glava, DbType.Int32 });
CreateObjectPK(Evidencija);
foreach (DataRow Stavka in Stavke.Rows)
{
int RedniBr = Convert.ToInt32(Stavka["RedniBr"]);
string Opis = Stavka["Opis"].ToString();
string KontoKorisnika = Stavka["KontoKorisnika"].ToString();
string TransferniKonto = Stavka["TransferniKonto"].ToString();
double Iznos = Convert.ToDouble(Stavka["Iznos"]);
AddEvidenceItem(RedniBr, BrojEvidencije, Opis, TransferniKonto, KontoKorisnika, Iznos, 1);
}
return BrojEvidencije;
}
catch (Exception ex)
{
throw ex;
}
}
public string AddEvidence(string SifraKorisnika, DateTime DatumEvidencije, int Glava, DataTable Stavke)
{
try
{
DataTable Evidencija = MasterManager.CreateAttributesTable("tblEvidencija");
string BrojEvidencije = GetEvidenceNumnber(Glava);
Evidencija.Rows.Add(new object[] { "BrojZahteva", BrojEvidencije, DbType.String });
Evidencija.Rows.Add(new object[] { "SifraKorisnika", SifraKorisnika, DbType.String });
Evidencija.Rows.Add(new object[] { "DatumPredajeZahteva", DatumEvidencije, DbType.DateTime });
Evidencija.Rows.Add(new object[] { "Glava", Glava, DbType.Int32 });
CreateObjectPK(Evidencija);
foreach (DataRow Stavka in Stavke.Rows)
{
int RedniBr = Convert.ToInt32(Stavka["RedniBr"]);
string Opis = Stavka["Opis"].ToString();
string KontoKorisnika = Stavka["KontoKorisnika"].ToString();
string TransferniKonto = Stavka["TransferniKonto"].ToString();
double Iznos = Convert.ToDouble(Stavka["Iznos"]);
AddEvidenceItem(RedniBr, BrojEvidencije, Opis, TransferniKonto, KontoKorisnika, Iznos, 1);
}
return BrojEvidencije;
}
catch (Exception ex)
{
throw ex;
}
}
Da li ovo moze biti mozda Adapter patern?
[Shadowed: dodati code tagovi.]
[Ovu poruku je menjao Shadowed dana 04.07.2008. u 23:18 GMT+1]