webForumDet fria alternativet

Collection eller DataSet

.NET

13 svar · 686 visningar · startad av icaaq

Medlem sedan okt. 20005 273 inlägg
Frågan#1

Jag har för det mesta när jag fyllt mina object jobbat med collectioner(ArrayLists). Men när jag nu börjat kolla på ORMappern så tänkte jag höra med er hur ni gör?

Använder ni collectioner eller skickar ni datat till presentationslagret i någon annan form? typ dataset eller datatables??

mv icaaq

Medlem sedan apr. 2004778 inlägg
#2

Oj oj, nu är du inne på en fråga som har delat programmeringsvärlden. Det finns en hel del diskussioner om detta på nätet och även ett par här.
Ena sidan vill ha typade datasets.
Den andra sidan business objects och starkt typade collections.
Jag använder collections och ska snart bygga till en OR Mapper.
Om du ska ha en OR Mapper så ska du använda objekt.
Object Relational Mapper, dvs den skapar relationer till objekt.
Det finns en rätt lång tråd här på webForum som jag vet att du läst som presenterar båda synsätten.

Sedan när det gäller collections, istället för att använda ArrayLists, om det är vad du gör, så skapa en collectionklass som ärver CollectionBase.
Finns mängder av artiklar om just starkt typade collections. Vet att t.ex. 15seconds.com har några bra som jag själv haft användning för.
Ska se om jag kan hitta några länkar.

Medlem sedan okt. 20005 273 inlägg
#3

Sedan när det gäller collections, istället för att använda ArrayLists, om det är vad du gör, så skapa en collectionklass som ärver CollectionBase.

Hur menar du här? Har du något kodexempel på starkt typade collections?

mv icaaq

Medlem sedan juli 20011 304 inlägg
#4

En snabb googling på strongly typed collection. Det finns massa där ute :)

http://www.codeguru.com/columns/VB/article.php/c6519/

Personligen använder jag mig av Objekt och blandar lite mellan att ha dem i ArrayList eller göra collections av dom.

Medlem sedan maj 20012 812 inlägg
#5

Har du något kodexempel på starkt typade collections

Vill du ha starkt typade collections så måste du använda dig av Generics annars så så har du bara objekt i din collections, om du däremot använder en generics collections så har du rätt typ av object i din collection.

- M

Medlem sedan apr. 2004778 inlägg
#6

Här är ett exempel på en starkt typad collection som ärver CollectionBase.

  <Serializable()> _
  Public Class Users
    Inherits CollectionBase

    Public Sub Fill(ByVal Reader As IDataReader)
      While (Reader.Read = True)
        Dim aUser As New User(Reader)
        Me.Add(aUser)
      End While
    End Sub

#Region " Creating strongly typed collection "

    Public Sub Insert(ByVal index As Integer, ByVal NewUser As User)
      If IsExist(NewUser) = False Then
        InnerList.Insert(index, NewUser)
      End If
    End Sub

    Public Sub Remove(ByVal aUser As User)
      InnerList.Remove(aUser)
    End Sub

    Public Function Contains(ByVal aUser As User)
      Return InnerList.Contains(aUser)
    End Function

    Public Function IndexOf(ByVal aUser As User)
      Return InnerList.IndexOf(aUser)
    End Function

    Public Function Add(ByVal NewUser As User) As Integer
      If IsExist(NewUser) = False Then
        Return InnerList.Add(NewUser)
      End If
    End Function

    Default Public Overloads ReadOnly _
       Property Item(ByVal index As Integer) As User
        Get
            Return CType(innerList.Item(index), User)
        End Get
    End Property

#End Region

#Region " Business Rules "

    Private Function IsExist(ByVal newUser As User) As Boolean
      Dim aUser As User

      For Each aUser In Me
        If aUser.Id = newUser.Id Then
          Return True
        End If
      Next

      Return False
    End Function

#End Region

  End Class

Här är lite fler länkar också
http://weblogs.asp.net/Plip/archive/2004/04/11/111128.aspx
http://www.15seconds.com/issue/030429.htm
http://www.15seconds.com/issue/040210.htm
http://tim-price.net/blog/category/10.aspx
http://builder.com.com/5100-6373-1050004.html#Listing A

Medlem sedan okt. 20005 273 inlägg
#7

Ok.....jag tror jag händer med. Men, och det finns väl alltid ett men.

Om jag använder mig av exemplet på http://weblogs.asp.net/plip/articles/111125.aspx och sedan ska använda den collectionen med en ORMapper....blir det

[red]
IList myColl = GetCollection(typeof(mystronglyTypedCollection), typeof(Ja vad blir det här??),string.Empty);
[/red]

mv icaaq

Medlem sedan apr. 2004778 inlägg
#8

Frågan är om du behöver Collections när du använder en ORMapper. Plockar inte ORMappern ut en egen collection av objekt?

Medlem sedan okt. 2002188 inlägg
#9

Hej

intressant fråga tänkte skriva något liknanden igår men orkade inte..

"Använder ni collectioner eller skickar ni datat till presentationslagret i någon annan form? typ dataset eller datatables??"

Innan var jag helt inne på att använda mig av datasets, då jag trivs bättre med entities istället för datasets i affärslagert. Så om jag har en lista med orders så har jag GetOrders() som returnerar en readonly OrdersArrayList som jag genererat med codesmith. Detta fungerar helt perfekt i de flesta fallen, men när jag skall binda datan till vissa griddar så måste jag i varje rad lägga till ett par kolumner för att få kunna få in dem i mina griddar. Då blir mina typad collections mao värdelösa mer eller mindre. De griddarna som jag använder fungerar jekligt bra med datasets, så det blev en mix, jag har en klass mellan mitt bll och pl, som omformar mina samlingsobjekt till exempelvis datasets om jag nu vill använda det, behöver jag inte de extra kolumnerna så kan jag bara skicka vidare min typad lista till PL. Jag vet inte om detta är den snyggast lösningen men det känns bra att ha ett litet objekt mellan bll å pl, men samtidigt känns det lite overkill i vissa situationer. Så nu har det blivit en mix av ds å listor med objekt som jag skickar till pl. BL har alltid rena objekt å dl är oftast en o/r-mapper. Man kunde gjort en speciell arraylist som ha de här extra kolumnerna men ds går så snabbt att skapa med vs.net

Det som känns fel är att jag nu har både listor och ds i systemet, men hanteringen av affärsregler och objekt känns för mig överlägsen mot att ha separata valideringsobjekt. Samtidigt tycker jag den struktur, stabilitet å flexibilitet som man får en objekt domän modell är suveränt. Det som känns rätt är att jag fått en separation mellan PL å BLL som är väldigt nice. Vill jag tex byta ut mot BLL mot dataset så kan jag göra detta, vill jag att det skall vara en typ av formatering av ett värde i pl så gör jag det, uppdaterat jag fältet så tar mellanobjektet hand om hur det skall formateras i bll, vill jag byta ut bll mot att använda sps så blir detta inte heller några problem. (tror jag :) )

" Jag har för det mesta när jag fyllt mina object jobbat med collectioner(ArrayLists). Men när jag nu börjat kolla på ORMappern så tänkte jag höra med er hur ni gör?"

De flesta O/R-mappers returnerar väl interfaces som IList å IDictionary?

(tänk vad mycket diskussioner dataset vs objekt har genererat)

Medlem sedan okt. 20005 273 inlägg
#10

Intressant läsning...Kan dock inte köra trial & error föräns ikväll......mer åsikter godtages dock .....

mv icaaq

Medlem sedan maj 20012 812 inlägg
#11

PDahlen:
Om du gör som du gör så måste du bygga en ny Collection för varje typ av klass du har, alltså en User, UserCollection, Customer CustomerCollection osv osv... Visst blir det starkt typade men extremt mycket kodande/genererande.

Snyggast lösning är som sagt med generics som endast använder sig av en collectionclass som alla typer av klasser kan använda som sin collection, eller så har man bara en collectionclass och så gör man typomvandlig när man hämtar ut datan från den collection eller så gör man som du gjort...

icaaq:
För att hämta en collection från din ORMapper så gör du följande:

FooCollection myCollection = (FooCollection)ORMapper.Load(typeof(FooCollection), VILKOR);

Beroende på ditt vilkor som skickas in så hämtas en mängd data från databasen och sedan skapas massor med Foo object och en FooCollection skapas där man lägger dessa alla Foo objekt i, till sist så returneras en CollectionBase från ORMappern som måste castas till din FooCollection när du sedan tar emot den.

Walker:
Skulle misstänka att de flesta ORMapper returnerar egna collectionklasser eller interface, iallafall så gör jag så med min, då jag saknar visa funktioner i den interface som finns i .NET och om jag returnerar ett egen definerat collectionobject så kan jag enkelt lägga till funktioner när jag känner att jag vill plocka ut 10 stycker slumpvalda object från min collection. Eller om det är så att jag endast vill hämta varannat object från collectionen. Om jag använder mig av de Interface som .NET ställer upp med så måste dessa ändå kaplas in med egna klasser för att skapa dessa funktioner och då kan de lika gärna ligga i min collectionbase.

- M

Medlem sedan okt. 20005 273 inlägg
#12

En liten snabb fråga mellan era tankar. Är det helt fel att fylla mina BusinessObjects så här:

[red]
ICollection contacts = myManager.GetCollection(typeof(ArrayList), typeof(Category), string.Empty);[/red]

För att sedan skicka min ICollection(contacts) till PL??

mv icaaq

Medlem sedan okt. 2002188 inlägg
#13

Gladh: Ok, men då måste dina klasser och alla andra som använder dessa ha vetskap om vilka samlingsobjekt, interface som du använder dig av. Men eftersom du använder Collectionbase som redan har implementerat IList så kvittar det ju. Allt handlar om tycke å smak, bara man trivs med det som man jobbar med.

icaaq:
Jag tycker att sånt här handlar mycket om tycke å smak.

Själv skulle jag ha
myManager.GetList(typeof(myObject), criteria) eller kanske

myManager.GetAll(typeof(myObject))

Medlem sedan maj 20012 812 inlägg
#14

Gladh: Ok, men då måste dina klasser och alla andra som använder dessa ha vetskap om vilka samlingsobjekt, interface som du använder dig av. Men eftersom du använder Collectionbase som redan har implementerat IList så kvittar det ju. Allt handlar om tycke å smak, bara man trivs med det som man jobbar med.

Det stämmer, men är egentligen inget problem eftersom hela min applikation i alla lager (nästan) måste känna till åtminstånde Interfacen till mina klasser, så du tycker inte jag det spelar så stor roll att jag skickar med min egen collectionbase.

icaaq:
Precis som walker säger så finns inget som är rätt eller fel, man gör det som man själv bäst trivs med, sedan finns det en massa tycke och smak, men som sagt ORMapperns vara eller icke vara är ju också omdiskuterad. Gör det som du tycker verkar bäst, och är du inte nöjd så gör om :)

- M

271 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)