SebastianE skrev:
Har en applikation som består utav fem lager. Där vi har affärslagret och dataåtkomstlagret bland annat.
I mitt affärslager är jag väldigt noggrann att validera data. När jag använde mig av ASP.NET 2.0 fungerade properties lite annorlunda jämfört mot vad det gör i ASP.NET 3.5.
Förut när jag skulle validera data i mitt affärslager skapade jag en instans av affärslagret ifrån dataåtkomstlagret och skickade in mina värden från databasen till en konstruktor i affärslagret som satt properties. I min properties validerade jag sen datan.
Så här har jag löst det nu
rivate string _userID; public string UserID { get { return _userID; } set { ListPropRegex reg = RegexC.GUserID(_userID)[0]; try { if (!reg.validate) { throw new Exception(reg.errorMessage); } _userID = value; } catch (Exception) { throw new Exception(reg.sendBug); } } } //Constructor public User(string userID) { this._userID = userID; this.UserID = _userID; }Har även försökt att sätta UserID direkt genom att skriva this.UserID = userID i konstruktorn. Men då flippar hela applikationen ut totalt. Debuggen i Visual Studio får knäpp och slutar att fungera bland annat.
Finns det något snyggare sätt att lösa det hela?
Inte många rätt där?
Kan du förklara vad du gör? Du slänger ett excption för att sedan fånga det och slänga ett nytt exception?
Sedan typen Exception skall man aldrig kasta.
Sedan enligt många böcker skall man inte kasta exception när man sätter värdet utan det är bättre att kunna sätta värdet och sedan fråga objektet om det går igenom valideringen så slipper man oftast exceptions.
user.Id = id;
if(!user.IsValid())
//meddela användaren.
try
{
if (!reg.validate)
{
throw new Exception(reg.errorMessage);
}
_userID = value;
}
catch (Exception)
{
throw new Exception(reg.sendBug);
}