Vet inte om detta är rätt forum. Någon mod får gärna flytta den.
Har en webbapplikation. Till detta webbprojekt vill jag ha binda fyra klassbibliotek. BLL, DAL, Public, Private. Inga problem att lägga till de olika klassbiblioteken. Men grejen är ju den att BLL ska ju skicka en request till DAL som sedan responsar BLLen. Nu undrar jag hur man lägger till referenser till BLL-klassbiblioteket (DAL, Public, Private). Sedan från DAL-klassbiblioteket lägga till referenser (BLL, Public, Private)? Verkar vara lite knepigt då det blir cirkulärt och fuckar upp sig när applikationen ska byggas. Någon som vet hur man gör?
Så kan man ha ja. Dock finns det konstruktorer i mina BLL som validerar datan.
Och så borde det väl vara!? I din BLL validerar du datat och skickar vidare till ex. en savemetod i DAL. Alltså behövs bara referens från BLL till DAL och inte tvärtom.
Vad i DAL vill du koppla mot BLL?
Så kan man ha ja. Dock finns det konstruktorer i mina BLL som validerar datan.
Och så borde det väl vara!? I din BLL validerar du datat och skickar vidare till ex. en savemetod i DAL. Alltså behövs bara referens från BLL till DAL och inte tvärtom.
Vad i DAL vill du koppla mot BLL?
När jag gick i skolan fick jag lära mig en sak. VALIDERA ALL DATA. Anledningen till att vi skulle validera all data, även det vi hämtar är för att databasen behöver inte alltid innehålla korrrekt data.
Det är mest av bekvämast själ jag använder mig utav BLL i DAL. Att kunna validera datan som plockas ut också.
Lite kod
private int Year
{
get { return _year; }
set
{
try
{
List<string> Reg = RegexValidate.blogYear();
Regex chkYear = new Regex(Reg[0]);
if (!chkYear.IsMatch(value.ToString()))
throw new ArgumentException(Reg[1]);
_year = value;
}
catch (Exception ex)
{
throw new ArgumentException(ex.Message);
}
}
}
public Blog(DateTime date, string header, string content, string writer)
{
//Denna konstruktor anropas från DAL när datan hämtas.
this.Year = date.Year;
this.Month = date.Month;
this.Day = date.Day;
this.Header = header;
this.Content = content;
this.Writer = writer;
}
//Dataåtkomstlagret
public static List<ListProp> GetBlogContribution(int blogID)
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
try
{
con.Open();
SqlCommand cmd = new SqlCommand("getBlogContribution", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@blogID", blogID);
using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
List<ListProp> list = new List<ListProp>();
if (reader.HasRows)
{
while (reader.Read())
{
new BLL.Blog((DateTime)reader["date"], reader["header"].ToString(), reader["content"].ToString(), reader["writer"].ToString());
list.Add(new ListProp() { BlogDate = (DateTime)reader["date"], BlogHeader = reader["header"].ToString(), BlogContent = reader["content"].ToString(), BlogWriter = reader["writer"].ToString() });
}
}
else
{
list.Add(new ListProp() { BlogDate = DateTime.Now, BlogHeader = "Inga inlägg.", BlogContent = "Det finns inga blogginlägg.", BlogWriter = "" });
}
return list;
}
con.Close();
}
catch (Exception ex)
{
throw new Exception("Problem med att ladda in blogginlägget.<br />" + ex.Message);
}
}
}
}
invecklaren skrev:
Då borde du rimligen tänka om.
Om du vill återanvända ditt DAL i ett annat projekt där BLL ser helt annorlunda så blir det ju inte så lätt, eller hur.
Nej det är sant, men det kommer aldrig att ske i mitt fall.
Finns det verkligen en vits med att kolla så att året är korrekt från databasen?
Om det är sparat som datetime i databasen så kan det ju aldrig bli fel!?
Och även om det skulle bli fel så får du en exception när du fyller din lista (BlogDate = (DateTime)reader["date"]).
Finns det verkligen en vits med att kolla så att året är korrekt från databasen?
Om det är sparat som datetime i databasen så kan det ju aldrig bli fel!?
Och även om det skulle bli fel så får du en exception när du fyller din lista (BlogDate = (DateTime)reader["date"]).
Ja nu var väl kanske inte en DateTime det bästa exempelet men en string är det värre med. Mmm visst om min applikation sparar datan rätt så är det ju lugnt. Men det kan ju finnas en annan applikation som använder samma databas och är inte lika hård på valideringen eller hur?
Verkar som sagt som du är lite fel ute här
det är helt sant att man bör validera data.. men varför på väg UT från databasen?
och varför i DAL?
datan har ju förhoppningsvis validerats i BLL på väg IN, så enda anledningen till att den skulle vara felaktig på väg UT är att databasen blivit korrupt. Dessutom så skall DAL, i min värld, endast fundera som en koppling mot databasen och all validering av data sker i BLL, fast när man ser din kod så skulle jag kalla det där för "BLL-kod"
I DAL skulle jag bara ha metoder för ExecuteNonQuery och ExecuteReader /Scalar
sen i BLL så jobbar man mot dem.
DAL skall inte "veta" nånting om den data den hämtar.
Edit: såg att SebastianE hann med ett inlägg medan jag skrev
Verkar som sagt som du är lite fel ute här
det är helt sant att man bör validera data.. men varför på väg UT från databasen?
och varför i DAL?
datan har ju förhoppningsvis validerats i BLL på väg IN, så enda anledningen till att den skulle vara felaktig på väg UT är att databasen blivit korrupt. Dessutom så skall DAL, i min värld, endast fundera som en koppling mot databasen och all validering av data sker i BLL, fast när man ser din kod så skulle jag kalla det där för "BLL-kod"
I DAL skulle jag bara ha metoder för ExecuteNonQuery och ExecuteReader /Scalar
sen i BLL så jobbar man mot dem.
DAL skall inte "veta" nånting om den data den hämtar.
Edit: såg att SebastianE hann med ett inlägg medan jag skrev
Som du ser i mitt föregående inlägg så berättar jag varför man ska validera UTdatan. Hur jag ska göra för att validera UTdatan från min BLL? Blir det att första hämta datan från DAL från BLL och sedan i någon metod i BLL skickar jag in datan och validerar den?
du har alltså valideringen av indata i BLL?
detta tolkar jag som att du har logiken för att stoppa in data i BLL,
men metoden GetBlogContribution borde ju rimligen ligga i BLL den med
annars så har du ju (enligt den kod du visat) nån form av 2,5-tier lösning
Låt Ditt DAL leverera en IDataReader som du sen använder för att fylla din lista med i BLL då kan du hantera valideringen i BLL för både in och utdata, vilket torde vara det korrekta sättet.
du har alltså valideringen av indata i BLL?
detta tolkar jag som att du har logiken för att stoppa in data i BLL,
men metoden GetBlogContribution borde ju rimligen ligga i BLL den med
annars så har du ju (enligt den kod du visat) nån form av 2,5-tier lösning
Låt Ditt DAL leverera en IDataReader som du sen använder för att fylla din lista med i BLL då kan du hantera valideringen i BLL för både in och utdata, vilket torde vara det korrekta sättet.
All indata valideras i BLL såklart.
Nu förstår jag hur du menade. Tack så mycket (y)
273 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2