JPS skrev:
1. Databaskoppling
På http://www.dotnetjunkies.com/QuickStartv20/aspnet/
så används databskopplingar som<asp:SqlDataSource ID="SqlDataSource2" Runat="server" SelectCommand="SELECT DISTINCT [state] FROM [authors]"hur är dessa? Är det något som man - kan/bör/inte bör använda?
Om DataSource-kontrollerna gör dig produktiv, så visst... Det finns massor av åsikter om vad som är rätt och fel, bra och dåligt, men till syvende och sist är det vad du åstadkommer som avgör av det var rätt eller fel.
Med det sagt, så ...:)
- Att DataSource är utformad som en kontroll som läggs på sidan är genomkorkat. Varför ska jag lägga något på sidan som ändå inte ska hamna där?
- Att lägga datalagret inne i designlagret går emot nästan alla etablerade utvecklingsmodeller och riskerar att skapa spagettikod. Jag är ingen rättrogen flerlagersfascist, men här känns det som att det gått lite väl långt.
- De flesta som jobbat med DataGrid etc. vet att dessa väldigt ofta kräver "modifiering" runtime, dvs. att man manipulerar data i ItemDataBound etc. Det behovet kommer inte att försvinna, och helt plötsligt har vi Spagetti Carbonara, med datalager i designlagret och design farligt nära data-/affärslagret
Det måste dock tilläggas att själva utformningen, av DataSource-kontrollerna, har mycket vettigt i sig, och kanske kan de bli riktigt användbara om man lär sig att använda dem på ett smart sätt. I synnerhet ObjectDataSource är lovande. Den spontana känslan är dock att de tillkommit för att glädja drag-and-drop-programmerare, utan tanke på att de sabbat för dem som inte jobbar så.
JPS skrev:
2. Visa post
Vad är rätt/fel att använda då man vill visa en post?
skall man använda<asp:Repeater id="customers" runat="server"> <ItemTemplate> <%#Container.DataItem("Namn")%> </ItemTemplate> </asp:Repeater>eller
While myReader.Read LabelNamn.Text = myReader("Namn") End While <asp:Label id="LabelNamn" runat="server" />
Det övre exemplet kan stoppas i papperskorgen. Det är inget repeterande fält och då ska man inte dra med sig allt bagage som en repeater innebär.
Det under exemplet är mer rätt, men även där är det en loop i onödan (while). Ska man bara plocka ut ett värde från databasen så ska man använda t.ex. ExecuteScalar (som direkt returnerar värdet) i stället för ExecuteReader, eller åtminstone göra om While till If, eftersom myReader endast innehåller en rad.