Jag är lite ny på att hacka asp.net, men det är dags att gå vidare, och jag har här ett par funderingar: Jon, Hej Johan! Nu har jag fått till det. Jag kompilerade från kommandoraden med csc /nologo /t:library /out:.\Filnamn.dll /r:System.dll /r:System.Data.dll Filnamn.cs och laddade upp filen till /bin-katalogen som jag skapade. I aspx-filen lade jag till: <%@ Import Namespace="NamnetPåMittNamespace" %>funktioner i separata filer
1. Jag har bland annat en connectstring till databasen som jag i nuläget har lagt in i en variabel på varje sida. Det känns lite onödigt. Jag vill ha den på ett enda ställe där varje sida kommer åt den. Hur gör jag?
2. Jag har även några metoder som jag behöver anropa från flera olika sidor. Jag har då hört att man kan lägga dem i separata filer och kompilera dessa. Jag har kommit så långt som att jag har kompilerat koden, men var lägger jag dll-filerna som jag fått, och hur anropar jag dem? (Förresten, är det detta som kallas affärsobjekt, eller är jag ute och halkar.
Jork
Ps. jag hackar c#, om det gör någon skillnadSv: funktioner i separata filer
Oj vilka frågor du ställer.
1... Du kan använda web.config för att lagra connstring sök på appSettings i .Net SDK eller här i forumet så kommer du hitta flera svar där du kan läsa mer intresanta saker om detta med att spara data globalt.
2... Vad du bör göra är att skapa klassfiler med metoder, om du gör detta direkt i sitt asp .net projekt i VS .Net så kommer dessa lagras i samma dll som din webapplication. Oftast solutionfilens namn + .dll, dock spelar detta ingen större roll. Du når dem genom att skriva:
<code>
klass variabel = new klass();
variabel.minMetod();
</code>
i din kod. Om du gör ett löst projekt (skapar ett class library med klasser) bör du lägga till en projektrefferens till denna via add reference och sedan nyttja using i de filer som skall anropa dessa klasser. (OBS! using är mer för att slippa skriva så långt när du anropar en klass som en liten path kan man säga. )
using mittnamespace;
men man kan även skriva i sin kod mittnamespace.klass något = new mittnamespace.klass();
om man vill. Dock hjälper using en så man slipper ange namespacet.
Detta kallas _Inte_ äffersobjekt. Eller det beror på. Affärsobjekt är objekt som hantera specifika affärs rutiner ang din applikation, om klassen går mot databas är det mer data access rutiner än affärsrutiner. Ex på en affärsrutin kan vara att hämta fakturor, kolla momsvärden etc...
Man brukar dela in det i tre enkla lager.
PL (Presentation Layer)
BOL (Business object Layer)
DAL (Data Access Lahyer)
Sedan skikt. (tier)
User/Client
Application server/Domän server/Web server...
Datakälla
PL är det gränsnitt som pratar mot user/client tier så som html, aspx sidor, bara presentation av data och knappar etc... Ingen avancerar logik, dessa lager nyttjar BOL för affärs logik, specifikt för applikationen. Dessa nyttjer sedan DAL, BOL och DAL ligger på andra skiktet oftast applikationsservern, ex där du har din web applikation. DAL är access bitar som oftast pratar mot data källor ex Datakälla skiktet som kan vara en databas. DAL är inte databasen utan bara rutiner för att gå mot den, ex ADO .Net.
Säg att du har en dropdownlist. Denna skall fyllas med data. Denna data kommer från en datakälla.
Vad man gör då är att man hämtar datan via BOL som nyttjar DAL som accessar Datakällan.
Pseudo kod: PL (Presenations Lagret)
<code>
DropDownList.DataSource = new Invoice().GetById(3);
DropDownList.DataBind();
</code>
Här nyttjar jag Invoice som kommer från BOL och hämtar ut en samling data (ex DataSet eller ArrayList eller egen collection med hjälp av äffärsmetoden GetByID.
Pseudo kod: BOL (Affärs objekts lagret)
<code>
public class Invoice
{
public DataSet GetById(int id)
{
'Obs! Pseudo kod... går ej använda...
return ( SqlHelpoer.ExecuteDataSet("Select * from invoice where id=" + id,connectionString) );
}
}
</code>
BOL har invoice som i sin tur nyttjat SqlHelper som är en klass i DAL (Data access lagret).
<code>
public class SqlHelper
{
public static DataSet ExecuteDataset(string cmdText,string connectionString)
{
'kod för att koppla sig med ADO.Net
return ( command.ExecuteDataSet(.....) );
}
}
</code>
Hoppas det gav lite. Det är ett stort ämne och kräver stora och djupa kunskaper för att behärska helt. Saker som Deffence programming ( se till att koden hanterar fel, validerar rätt, tar mot rätt data etc...)
Säkerhet, se till så man inte kan missbruka funktioner. Logisk design etc...
Mvh JohanSv:funktioner i separata filer
Tack för ditt mycket utförliga svar! Jag skulle ha tackat för länge sedan, men jag har jobbat med ett par andra projekt sedan sist.
Problem nr 1 är löst. Tack för hjälpen!
2:an har jag inte fått till än. Jag jobbar inte med Visual Studio, utan skriver kod i en vanlig texteditor och kompilerar från kommandoraden. Blir det knepigare då? Måste man göra på nåt annat sätt?
Mvh / JonSv: funktioner i separata filer
Bara ett tips ifall nån annan har problm med samma sak :)