[.Net/DB/Winforms]Welk deel van applicatie wordt gegenereerd

Pagina: 1
Acties:

  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
Ik ben al een tijdje bezig met het evalueren van diverse DAL's... Dit is echter niet zo evident; men moet meestal nog zelf de code genereren etc, en dit dan met verschillende generators (efbe's tool / codesmith / olymars/ ... ); informatie is her en der verspreid over het net...

Om dit te vereenvoudigen lijkt het me interessant een topic hierover op te zetten.

Ik heb een eerste projectje aangemaakt (VS.net 2005 Beta) dat werkt met Typed DataSets.
Wat is nu de bedoeling : vervang in deze oplossing alles wat je normaalgezien genereert (zowel extra abstractie layers als form als ...). De enige voorwaarde is dat het concept hetzelfde blijft :
Een winforms app toe het toelaat om orders te wijzigen in de northwind database.
Toon ook aan wat voor code nodig is om het gegenereerde in je app te integreren door deze code te quoten...

Alle gesubmitte voorbeelden zouden er dus als volgt moeten uit zien :

Zip-file : c# 2.0 Typed Datasets
Gegenereerd met : Visual Studio 2005 Beta 1

Toegang tot gegenereerde code :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
        #region DAL

        #region Members used by the DAL

        private NorthwindDataSet northwindDataSet;
        private DataConnector FK_Order_Details_OrdersDataConnector;
        private DataConnector northwindDataSetDataConnector;
        private DataConnector CustomersDataConnector;
        private DataConnector OrdersDataConnector;
        private OrdersTableAdapter ordersTableAdapter;
        private CustomersTableAdapter customersTableAdapter;

        #endregion

        private void LoadData()
        {
            const string connStr=
                "Server=127.0.0.1;Integrated Security=True;Database=Northwind";
            northwindDataSetDataConnector = new DataConnector();
            CustomersDataConnector = new DataConnector();
            OrdersDataConnector = new DataConnector();
            FK_Order_Details_OrdersDataConnector = new DataConnector();
            northwindDataSet = new NorthwindDataSet();
            ordersTableAdapter = new OrdersTableAdapter();
            customersTableAdapter = new CustomersTableAdapter();


            // set DataConnectors
            northwindDataSetDataConnector.DataSource = this.northwindDataSet;
            CustomersDataConnector.DataMember = "Customers";
            CustomersDataConnector.DataSource = this.northwindDataSetDataConnector;
            OrdersDataConnector.DataMember = "Orders";
            OrdersDataConnector.DataSource = this.northwindDataSet;
            FK_Order_Details_OrdersDataConnector.DataMember = "FK_Order_Details_Orders";
            FK_Order_Details_OrdersDataConnector.DataSource = this.OrdersDataConnector;
            
            ordersTableAdapter.ClearBeforeFill = true;
            customersTableAdapter.ClearBeforeFill = true;

            ordersTableAdapter.Connection.ConnectionString = connStr;
            customersTableAdapter.Connection.ConnectionString  = connStr;

            ordersTableAdapter.Fill(northwindDataSet.Orders);
            customersTableAdapter.Fill(northwindDataSet.Customers);

            dataNavigator1.DataConnector = OrdersDataConnector;
        }

        private void BindData()
        {
            txtID.DataBindings.Add(new Binding("Text", OrdersDataConnector, "OrderID", true));

            cmbCustomer.DataBindings.Add(new Binding("SelectedValue", OrdersDataConnector, "CustomerID", true));
            cmbCustomer.DataSource = CustomersDataConnector;
            cmbCustomer.DisplayMember = "ContactName";
            cmbCustomer.ValueMember = "CustomerID";
            
            dataGridView1.DataSource = FK_Order_Details_OrdersDataConnector;
        }

        private void SaveData()
        {
            this.ordersTableAdapter.Update(this.northwindDataSet);
            this.customersTableAdapter.Update(this.northwindDataSet);
        }

        private void RevertData()
        {
            this.northwindDataSet.RejectChanges();
        }


        #endregion


De bedoeling is dus niet om hierover opmerkingen te horen in de trant van 8)7 |:( _/-\o_ , maar eerder om iedereen voor zichzelf een mening te laten vormen.

Naast dal's zijn hier natuurlijk ook n-tier-voorbeelden volledig welkom

Zaken die ik graag wel eens zou zien : ORM/CSLA/CSLA active objects/....
Misschien heeft er zelfs iemand het Enterprise/User Interface application block ?

[ Voor 17% gewijzigd door D4Skunk op 08-04-2005 16:28 . Reden: Verbreding van onderwerp : van DAL -> alles wat gegenereerd wordt (na enkele opm van whoami) ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:02
Offtopic, maar typed datasets en datasets in het algemeen vind ik stinken.
maar eerder om iedereen voor zichzelf een mening te laten vormen.
Klinkt wel zo katholiek.... Doet me denken aan biechten...

[ Voor 49% gewijzigd door whoami op 08-04-2005 16:08 ]

https://fgheysels.github.io/


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
whoami schreef op vrijdag 08 april 2005 @ 16:03:
Offtopic, maar typed datasets en datasets in het algemeen vind ik stinken.
De bedoeling is dus niet om hierover opmerkingen te horen in de trant van ...
Dus...

Misschien is het iets constructiever om te vertellen wat voor n-tier-techniek jij hiervoor gebruikt, en evt. een voorbeeldje te submitten ? >:)

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:02
Wat ik bedoel met m'n opmerking over datasets is dat je daarmee gewoon geen echt 'domein' kunt maken.
Het zijn gewoon 'place-holders' voor je data, en verder niets. Ik kan het niet aanzien als 'objecten', want ze stellen enkel de data voor. Je kan er geen functionaliteit in kwijt.
En je data wordt op zo'n manier voorgesteld die veel te dicht ligt bij de manier waarop je de data in de DB opslaat.
Daarom kan er ook in dit geval niet echt sprake zijn van ORM.

Wat bedoel je met csla ? Bedoel je dat framework van Rockford Lothka ?

https://fgheysels.github.io/


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
@whoami :

Volledig akkoord, vandaar ook dat de titel duidt op DAL's en niet op ORM systemen zoals Lothka's CSLA....

Typed datasets : ik ben er zelf ondertussen ook niet meer zo 100% van overtuigd, je gaat nl. eerder met het relationeel model gaan werken dan met het object-model.

aanvulling : een vriend wist mij te melden dat je heel wat kan doen met partial classes mbt de functionaliteit van je classes. Alle custom code komt terecht in een andere file, dus de ene file wordt adhv het model gegenereerd, terwijl in de andere alle custom code gewoon blijft staan...


Mij gaat het er echter eerder om te kunnen zien in welke mate het praktisch is om programmacode te genereren, en hoe dit in een concrete toepassing in zijn eenvoudigste vorm eruit ziet.

Volgens mij kan ik echt niet de enige zijn die één of andere vorm van automatisch genereren gebruikt naar data access/business layers/evt zelfs forms (o.a. OlyMars ) toe.

De vraag is of jij dus code genereert, en zo ja, of je er een voorbeeldje van kan maken binnen de gegeven context (=northwind orders).

Ik hoop eigenlijk wel eens iets concreet van efbe te zien... Lijkt me dat hij 1 v/d voorstanders van deze methodes moet zijn...

[ Voor 16% gewijzigd door D4Skunk op 08-04-2005 16:36 . Reden: zie aanvulling... ]


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
Hmmz...

Maandag !! wakker worden jongens & meisjes !!!

(Bescheiden kickje :) )

Verwijderd

De (zelf ontwikkelde) DAL die ik nu gebruik is 2.8MB aan source, dus laat ik die maar niet plaatsen. Bovendien vindt m'n baas dat niet zo'n goed idee, denk ik. :)
Verder is 'ie geschreven in Delphi, en maakt 'ie geen enkel gebruik van de ingebouwde databinding / data aware controls die Delphi biedt. Dat doe ik liever zelf...

Oftewel, leuk onderwerp, maar in deze vorm (C#, databinding) kan ik er vrij weinig aan bijdragen. Maar ik blijf 't topic wel volgen. :)

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Nou de code om de gegenereerde code te gebruiken is een paar regels, echter je hebt het in vs.net 2005 gedaan en dat heb ik hier niet (behalve een brakke CTP) en ga daar ook nu geen tijd aan verknoeien. Verder ben ik nog niet zo thuis in wat ze hebben bedacht voor 2.0 databinding (en dat wisselt ook met de dag zowat).

Als je een voorbeeld zoekt die orders wijzigt in de northwind db:
http://www.llblgen.com/pages/examples.aspx

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
@afterlife :
Misschien kan je wel de source niet posten, maar toch wel een summiere beschrijving hoe alles in zijn werk gaat ? Ik ben echt wel geïnteresseerd in alle mogelijke aanpakken, om er vervolgens de beste uit te kiezen ;)

@efbe :
Ik heb het northwindvoorbeeld eens bestudeerd... ziet er nice uit...
Ik heb eerlijk gezegd nog niet met jouw tool gewerkt :o , ik heb tot nu toe altijd m'n flexibele framework gebruikt (screenshot te zien in [rml][ C# winforms workflow]User interface implementatie[/rml]), dus ipv code aan te passen schreef ik gewoon generieke code die zich aan de db aanpaste. Ik heb dit topic gestart omdat het me wel interessant leek mijn horizon wat te verruimen.
Heb je klanten die met je systeem hun gui ook genereren, of gaat dit te ver ?
Trouwens, slightly off-topic : wat vind je van partial classes t.o.v. code-generatie ? (Voor iemand zoals ik die maar oppervlakkig bezig is met codegeneratie lijkt me dit een zegen.)
Ken jij trouwens olymars ? Hoe verhoud jouw produkt zich hiertegenover ? Of tegenover Deklarit ? Ik zal maar eerst ff jouw FAQ gaan lezen ipv al je tijd hier in beslag te nemen... 8) Ik ben momenteel ff aan het checken of ik niet, ipv mijn framework te gebruiken, mijn apps (grotendeels/volledig) zou gaan genereren...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:56

gorgi_19

Kruimeltjes zijn weer op :9

Ken jij trouwens olymars ? Hoe verhoud jouw produkt zich hiertegenover ? Of tegenover Deklarit ? Ik zal maar eerst ff jouw FAQ gaan lezen ipv al je tijd hier in beslag te nemen... Ik ben momenteel ff aan het checken of ik niet, ipv mijn framework te gebruiken, mijn apps (grotendeels/volledig) zou gaan genereren...
Discussies over zaken: prima :) Wordt het hier een marketingverhaal, dan gaat deze dicht :) Sowieso blijft de eis van zelfwerkzaamheid, zoals genoemd in de quickstart, bestaan :)

[ Voor 10% gewijzigd door gorgi_19 op 11-04-2005 14:52 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
offtopic:
@gorgi_19 : My humble apologies O-)

  • EfBe
  • Registratie: Januari 2000
  • Niet online
D4Skunk schreef op maandag 11 april 2005 @ 14:47:
@efbe :
Ik heb het northwindvoorbeeld eens bestudeerd... ziet er nice uit...
Ik heb eerlijk gezegd nog niet met jouw tool gewerkt :o , ik heb tot nu toe altijd m'n flexibele framework gebruikt (screenshot te zien in [rml][ C# winforms workflow]User interface implementatie[/rml]), dus ipv code aan te passen schreef ik gewoon generieke code die zich aan de db aanpaste. Ik heb dit topic gestart omdat het me wel interessant leek mijn horizon wat te verruimen.
Heb je klanten die met je systeem hun gui ook genereren, of gaat dit te ver ?
Ja, die zijn er.
Trouwens, slightly off-topic : wat vind je van partial classes t.o.v. code-generatie ? (Voor iemand zoals ik die maar oppervlakkig bezig is met codegeneratie lijkt me dit een zegen.)
Een zeer welkome aanvulling :)
Ken jij trouwens olymars ?
Ja olymars ken ik. Zoals iemand ooit zei: "If the manual for condoms was written by the manual writer of Olymars we would all have died of AIDS by now".
Hoe verhoud jouw produkt zich hiertegenover ?
Olymars is een stored proc oriented generator met een niet al te toegankelijke interface/gui...
Of tegenover Deklarit ?
DeKlarit is gericht op / gebruikt datasets en heeft geen SQL engine, maar genereert statements direct in de code. Ik vind de gui niet zo, je bent veel tijd kwijt en sommige dingen wil je in code doen, maar anderen vinden het weer geweldig. Wat DeKlarit (nog) wel heeft is een manier om per type expressions te definieren, en rules. het is wel wat knullig gedaan soms, maar het werkt op zich wel aardig. Met (nog) bedoel ik, dat zij nu nog de enigen zijn die het zo hebben ;)
Ik zal maar eerst ff jouw FAQ gaan lezen ipv al je tijd hier in beslag te nemen... 8) Ik ben momenteel ff aan het checken of ik niet, ipv mijn framework te gebruiken, mijn apps (grotendeels/volledig) zou gaan genereren...
Complete apps genereren zal sowieso niet gaan. Je schermen representeren functionaliteit, en zijn data consumers. Dit houdt in dat wanneer je schermen vanuit de entities genereert, je grote kans loopt dat de schermen niet matchen met de functionele units die ze moeten representeren. Je komt wel een heel end met code generatie, maar een goede user-interface genereren is ondoenlijk.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Topicstarter
EfBe schreef op maandag 11 april 2005 @ 18:52:

[...]

Complete apps genereren zal sowieso niet gaan. Je schermen representeren functionaliteit, en zijn data consumers. Dit houdt in dat wanneer je schermen vanuit de entities genereert, je grote kans loopt dat de schermen niet matchen met de functionele units die ze moeten representeren. Je komt wel een heel end met code generatie, maar een goede user-interface genereren is ondoenlijk.
Allereerst bedankt voor de uitgebreidde antwoorden.
Ondoenlijk ... dat woord werkt op mij net als een rode lap op een stier :P
offtopic:
Ik denk dat je veel meer dan enkel je DAL kan genereren, wanneer je je app iets zou aanpassen (hint : waarom enkel het metamodel v/d database als bron gebruiken). Anderszijds kan je naturlijk ook denken : schoenmaker, blijf bij je leest...
Gezien de waarschuwing van gorgi_19 - volledig terecht trouwens -, denk ik dat het beter is om deze discussie hier niet voort te zetten. Mocht het je interesseren, stuur me eens een mailtje, dan leg ik je wel uit wat ik bedoel.


Zijn er, naast mensen die code genereren, ook mensen die generieke code gebruiken ? Laat maar horen :) Alle methodes die je het apenwerk besparen zijn welkom...
Pagina: 1