16. februar 2009 - 16:30Der er
7 kommentarer og 1 løsning
Overvejelser vedr. asp.net site med ajax
Hej eksperter,
Jeg står for at skulle udvikle et site i ASP.NET, hvor der er planer om også at implementere noget AJAX. Jeg har dog et par spørgsmål til jer, som jeg gerne vil have nogenlunde på plads, inden jeg starter på projektet. Mest af alt drejer det sig om arkitektur/sikkerhed:
- Når et site med stor sandsynlighed ikke skal benyttes andre steder (f.eks. applikation til mobil eller en windows applikation), vil der så være nogen idé i, at lave en lagdelt arkitektur bag det? Her tænker jeg på datalayer, business layer m.v.
- Hvis det ikke er en nødvendighed, at lave sitet med en lagdelt arkitektur, vil det så betyde noget for sikkerheden? Her tænker jeg i forhold til SQL, som jo kommer til at ligge direkte på siden. Er det sikkert nok?
- Kan det ikke være en ulempe, at lave sitet uden den bagvedliggende arkitektur (derved objekt orienteret)? Jeg tænker primært på trafik til databasen her. I mine øjne vil det være nemmere at have f.eks. et Medlem's objekt som man gemmer i en session istedet for at tilgå databasen konstant for at hive oplysninger ud om et medlem. Eller tager jeg fejl her?
- Sidst men ikke mindst: codebehind eller ej? Er det virkelig blot en smagssag mht. codebehind, eller er der en dybere mening med det? :-)
Håber at I har tid til at skrive jeres tanker om ovenstående, det vil være en stor hjælp for mig! Hvis nogle af mine spørgsmål er dårligt formuleret, så må I endelig sige til.
Der kan sagtens være en idé i en lag-opdeling selv ved et lille projekt - fx kan det give et klart bedre bedre overblik, opdateringer og fejlsøgning kan lettes og når/hvis engang siden skal have nyt design beholder du al logik. Men det er selvfølgelig aldrig et krav at gøre det på denne måde for det kan også komme til at tage længere tid med flere lag så er tiden et aspekt kan der sagtens være en idé i ikke at have for mange lag.
Sikkerheden hænger ikke sammen med arkitekturen - og slet ikke SQL injection. SQL Injection kan foregå i lige stor stil uanset antallet af lag eller arkitektur iøvrigt, det handler ene og alene om at vide hvad man laver (her vil det nok have noget med brugen af parametre at gøre).
Lidt som forrige svar - arkitekturen hænger ikke nødvendigvis sammen med trafikken til databasen. Arkitektur handler mere om trafik mellem lag - du kan vælge at gemme informationer, objekter eller ej, i fx sessions uanset arkitekturen. En oplagt mulighed kunne jo være at lade et lag styre netop den session, er medlemmet loadet i en session returneres indholdet derfra og ellers kaldes databasen. Antallet af lag har heller ikke noget med om du arbejder objektorienteret eller ej - du kan jo sagtens lave objekter i fx din codebehind-fil.
Uden tvivl codebehind, alt andet vil være dumt når man på denne måde har fået en logisk opdeling (lag-deling) mellem HTML og kode foræret. I klassisk asp var det svært at gøre meget anderledes da man jo var nødt til at loope data igennem for fx at udskrive en tabel - i .NET vil man meget sjældent gøre det på den måde, men derimod jo databinde, så der er ingen grund til at blande de to ting (HTML og kode) sammen.
Hvis du kigger på fx Entity Framework (i 3.5) vil du få en masse foræret omkring objekt-delen.
Du skal have mange tak for dit svar! :) Det giver meget mening egentlig. Skal lige have læst lidt op på det med injections m.v.
Jeg laver sitet med en lagdelt arkitektur, kan godt se hvad du mener mht fejlløsning, opdateringer, redesign m.v.
Der var en anden ting jeg lige kom til at tænke på nu her. Hvad er den smarteste måde at lave tekst på? Ved at plastre siden til med <asp:Label>'s og bruge visible = true eller false alt efter om man er logget ind eller ej? Eller bruger man normalt et html tag og gør brug af mittag.InnerHTML?
Min pointe er, at en Label jo alligevel bliver rendered som et <span></span> tag, så det er vel ét-fedt? eller?
innerHTML er i hvert fald en meget dårlig løsning så glem den tanke. Det er meget svært at generalisere hvad man skal og ikke skal - men det eksempel du stiller op med login ville jeg nok sætte op med alm html inde i et panel dog med selve tekstboksende som kontroller.
det vil i hvert fald være lettere at skjule ét panel fremfor en masse kontroller - men om det er den rigtige metode i dit tilfælde er svært at vurdere uden en sammenhæng.
Det vil næsten altid være en fordel at bruge lagopdelt arkitektur. ihvertfald hvis det er over console helloworld niveauet. Og ASP.NET er designet til at gøre det nemt at lave lag opdelt.
Du kan finde side op og side ned om PL, BLL, DAL på Microsofts web sider.
Personligt vil jeg forslå PL, CL, DAL for simpel CRUD app og PL, CL, BLL, DAL for alt andet.
Lagopdeling giver ikke i sig selv højere sikkerhed, men det gør det meget nemmere at implementere sikkerhed.
Brug af lagopdeling forhindrer dig ikke i at cache data som persisteres i database i enten DAL eller BLL - eller i at have data som ikke persisteres.
Hvis du vil have nytte af ASP.NET's muligheder skal du dele tags og kode ud i separate filer.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.