Standaard oplossingen:
EntityBroker
Objectz.NET
nog zoiets: http://www.pragmatier.com/
EntityBroker
Objectz.NET
nog zoiets: http://www.pragmatier.com/
[ Voor 12% gewijzigd door Scare360 op 12-02-2003 11:48 ]
[ Voor 12% gewijzigd door Scare360 op 12-02-2003 11:48 ]
[ Voor 4% gewijzigd door Alarmnummer op 11-02-2003 22:42 ]
Als je houttype nodig hebt, haal je dat op uit de database ja. In sommige theoretische situaties wellicht trager, maar de keerzijde van de medaille is dat je de data in een centrale storage moet opslaan buiten de database, die threadsafe is. In een webapplicatie is die er eigenlijk niet, behalve de database.Alarmnummer schreef op 11 February 2003 @ 21:28:
Maar als je dus werkt met een stateless applicatie dan hou je dus nooit objecten zelfs in het geheugen? Als je bv een houttype hebt, met een bijbehorende prijs, dan ga je die iedere keer opnieuwe uit de database halen of ga je hem toch cachen (met als gevolg dat je wel met een dirty houttype kan blijven zitten omdat er tussentijd een update is geweest mbt de prijs).
Je kunt per user wel dingen bewaren, die behoren dan tot de userstate, bv de stappen van een wizard. Maar je moet t.a.t. voorkomen dat je data die gedeeld moet kunnen worden tussen users (dus A wijzigt info en B heeft die gewijzigde info nodig) in memory gaat houden, want dat wordt te complex om efficient en onderhoudbaar te bouwen: code heeft dan niet 1 bron van gegevens maar een veelvoud.En op dit moment zit ik nog met een andere applicatie in mijn hoofd. Ik heb ooit eens een applicatie gemaakt waarin je trappen kon samenstellen en deze trap objecten waren vrij complex. Ik loop hier nog regelmatig over na te denken om dat ik zo 1001 dingen weet die voor verbetering vatbaar zijn.
Ik zou het logischer vinden om deze objecten gewoon in het geheugen van mijn applicatie te houden omdat er bv ook van alles gevisualiseerd moet worden en dan pas aan het einde in 1 run te gaan saven. Ik weet verder wel dat alle trap objecten naar de database gestuurd kunnen worden, en dat bv de houttypes niet gesaved hoeven te worden (daarvoor moet je ergens anders zijn), maar dan moet je overal weer rekenining mee houden. En verder is het niet overal even duidelijk.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Whoa, als dat niet traag is als dikke kak in een te nauwe trechter dan weet ik het ook niet meer
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Verwijderd
LordLarry schreef op 11 February 2003 @ 10:29:
Er worden weldegelijk kant en klare raamwerken geleverd. Vaak alleen niet de presentatie laag, omdat dit zeer kan verschillen per programmeertaal. Delphi heeft wel enkele complete raamwerken op dat gebied.
Beargumenteer dat eens. Niet dat het niet zo is, maar toch...EfBe schreef op 11 februari 2003 @ 22:55:
[...]
Whoa, als dat niet traag is als dikke kak in een te nauwe trechter dan weet ik het ook niet meer
Heb daarnet even Objectz.NET geinstalleerd....wat een *** programma zeg!
[ Voor 4% gewijzigd door PhoneTech op 12-02-2003 08:41 ]
Mapping is nog tot daar aan toe, als je de mapping maar in compiled code hebt. (dus bv een class die datatable fields copieert naar class properties en vice versa). Hier echter gebruiken ze XML voor de mapping. Bij elk gebruik van de mapping moet je dus de XML doorploegen, om de mappings tot stand te brengen. Nu weet ik het niet, maar dat is toch wel erg veel overhead. Sommige LLBLGen gebruikers zitten met tables met meer dan 100 kolommen. (!) Dat performt voor geen meter met grote XML files die bij elk access moeten worden geinterpreteerd. Het idee van die mappings is goed en logisch, het zou alleen niet in xml moeten worden uitgevoerd maar in code die gecompileerd wordt in het project.paulgielens schreef op 11 February 2003 @ 23:24:
[...]
Beargumenteer dat eens. Niet dat het niet zo is, maar toch...
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
paulgielens schreef op 12 February 2003 @ 09:19:
Ik denk dat er eerder behoefte is aan een "real-life" example. Alle voorbeelden op MSDN zijn web-based en vaak toch_net iets anders dan je in het normale leven tegen komt.
Een demo applicatie n-tier (DAL, OOP, BLL, BFAC, USL (desktop & web) zou wenselijk zijn.
https://fgheysels.github.io/
Verwijderd
Microsoft hanteert in de praktijk een redelijke minimalistische kijk op N-tier ontwikkeling. Beste voorbeeld hiervan is de Microsoft her-implementatie van de J2EE Petstore. Waar Sun koos voor een theoretisch heel mooi N-tier model gebasseerd op EJB's koos Microsoft voor een meer praktische oplossing.paulgielens schreef op 12 February 2003 @ 09:19:
Een demo applicatie n-tier (DAL, OOP, BLL, BFAC, USL (desktop & web) zou wenselijk zijn.
MS heeft die ombouwing 'verneukt' om de snelheid van .NET aan te tonen. Niet om een goed n-tier applicatie op te zetten.Verwijderd schreef op 12 February 2003 @ 17:31:
[...]
Microsoft hanteert in de praktijk een redelijke minimalistische kijk op N-tier ontwikkeling. Beste voorbeeld hiervan is de Microsoft her-implementatie van de J2EE Petstore. Waar Sun koos voor een theoretisch heel mooi N-tier model gebasseerd op EJB's koos Microsoft voor een meer praktische oplossing.
De resultaten waren duidelijk: dramatisch beter perf en, misschien nog wel belangrijker, grote verschillen in de LOC (lines of code) nodig om dezelfde functionaliteit te bouwen.
Hier ben ik het niet geheel mee eens. N-tier zorgt ervoor dat je veel 'onafhankelijker' werkt. Als je naast een Web interface ook een Windows of Mobile interface nodig hebt, dan hoef je enkel een presentatie laag te schrijven voor deze UI's. Als je data uit andere gegevensbronnen moet kunnen halen, dan hoef je enkel voor die data-sources een bijkomende data-layer te schrijven.Moraal van het verhaal: in veel gevallen zijn N-tier applicaties een hele goede oplossing om complexe problemen op te lossen, maar gebruik geen N-tier "for N-tier's sake": voor heel veel scenario's is een simpele 2-tier oplossing (GUI-DB) voldoende, zeker als je bijv. met ASP.NET of WinForms al een scheiding kunt maken tussen GUI design en events, waardoor je misschien zou kunnen spreken van een 2.5 tier oplossing: (GUI(Events)DB).
Dat doet natuurlijk niets af aan het feit dat het slim is om goed naar architectuurvoorbeelden te kijken en waar nodig deze te gebruiken in je eigen applicaties, wat ik wil zeggen is dat in dit soort discussies het KISS principe (Keep It Simple, Stupid) vaak vergeten wordt.
https://fgheysels.github.io/
Verwijderd
Dat ligt er maar net aan van welke kant je het bekijkt. Je zou ook kunnen zeggen dat Sun's Petshop, die inderdaad als reference applicatie zo in elkaar is gezet dat veel 'best practices' op het gebied van enterprise applicaties erin gebruikt zijn, misschien wel overkill was op dat gebied.whoami schreef op 12 February 2003 @ 17:56:
[...]
MS heeft die ombouwing 'verneukt' om de snelheid van .NET aan te tonen. Niet om een goed n-tier applicatie op te zetten.
Mijn punt is: Soms (vaak?) is die mooie scheiding niet nodig. Kijk eerst goed naar de applicatie die je moet bouwen om te beoordelen of de N-tier aanpak de juiste is. Ik denk dat we het wel eens kunnen worden dat de N-tier aanpak pas bij een bepaald complexitieitsniveau zijn vruchten gaat afwerpen. Onder dat niveau is het vooral lastig: veel extra code (ref:Petshop), veel extra complexiteit, minder performance.N-tier zorgt ervoor dat je veel 'onafhankelijker' werkt. Als je naast een Web interface ook een Windows of Mobile interface nodig hebt, dan hoef je enkel een presentatie laag te schrijven voor deze UI's. Als je data uit andere gegevensbronnen moet kunnen halen, dan hoef je enkel voor die data-sources een bijkomende data-layer te schrijven.
Als je echter ook business logica opneemt in de WinForms of in de WebForms (in de presentatie-laag dus), dan heb je gewoon veel meer werk als er een nieuwe presentatie-laag bijkomt. Je hebt dan trouwens ook geen duidelijke scheiding meer.
BLL bevat de juiste methoden om de informatie op te vragen, zeg maar:Martin Fowler geeft in z'n boek trouwens een voorbeeldje;
Stel, je hebt een applicatie die orders beheert van klanten. Stel dat je de klanten die een ordertotaal hebben van > 10000 euro in het groen wilt zetten, waar (in welke laag) ga je dat doen, en waarom?
Hoe zou jij daar op antwoorden?
1
| Customer[] GetCustomersByTurnover() {...} |
Niet mee eens dus. Je moeten binnen de restricties van het budget en de tijd de best mogelijke applicatie bouwen. Iedereen die N-tier kan ontwikkelen kan ook een eenvoudiger oplossing bouwen (andersom is zeker niet het geval!) en soms is dat de enige optie gezien de eerdergenoemde restricties.'t Is maar te zien wat je simpel vind. Als je een duidelijke scheiding tussen de verschillende lagen simpel vind, dan moet je het zo doen. Het verhoogt alleszins het abstractie-niveau.
Als jij een bestaande webapplicatie ook naar een Windows versie moet porten, dan ga je veel werk hebben als die applicatie niet in lagen opgebouwd was.
Nee. De petshop van Sun was bedoeld als illustratief voorbeeld hoe je een multi-tier applicatie met java zou kunnen maken, en de nadruk lag op het educatieve, het illustratieve. Zoals bij F&M en IBuySpy dat ook zo is. Die zijn ook intern niet echt je van het, maar zijn ook niet bedoeld als kick-ass implementaties, maar als illustratie, hoe zou het kunnen worden gedaan. Dat de petshop naar .NET is geport is leuk, maar niet meer dan dat.Verwijderd schreef op 12 februari 2003 @ 21:49:
Hartstikke leuk hoor, al die layers, maar denk je nou echt dat het dhr. McNealy (de eigenaar van de Sun Petshop) een moer kan schelen dat zijn Petshop helemaal perfect multitier is opgezet? Ik denk dat hij eerder jaloers is op de Petshop van dhr. Gates aan de overkant, die op dezelfde hardware een veelvoud van het aantal transacties kan uitvoeren terwijl de applicatie aanmerkelijk goedkoper is (ervan uitgaande dat >LOC == >prijs, een hele redelijke aanname toch?)
Nee. Complexiteit neemt t.a.t. af in een n-tier applicatie. Flexibiliteit neemt toe en de onderhoudbaarheid ook. Ik zal dat in een posting hieronder toelichten door het posten van het n-tier artikel dat ik geschreven heb in de LLBLGen handleiding.Mijn punt is: Soms (vaak?) is die mooie scheiding niet nodig. Kijk eerst goed naar de applicatie die je moet bouwen om te beoordelen of de N-tier aanpak de juiste is. Ik denk dat we het wel eens kunnen worden dat de N-tier aanpak pas bij een bepaald complexitieitsniveau zijn vruchten gaat afwerpen. Onder dat niveau is het vooral lastig: veel extra code (ref:Petshop), veel extra complexiteit, minder performance.
Dat zijn 2 dingen die tijdens verschillende stadia van een ontwikkeltraject naar voren komen, niet in hetzelfde stadium. 'Hoe kan ik mijn klant zo goed mogelijk van dienst zijn' komt naar voren tijdens de ontwerpfase, waarbij je functioneel en technisch onderzoek doet. Als die fase is afgerond komen pas de vragen hoe je het beste de gewenste functionaliteit kunt realiseren. 'beste' wordt in die fases gedefinieerd, ook aan de hand van de klant. Echter, de voordelen van n-tier development zijn uniform en 'klant-onafhankelijk'. Sterker: de klant heeft geen ruk te maken en MOET ook geen ruk te maken hebben met implementatie-details. De klant bestelt functionaliteit. Die krijgt de klant. Hoe dat wordt gerealiseerd is voor de klant niet belangrijk, zolang de bestelde functionaliteit maar beantwoord aan de vraag die de klant had en blijft beantwoorden aan die vraag.Uitgangspunt voor de te bouwen applicatie is niet 'hoe kan ik mijn applicatie zo goed mogelijk in elkaar zetten' maar 'hoe kan ik mijn klant zo goed mogelijk van dienst zijn'. De beste technische oplossing is niet noodzakelijkerwijs ook de beste 'business' oplossing: dat is pas Business Logic.
Noem mij 1 voorbeeld van een applicatie die je voor een klant zou maken waar n-tier niet zou voldoen. Let op: een gui app voor single user met eventhandle code NIET direct achter de buttons is al 2-tier.Laat voorop staan dat dit vooral geen betoog is tegen N-tier ontwikkelen, ik ben volledig overtuigd van de voordelen van die aanpak, mits op de juiste tijd en plaats gebruikt.
Kennelijk snap je de ballen van n-tier applicaties. N-tier applicaties zijn juist simpeler te bouwen! Je hoeft nl. niet bezig te zijn met de spagetti van functionaliteit die in elkaar gevlochten zit in 1 executable. Je kunt abstract de grenzen bepalen van functionele groepen en die ook implementeren in delen van de applicatie (tiers) die jedaarvoor aanwijst, je weet dus waar welke functionaliteit is geimplementeerd. Dat weet je niet bij een grote logge 1-tier app, tenzij je alles opdeelt in libraries, maar wat is dan het verschil?[...]
Niet mee eens dus. Je moeten binnen de restricties van het budget en de tijd de best mogelijke applicatie bouwen. Iedereen die N-tier kan ontwikkelen kan ook een eenvoudiger oplossing bouwen (andersom is zeker niet het geval!) en soms is dat de enige optie gezien de eerdergenoemde restricties.
Wij weten het ook beter, want als de klant het zelf beter wist zou hij het niet bestellen bij ons, maar lekker zelf doen. De klant wil functionaliteit. De klant vraagt niet om 'geef me software'. Die vraagt om een OPLOSSING voor een PROBLEEM. Dat wordt geregeld door functionaliteit te leveren die die oplossing (veelal deels, de rest is organisatorisch) impliceert voor het probleem. Jij begaat de grote blunder door te stellen dat n-tier development automatisch inhoudt dat je met iets erg groots bezig bent en veelal tegen veel hogere kosten oploopt. Niets is minder waar. n-tier development heeft juist een versimpeling in zich van wat er gerealiseerd moet worden, en levert dus in zijn geheel niet een complexer systeem, dat later wordt opgeleverd en duurder is. Dit is geen gel*l van een theoreticus, ik heb zelf een aantal asp sites gebouwd in de tijd dat het net opkwam (zelfs nog 1 met idc's en htx's) waarbij alle code in de pages zat. 1-tier. Daarna alleen maar 3- / 5- tier apps gebouwd en wat een verademing. Qua tijd maakt het niets uit, want hergebruik van objects, de overzichtelijkheid en de flexibiliteit winnen het altijd. Je vergeet dat je ook bij een 1-tier applicatie de functionaliteit echt moet implementeren. Bij een n-tier applicatie heb je een beetje overhead, maar dat valt in het niet bij de voordelen van de n-tier constructie, o.a. hergebruik van de middle-tier objects in bv verschillende pages en de abstractie-levels die met n-tier development gepaard gaan.Jouw laatste punt (porten van web naar win) wil ik graag aangrijpen om met een voorbeeld duidelijk te maken wat ik bedoel:
Stel, jij hebt besloten om een nieuwe autootje te gaan kopen want je bent helemaal ziek van de NS. Na veel wikken en wegen heb je besloten een Toyota Starlet te gaan kopen (hey, it happens). Je komt bij de dealer met de mededeling dat je graag een Starlet wilt bestellen. De verkoper kijkt je denigrerend aan: "Maar meneer, een Starlet? Hoe moet dat dan straks als er kinderen komen? Die passen daar toch nooit in! Ik stel dus voor te gaan voor een grotere stationwagon, daar passen ze zeker in. Oh, trouwens, stel nou dat je een keer met die kids naar het bos wilt, dan kom je met die station vast te zitten in de modder. Geen probleem, gaan we kijken bij deze mooi LandCruiser! Is trouwens ook nog een stuk veiliger dan zo'n Starlet! Daar kun je de Paris-Dakar nog wel mee rijden! Heel verstandig meneer! Oh ja, die LandCruiser is wel pas over anderhalf jaar te leveren, maar da's geen probleem, want de trein is zo gek nog niet! Dit zouden wij van een autoverkoper nooit pikken, maar vreemd genoeg denken sommige IT'ers wel dat ze hun klanten op kunnen zadelen met een gigantische extra kostenpost en ellenlange oplevertermijnen. Allemaal vanuit het oogpunt dat wij het toch beter weten.
Waarom is knoeiwerk van een clubje prutsers dat toevallig de technologie verkeerd toepassen een argument om maar geen n-tier applicaties te bouwen? Ik meen het serieus als ik zeg dat iedere 'programmeur' die (limieten van de gebruikte software daargelaten, zoals php) voor een 1-tier model kiest bij een website, beter iets anders kan gaan doen, want prutsers hebben we genoeg in de IT, helaas.Een paar jaar geleden kon dit nog wel maar tegenwoordig is dit toch echt passe. Voor mij is EJB echt het paradepaardje van de arogante ontwikkelaar: je kunt er (theoretisch) echt de mooiste dingen mee bouwen, echt fantastisch. Echter, het kost gigantisch veel tijd en geld om er iets mee op te zetten en als het dan staat werkt het nog maar half (vergeleken met andere oplossingen). Zelf ben ik wat dat betreft meer gecharmeerd van de Microsoft aanpak: architectonisch een stukje minder, maar het werkt wel!
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
stylee schreef op 13 February 2003 @ 10:09:
offtopic:
Kunnen jullie mij goede literatuur aanraden over de hier besproken onderwerpen?
Dank
https://fgheysels.github.io/
[ Voor 20% gewijzigd door Alarmnummer op 13-02-2003 10:21 ]
Als je een multitier systeem gaat opzetten, dan is EJB zeer interesssant. Bij EJB hoef je je voornamelijk bezig te houden met de logica van het domein en zaken erom heen zoals concurrency, middelware etc worden allemaal voor je geregeld.Verwijderd schreef op 12 February 2003 @ 21:49:
Een paar jaar geleden kon dit nog wel maar tegenwoordig is dit toch echt passe. Voor mij is EJB echt het paradepaardje van de arogante ontwikkelaar: je kunt er (theoretisch) echt de mooiste dingen mee bouwen, echt fantastisch. Echter, het kost gigantisch veel tijd en geld om er iets mee op te zetten en als het dan staat werkt het nog maar half (vergeleken met andere oplossingen). Zelf ben ik wat dat betreft meer gecharmeerd van de Microsoft aanpak: architectonisch een stukje minder, maar het werkt wel!
[ Voor 3% gewijzigd door Alarmnummer op 13-02-2003 10:49 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
[ Voor 28% gewijzigd door Alarmnummer op 13-02-2003 11:02 ]
hehAlarmnummer schreef op 13 februari 2003 @ 11:01:
Ik had begrepen dat een extra voorwaarde aan een tier was dat de tiers op verschillende fysieke lokaties moesten staan. Maarja.. tis ook beetje miereneuken (waar we op /14 trouwens vaak erg goed in zijn)
[ Voor 17% gewijzigd door EfBe op 13-02-2003 11:28 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
The Clarion development paradigm provides dramatically faster, and easier application development... from prototyping to deployment of a production system, and ongoing application maintenance.
Clarion employs breakthrough, template driven technology to create sophisticated database-driven applications. Clarion is designed to help developers ensure standards, reduce coding time, eliminate errors, and bring their projects to completion in record time.
[ Voor 86% gewijzigd door Alarmnummer op 13-02-2003 11:37 ]
Ik vind het voor mezelf in ieder geval welk makkelijk om wel/geen netwerk onderscheid te maken zodat ik in iedergeval weet wat voor complexiteit ik voor de kiezen ga krigjen.EfBe schreef op 13 februari 2003 @ 11:25:
hehik zie dat niet zo zwart/wit hoor. n-tier development is een semantische zaak, niet een syntactische, dwz het is puur een methodiek die op een hoger niveau ligt dan het niveau waar implementatiedetails de grenzen bepalen.
Ik ken het fenomeen. Het proxy design patterns maakt dit mogelijk en dit wordt oa ook gebruikt voor RMI. Het probleem aan deze aanpak is dat je dan een erg fijnmazige interface het internet laat opkruipen met als gevolg dat je een enorme lading remote calls loopt te maken (zonder dat je er zelf misschien erg in hebt). Hierdoor zal je de performance van je applicatie gigantische problemen gaan ondervinden.Op veel platforms kun je overigens een layer in een library zo op een andere doos draaien en via remoting bv deze layer benaderen. Bv een COM object: plaats dat in MTS/COM+ op een andere doos, genereer een setup.exe mbv COM+ / MTS en installeer die setup op de client bak. Die maakt simpele monikers aan zodat de client denkt dat hij lokaal de COM objects benadert maar dat gewoon via DCom remote doet
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
| type TNieuwVolmachtForm = class(TForm,IMasterFrame) Label2: TLabel; RadioGroup1: TRadioGroup; StaticText1: TStaticText; StaticText2: TStaticText; CheckListBox1: TCheckListBox; StaticText3: TStaticText; StaticText4: TStaticText; Edit2: TEdit; StaticText5: TStaticText; StaticText6: TStaticText; Edit5: TEdit; StaticText7: TStaticText; StaticText8: TStaticText; StaticText9: TStaticText; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; StaticText10: TStaticText; StaticText11: TStaticText; StaticText12: TStaticText; Edit9: TEdit; Edit11: TEdit; StaticText13: TStaticText; ComboBox1: TComboBox; StaticText14: TStaticText; StaticText15: TStaticText; Edit3: TEdit; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Edit10: TMaskEdit; Edit4: TMaskEdit; Edit1: TMaskEdit; RadioGroup2: TRadioGroup; StaticText16: TStaticText; Panel4: TPanel; procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure BitBtn4Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure UpdateErfgenamenVolmachtInfo; procedure BitBtn3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure RadioGroup2Click(Sender: TObject); procedure CheckListBox1Click(Sender: TObject); private { Private declarations } m_volcode : integer; m_erfcode : integer; m_notcode : integer; procedure setVolCode(); overload; public { Public declarations } procedure setVolCode(volcode : integer); overload; procedure setErfCode(erfcode : integer); procedure setNotCode(notcode : integer); procedure Init(ErfCode : integer); procedure Clear(); procedure SaveQuery(); procedure UpdateQuery(); procedure LoadQuery(); procedure DeleteQuery(); procedure mySetEnabled(); end; var NieuwVolmachtForm: TNieuwVolmachtForm; RdGrpint : integer; genavona : string; genachna : string; delbool : boolean; implementation uses HoofdMenuFormUnit, DeleteDialogUnit; {$R *.DFM} procedure TNieuwVolmachtForm.setVolCode(volcode : integer); begin m_volcode:=volcode; end; procedure TNieuwVolmachtForm.setVolCode(); var s : string; c : c_string; begin getmem(c,20480); s:='SELECT '+ 'MAX(GevCode) '+ 'FROM '+ 'Gevol ;'; PasToC(s,c); db_do_sql_query(c,1); // 1 kolommen ophalen... if (db_next_row) then begin; db_do_get_value(0,c); m_volCode:=StrToInt(PasStr(c)); end; FreeMem(c); end; procedure TNieuwVolmachtForm.setErfCode(erfcode : integer); begin; m_erfcode:=erfcode; end; procedure TNieuwVolmachtForm.setnotCode(notcode : integer); var s : string; c : c_string; begin getmem(c,20480); s:='SELECT '+ 'NotCode '+ {1} 'FROM '+ 'Erflater WHERE ErfCode='+IntToStr(m_erfCode)+';'; PasToC(s,c); db_do_sql_query(c,1); // 28 kolommen ophalen... if (db_next_row) then begin; db_do_get_value(0,c); m_notCode:=StrToInt(PasStr(c)); end; FreeMem(c); end; procedure TNieuwVolmachtForm.Init(ErfCode : integer); var s : string; c : c_string; begin m_erfcode:=Erfcode; VertScrollBar.Position:=0; Clear(); delbool:=false; //23 januari 2003 if exebool then begin Radiobutton4.visible:=false; Radiobutton1.visible:=true; Radiobutton2.visible:=true; Radiobutton3.visible:=true; // Messagedlg('hallo',mtinformation,[mbok],0); end; if not exebool then begin Radiobutton4.visible:=true; Radiobutton1.visible:=false; Radiobutton2.visible:=false; Radiobutton3.visible:=false; end; getmem(c,20480); s:='SELECT Boedvol FROM Verklaar WHERE ErfCode='+IntToStr(m_erfcode)+';'; PasToC(s,c); db_do_sql_query(c,1); // Informatie uit 1 kolom ophalen if db_next_row then begin db_do_get_value(0,c); if PasStr(c)='0' then RadioGroup2.ItemIndex := 1; if PasStr(c)='1' then RadioGroup2.ItemIndex := 0; end; freemem(c); if (m_volcode<>-1) then begin LoadQuery; RadioGroup1Click(nil); RadioGroup2Click(nil); end else begin berekenerfdeel(m_erfcode); //alleen langstlevende geeft volmacht 31-01-2003 vh if erfvwbool then begin vulerfchecklistbox(checklistbox1,kanervenll,volmacht); end else begin vulerfchecklistbox(checklistbox1,kanervenenverwerptniet,volmacht); // vulerfcombobox(combobox1,kanervenenverwerptniet); // Messagedlg('kanervenverwerptniet',mtinformation,[mbok],0); end; //einde van toevoeging 31-01-2003 vh vulerfcombobox(combobox1,kanervenenverwerptniet); end; ComboBox1Change(nil); end; procedure TNieuwVolmachtForm.Clear(); begin RadioGroup1.ItemIndex:=-1; RadioGroup2.ItemIndex:=-1; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; end; procedure TNieuwVolmachtForm.UpdateErfgenamenVolmachtInfo; var s : string; c : c_string; i : integer; e : PErfDeelInfo; begin getmem(c,20480); for i:=0 to CheckListBox1.Items.Count-1 do begin e:=PErfDeelInfo(CheckListBox1.Items.Objects[i]); e^.volmacht:=CheckListBox1.Checked[i]; s:=format(e^.qvolmacht,[integer(e^.gevolmachtigde),integer(e^.volmacht)]); PasToC(s,c); db_do_sql_query(c,0); end; freemem(c); end; procedure TNieuwVolmachtForm.DeleteQuery(); var c : c_String; {de c string om op te slaan} s : string; {de pascal string} begin getmem(c,20480); s:='UPDATE Gevol SET '+ 'GevErfg=null,'+ 'GevNot=null,'+ 'GevExec=null,'+ 'GevDerde=null,'+ 'GevVoNa=null,'+ 'GevAcNa=null,'+ 'GevGeb=null,'+ 'GevGpl=null,'+ 'GevId=null,'+ 'GevAf=null,'+ 'GevNat=null,'+ 'GevAd=null,'+ 'GevPost=null,'+ 'GevPl=null '+' '+ 'WHERE Erfcode='+IntToStr(m_erfcode)+';'; PasToC(s,c); db_do_sql_query(c,0); // informatie uit 0 kolommen ophalen delbool:=true; s:='UPDATE Verklaar SET '+ 'BoedVol=null '+ 'WHERE ErfCode = '+intToStr(m_ErfCode)+' ;'; PasToC(s,c); db_do_sql_query(c,0); // Informatie uit 0 kolommen opslaan s:='DELETE DatumVol '+ 'FROM Nalaat '+ 'WHERE ErfCode = '+intToStr(m_ErfCode)+' ;'; PasToC(s,c); db_do_sql_query(c,0); // Informatie uit 0 kolommen opslaan FreeMem(c); // set de Form klaar voor een nieuwe entry m_volCode := -1; end; |
[ Voor 25% gewijzigd door Alarmnummer op 13-02-2003 12:45 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Verwijderd
Dit vind ik flauw. Maar goed, als je het zo wil spelen dan zal ik mijn stelling scherper stellen: Waar ik tegen protesteer is het onbeargumenteerd en overbodige gebruik van 'tiers'. Wat ik in sommige berichten las was dat N-tier ontwikkeling intrinsiek beter is dan niet N-tier ontwikkelen. Als je jouw bovenstaande definitie van N-tier ontwikkelen hanteert heb je gelijk, maar dan kom je wel heel erg snel in N-tier gebied terecht en is de hele discussie nutteloos.EfBe schreef op 13 februari 2003 @ 10:02:
Noem mij 1 voorbeeld van een applicatie die je voor een klant zou maken waar n-tier niet zou voldoen. Let op: een gui app voor single user met eventhandle code NIET direct achter de buttons is al 2-tier.
Precies, Petshop was de applicatie die mensen moest tonen hoe ze een EJB oplossing in elkaar moesten zetten. Dat maakt het des te kwalijker dat Sun zich overduidelijk te buiten is gegaan aan voornoemd 'architectionisme'. Zeker, de applicatie is schitterend verdeeld in lagen: GUI - BLL - DAL - DB. Maar waar heeft dit toe geleid. Kijken we naar Lines of Code:De petshop van Sun was bedoeld als illustratief voorbeeld hoe je een multi-tier applicatie met java zou kunnen maken, en de nadruk lag op het educatieve, het illustratieve.
[...]
Nee. Complexiteit neemt t.a.t. af in een n-tier applicatie. Flexibiliteit neemt toe en de onderhoudbaarheid ook. Ik zal dat in een posting hieronder toelichten door het posten van het n-tier artikel dat ik geschreven heb in de LLBLGen handleiding.
Ja ja, net zoals de klant in mijn voorbeeld de functionaliteit mobiliteit (=auto) bestelt en geen ruk te maken heeft met de precieze eigenschappen van die functionaliteit (grootte, complexiteit, flexibiliteit en meest belangrijk: prijs).Sterker: de klant heeft geen ruk te maken en MOET ook geen ruk te maken hebben met implementatie-details. De klant bestelt functionaliteit. Die krijgt de klant...
[...]
Wij weten het ook beter, want als de klant het zelf beter wist zou hij het niet bestellen bij ons, maar lekker zelf doen....
Beetje vriendelijker mag trouwens wel hoor, het is maar een discussie. Ik denk niet dat jij uit mijn reacties tot dusver over dit onderwerp kan opmaken of ik N-tier ontwikkeling wel of niet onder de knie heb, dus laat die blunders en ballen in het vervolg weg.Kennelijk snap je de ballen van n-tier applicaties....
[...]
Jij begaat de grote blunder door te stellen dat n-tier development automatisch inhoudt dat je met iets erg groots bezig bent en veelal tegen veel hogere kosten oploopt...
[ Voor 11% gewijzigd door Scare360 op 14-02-2003 08:49 ]
Waarom is die discussie dan nutteloos? Ik wil de prutsers die ook vandaag nog direct db code achter een button click event handler hangen niet graag de kost geven. Waar ik telkens op hamer is dat n-tier development een abstract begrip is, bedoeld voor applicatie designers. Developers, dus de code-kloppers zeg maar, vullen dan de tiers in. Wanneer de developer (dus de codetyper) gaat beslissen waar welke code moet komen, kun je NOOIT EN TE NIMMER meer garanderen dat je applicatie uberhaupt beheer(s)baar is, domweg omdat je geen design hebt van je applicatie. Welnu, als je dus je applicatie goed designed, kom je veelal, tenzij het een klein progseltje is, bij een setup uit waarbij je praat over afgebakende gebieden, abstracte 'tiers' of 'layers'. Die kunnen wellicht naast elkaar bestaan, zoals een asp.net + een webservice gui/interface. Deze thread ging over enterprise applicatie development, en dan hebben we het niet over Jan Sysadmin's commandline hulptooltjes.Verwijderd schreef op 13 februari 2003 @ 21:36:
[...]
Dit vind ik flauw. Maar goed, als je het zo wil spelen dan zal ik mijn stelling scherper stellen: Waar ik tegen protesteer is het onbeargumenteerd en overbodige gebruik van 'tiers'. Wat ik in sommige berichten las was dat N-tier ontwikkeling intrinsiek beter is dan niet N-tier ontwikkelen. Als je jouw bovenstaande definitie van N-tier ontwikkelen hanteert heb je gelijk, maar dan kom je wel heel erg snel in N-tier gebied terecht en is de hele discussie nutteloos.
Het gaat niet om 'dit is ingewikkeld, dit moet in lagen'. Het gaat erom HOE je enterprise-like applicaties bouwt, dus niet alleen code typen, maar ook designen: hoe zet je zoiets op, en hoe bouw je daarna wat je hebt opgezet succesvol tot een applicatie die PRECIES reflecteert wat jij als functionaliteit beoogde in het begin. N-tier development helpt daarbij, want het wordt al vroeg in het traject geintroduceerd, nog voordat Kees van development ook maar zn editor heeft opengeklikt.Waar we het mijns inziens over hebben is over het invoegen van een x aantal extra lagen in een applicatie om de complexiteit te verminderen (en flexibiliteit te verhogen etc. etc.). Mijn stelling is dat een applicatie wel eerst als 'te ingewikkeld' geclassificeerd moet worden voordat je de keuze maakt een laag toe te voegen. Ik vond dat punt in de voorgaande discussie onderbelicht en dat vind ik een kwalijke zaak.
Even voor de goede orde: praktijkvoorbeelden zeggen geen r**t. Ik hoest er ook zo 20 op die het tegendeel bewijzen en anders is er ergens op de aardkloot wel iemand met een praktijkvoorbeeld dat jouw praktijkvoorbeeld ondermijnt. Argumenten die op theorie zijn gebaseerd zijn m.i. te prefereren, praktijkvoorbeelden zijn nl. veelal resultaten van invloeden die vaak niet genoemd worden in het praktijkvoorbeeld, ipv dat ze het resultaat zijn van het punt ter discussie waar het praktijkvoorbeeld als argument voor wordt aangedragen.Praktijkvoorbeeld:
Wat is jouw definitie van 'beste' in dit verhaal? Want ik vrees dat die niet dezelfde is als de mijne. Ik heb net een 3-tier ASP.NET applicatie afgerond (op een paar puntjes na) en ben erg blij met mn middle layer, ookal doet deze veelal niet zo bar veel meer dan datatables omzetten naar een sorted view / filtered view of wat data in meerdere tables stoppen. Ik kan nl. in de gui werken met objects als "SecurityManager" ipv met "Users" en "Roles" tables. Het is dat soort abstractie dat een applicatie simpeler maakt. Eenvoudiger, zoals je wilt.ik bouw vaak imho aardig complexe webapplicaties, sinds een jaar of 2 met ASP.NET. Voor die tijd had ik soms al mijn bedenkingen bij het toepassen van een VB Business Logic Layer bij sommige applicaties omdat deze tussenlaag vaak niet meer deed dan het doorgeven van variabelen aan een stored procedure. Met de introductie van ASP.NET en de event-based manier waarop dit framework werkt zijn die bedenkingen alleen maar toegenomen: de applicatie moet toch echt wel aardig complex zijn en voldoende mogelijkheden tot hergebruik van objecten bieden wil ik besluiten een volledige Business Logic Layer toe te voegen. Ben ik nu een slechte programmeur? Nee imho, ik ben een programmeur met voldoende ervaring om in te zien dat de eenvoudigste oplossing vaak de beste is.
Ik heb nog geen argument gezien daartegen eerlijk gezegd. Een praktijkvoorbeeld dat iets ademt van "deze code is overbodig en kan dus weg". Veel website code IS in de ogen van sommigen overbodig en herhalend, en dus saai om te bouwen. Vandaar dat men steeds meer zn toevlucht zoekt in generatoren en frameworks die al die 'common' code aanbieden zodat je alleen de lijm ertussen nog moet implementeren. Daarnaast vind ik dat een developer, dwz de codetyper, wel een mening mag hebben over wat hij moet implementeren, maar geen applicatie-designer is, en dus dat die mening niet echt telt wanneer het gaat om wat het beste is voor applicatie-development.Nogmaals, dit is geen betoog tegen N-tier ontwikkeling, slechts een betoog tegen overbodig 'architectionisme'.
Ik denk dat als je alles achter het form prakt dat je nog minder code kwijt bent. Is het aantal regels code belangrijk? Ik heb liever 20.000 regels code waarbij ze duidelijk zijn en helder dan 5.000 waarbij ik 2 weken meer kwijt ben om alles uit elkaar te trekken voordat ik de extra functionaliteit kan toevoegen. Zelfde discussie kun je voeren over commentaar in code, het al dan niet ontwerpen van je database middels een methodiek als ORM/NIAM ipv direct E/R prut te gaan knoeien etc. Het extra werk dat het kost is niet iets dat verloren is of geen doel dient, integendeel.[...]
Precies, Petshop was de applicatie die mensen moest tonen hoe ze een EJB oplossing in elkaar moesten zetten. Dat maakt het des te kwalijker dat Sun zich overduidelijk te buiten is gegaan aan voornoemd 'architectionisme'. Zeker, de applicatie is schitterend verdeeld in lagen: GUI - BLL - DAL - DB. Maar waar heeft dit toe geleid. Kijken we naar Lines of Code:
Sun Petshop: 14000 regels.
MSFT Petshop: 4000 regels.
En we hebben het over precies dezelfde functionaliteit!
Het is een quick hack voor marketing. Net zoals de F&M site die als .NET example te downloaden is een prutser-applicatie is, want degenen die het gebouwd hebben snapten niet wat educatie inhoudt. Verder vind ik het hilarisch als je MS' knoeiwerk in het kader van de Petshop app een resultaat vind van 'goede analyse'. Er _IS_ geen analyse mogelijk, want het is een virtual shop, de shop bestaat niet. Je kunt wel aannames doen, en het zo implementeren, maar MS heeft de Sun implementatie gepakt en die geoptimized. Niks analyse. Alles is gedaan om de snelheid. Ze hebben ook DataReaders gebruikt, juist om dat doel. Zodra je DataReaders in een webapplicatie ziet weet je dat je met knoeiwerk te maken hebt.Veel mensen hebben de MSFT versie van Petshop een 'verkrachte', 'simplistische' of zelfs 'quick hack' oplossing genoemd maar daarmee onderkennen ze imho het belang van een goede analyse: is het project wel complex genoeg om een extra laag toe te voegen?
Ik heb niet inhoudelijk (dus naar de code) naar de Sun implementatie gekeken, dus ik kan er niet over oordelen. Ik weet wel dat de MS oplossing een knoeiersbende is en ZEKER niet onderhoudbaar is. Het gaat me trouwens niet om deze implementatie-details, want Sun heeft 1 ding goed gedaan: ze hebben functionaliteit in abstracte lagen gegoten en die daarna geimplementeerd. MS niet.Als jij kan beweren dat de 14000 regels van Sun minder complex, flexibeler en makkelijker onderhoudbaar zijn dan de .NET zonder in de lach te schieten dan mag jij van mij deze discussie winnen :-)
Je snapt nog steeds niet echt wat de volgorde is waarin de zaken aan bod komen, krijg ik de indruk. Als een applicatie simpel is qua functionaliteit, HEB je geen extra tussenlagen. Je implementeert dan die lagen die je hebt ontworpen, klaar. Je gaat niet tijdens het code-typen denken... "ik heb een extra tussenlaag nodig", want dat is de omgekeerde wereld!Ik weet dat bovenstaand voorbeeld gechargeerd is, maar geef toe dat er wel degelijk scenario's denkbaar zijn waarin de complexiteit van een applicatie niet hoog genoeg is om een extra tussenlaag te verantwoorden!
Sinds wanneer praat een programmeur met een klant? Een programmeur bouwt code, als implementatie van gewenste functionaliteit. Welke functionaliteit dat is, is geanalyseerd door de systeemarchitecten en systeemanalysten; hoe de applicatie innerlijk qua structuur eruit ziet is ontworpen door de systeemarchitect(en). De klant heeft daar geen moer mee te maken, en kan ook niets met die info. Wat de klant wil is een oplossing voor een probleem. De opdrachtnemer levert die oplossing, in het geval van deze discussie in de vorm van een softwareapplicatie. Hoe die applicatie intern werkt, wat moet die klant met die info? Mensen die het moeten beheren, die moeten info hebben omtrent bv scalability en tiers en hoe de geimplementeerde zaken daarin te passen zijn.Het is jouw taak als programmeur om de klant in gewoon nederlands duidelijk te maken wat zijn opties zijn: de keuze ligt echter nog steeds bij hem. Het feit dat ons werkveld ingewikkelder is dan dat van een autoverkoper is nog geen excuus om zelf maar alle beslissingen te gaan nemen.
Qua volgorde van development-traject en besef op welk level n-tier development wordt ingezet (dus op code-klopper niveau of daarboven) maak je toch wel een paar lelijke missers en baseert daarop je argumentatie.Beetje vriendelijker mag trouwens wel hoor, het is maar een discussie. Ik denk niet dat jij uit mijn reacties tot dusver over dit onderwerp kan opmaken of ik N-tier ontwikkeling wel of niet onder de knie heb, dus laat die blunders en ballen in het vervolg weg.
Nogmaals: die extra lagen worden niet verzonnen achter het toetsenbord door Karel de Codert, maar door Sjaak de Designert. M.a.w.: de complexiteit van de applicatie is T.A.T. duidelijk ten tijde van het design. DAN kun je beslissen wat je doet. Tijdens het bouwen is het simpelweg implementeren van het ontwerp, beslissingen welke lagen er gebouwd dienen te worden moeten dan allang gemaakt zijn. Je argument over wel/niet extra laag is dus m.i. flauwekul.Ik zeg niet dat je automatisch tegen hogere kosten oploopt: wat ik zeg is dat de extra investering die nodig is voor het bouwen van een extra laag zichzelf pas terugverdient als een bepaald complexitieitsniveau bereikt is (of een bepaald flexibiliteitsniveau gevraagd wordt etc.). Sommige applicaties hoeven nu eenmaal niet van database te wisselen of naar windows of mobile geport te worden: We're not all building the next version of Windows or the next Amazon.com
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Ff een vraagje....EfBe schreef op 14 February 2003 @ 10:29:
Ik heb net een 3-tier ASP.NET applicatie afgerond (op een paar puntjes na) en ben erg blij met mn middle layer, ookal doet deze veelal niet zo bar veel meer dan datatables omzetten naar een sorted view / filtered view of wat data in meerdere tables stoppen. Ik kan nl. in de gui werken met objects als "SecurityManager" ipv met "Users" en "Roles" tables. Het is dat soort abstractie dat een applicatie simpeler maakt. Eenvoudiger, zoals je wilt.
https://fgheysels.github.io/
Wat is 'helemaal n-tier' ? Als ik jou de vraag stel: voor een klein project is het dan geoorloofd om in de asp pages meteen SELECT * FROM TABLE te prakken ja of nee? wat is dan je antwoord daarop? (uberhaupt, wat is een klein project?)maikel schreef op 14 februari 2003 @ 10:39:
Ik denk dat paullooijmans het belang van n-tier dev. goed inziet hoor. En mijns inziens heeft ie gelijk: voor een klein project is het nogal overbodig om het helemaal n-tier op te zetten.
Beargumenteer 'gaat over het algemeen aardig wat tijd kosten' eens. Implementatie is veelal maar de helft van de tijd dat een project duurt. Een middle tier kan nl. ook besparing opleveren qua code, je kunt nl. aardig wat code sharen, plus je kunt, ook heel belangrijk, complexe development taken scheiden van minder complexe development taken. Zo kan ik hier HTML-ers met een klein beetje ASP kennis de GUIs laten bouwen met componenten die zijn aangeleverd door anderen, terwijl bij een 1-tier app dat niet gekund zou hebben, want ze moeten dan zelf de querylogica etc erin bouwen.Het bouwen van een extra lagen gaat over het algemeen aardig wat tijd kosten. En zeker voor kleinere projecten is het nutteloos om daar erg veel tijd in te steken terwijl het project zonder extra lagen in zeer korte tijd af kan zijn.
Oplevertijd is van groter belang dan flexibiliteit? Sinds wanneer gaan klanten voor one-shot applicaties? De enige vorm van one-shot applicaties die we kennen zijn games: nu bouwen, hergebruik is niet aan de orde.Ik weet dat je dan wat minder flexibel bent, maar voor sommige klanten is de oplevertijd van groter belang dan de flexibiliteit (die soms totaal niet nodig is).
Welke 'gerichtere' vragen zou een programmeur moeten stellen in het kader van de informatie-analyse en de analyse van gegevensstromen, bottlenecks in de organisatie en hoe die op te lossen door bv ombuiging van gegevensstromen, digitalisering van gegevensstromen en bv integratie van externe gegevensstromen in de organisatie? Ik zou er geen weten.En wat betreft het contact tussen programmeur en klant: dat vind ik helemaal niet slecht. De programmeur kan veel gerichtere vragen stellen en al op voorhand problemen voorleggen. Daarbij is er door de directere communicatiestroom minder kans op verwarring.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Dat is hetgeen dat EfBe min of meer zegt; het is de designer/architect die beslist hoe de applicatie eruit komt te zien: hij beslist welke lagen er zijn.maikel schreef op 14 February 2003 @ 10:39:
Ik denk dat paullooijmans het belang van n-tier dev. goed inziet hoor.
En mijns inziens heeft ie gelijk: voor een klein project is het nogal overbodig om het helemaal n-tier op te zetten.
Het bouwen van een extra lagen gaat over het algemeen aardig wat tijd kosten. En zeker voor kleinere projecten is het nutteloos om daar erg veel tijd in te steken terwijl het project zonder extra lagen in zeer korte tijd af kan zijn.
Ik weet dat je dan wat minder flexibel bent, maar voor sommige klanten is de oplevertijd van groter belang dan de flexibiliteit (die soms totaal niet nodig is).
En wat betreft het contact tussen programmeur en klant: dat vind ik helemaal niet slecht. De programmeur kan veel gerichtere vragen stellen en al op voorhand problemen voorleggen. Daarbij is er door de directere communicatiestroom minder kans op verwarring.
[ Voor 3% gewijzigd door whoami op 14-02-2003 10:55 ]
https://fgheysels.github.io/
Ik ken het boek niet, dus ik moet op gevoel nu een juist antwoord zien te formulerenwhoami schreef op 14 February 2003 @ 10:49:
Hoe ziet jouw business layer eruit? Ik bedoel dan - als je even dat boek van Fowler erbij neemt -, maak je gebruik van een Table Module of van een Domain Model? Gebruik je (typed) datasets in je BL of maak je gebruik van custom objects?
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Een klein project is bijv. een website met weinig funtionaliteiten waarbij bijv. alleen wat overzichten getoond worden.EfBe schreef op 14 februari 2003 @ 10:51:
Wat is 'helemaal n-tier' ? Als ik jou de vraag stel: voor een klein project is het dan geoorloofd om in de asp pages meteen SELECT * FROM TABLE te prakken ja of nee? wat is dan je antwoord daarop? (uberhaupt, wat is een klein project?)
Het goed opzetten van extra lagen kost extra tijd. Vooral om ze zo flexibel en herbruikbaar mogelijk te maken. En als die lagen enkel data doorgeven zonder zelf daar complexe bewerkingen op uit te voeren is dat dus overbodig.Beargumenteer 'gaat over het algemeen aardig wat tijd kosten' eens. Implementatie is veelal maar de helft van de tijd dat een project duurt. Een middle tier kan nl. ook besparing opleveren qua code, je kunt nl. aardig wat code sharen, plus je kunt, ook heel belangrijk, complexe development taken scheiden van minder complexe development taken. Zo kan ik hier HTML-ers met een klein beetje ASP kennis de GUIs laten bouwen met componenten die zijn aangeleverd door anderen, terwijl bij een 1-tier app dat niet gekund zou hebben, want ze moeten dan zelf de querylogica etc erin bouwen.
Aan wat voor projecten werk jij dan?Oplevertijd is van groter belang dan flexibiliteit? Sinds wanneer gaan klanten voor one-shot applicaties? De enige vorm van one-shot applicaties die we kennen zijn games: nu bouwen, hergebruik is niet aan de orde.
Dus volgens jou bespreekt een niet-programmeur (een commercieel iemand dus) alle ins en outs van een project?Welke 'gerichtere' vragen zou een programmeur moeten stellen in het kader van de informatie-analyse en de analyse van gegevensstromen, bottlenecks in de organisatie en hoe die op te lossen door bv ombuiging van gegevensstromen, digitalisering van gegevensstromen en bv integratie van externe gegevensstromen in de organisatie? Ik zou er geen weten.
Ik denk dat je hier wat mist.maikel schreef op 14 February 2003 @ 11:19:
[...]
Dus volgens jou bespreekt een niet-programmeur (een commercieel iemand dus) alle ins en outs van een project?
Wat dan als er een hoop functionaliteiten achteraf, door technische beperkingen of door tijdsgebrek, niet mogelijk blijken te zijn?
Hm. De klant is diegene met kennis over de functionaliteit. De klant weet wat hij wil. De programmeur moet dat implementeren, maar die 2 spreken dus een totaal andere taal.Een programmeur kan zulke problemen al ruim van de voren aan zien komen en daar dus met de klant een andere oplossing voor vinden. De programmeur is degene met de kennis over de implementatie. En daar draait het volgens mij toch om.
https://fgheysels.github.io/
Een analyst weet meestal ook wel wat er mogelijk is en wat niet.maikel schreef op 14 February 2003 @ 11:30:
Volgens mij moet er toch echt wel iemand bij zitten die weet wat er precies mogelijk is en welke problemen er kunnen optreden.
De klant weet inderdaad de functionaliteiten, maar weet niet wat de gevolgen van bepaalde wensen zijn. Als de klant iets wil wat haast onmogelijk is, gaat hem dit veel geld of veel tijd kosten. En het is maar de vraag of de klant dat er voor over heeft.
Overigens zijn er ook veel klanten die zelf niet eens precies weten wat ze willen.
https://fgheysels.github.io/
Dus heb je geen DataSets in je BL zitten?EfBe schreef op 14 February 2003 @ 11:03:
[...]
Daarbovenop heb ik een layer, de BL, die niet gericht is op tables maar op functionaliteit. Die heeft dus classes per functionaliteitsgroep, zoals security. De gui praat met die layer, en kan zich puur richten op de functionaliteitsgroep. Ik heb een 3-tier strategie gekozen zonder typed classes en niet een 5-tier met typed classes, omdat ik die complexiteit niet nuttig vond ik dit kader. Ik werk dus met dataviews in de gui, aangeleverd door de BL, en data die naar de database toe moet wordt geinsert door static methods die arraylists of bv strings en ints accepteren.
https://fgheysels.github.io/
Correct, ik werk niet met datasets maar met datatables. DataSets hebben het nadeel dat ze de DAL abstractie breken in een BL die gefocussed is op functionaliteit, immers als je in een gui een actie in 1 scherm doet, kan dat bv gevolgen hebben voor meerdere tables. De gui roept dan een method aan van het object dat die functionaliteit herbergt, bv SecurityManager. Die regelt het wel in welke tables wat terecht komt. Omdat de DAL gegenereerd is is het bouwen van de applicatie een peuleschil.whoami schreef op:
[nohtml]
[...]
Dus heb je geen DataSets in je BL zitten?
Je table-functionaliteit in je DAL bevat dus een aantal static methods die gewoon een SP oproepen om de gewenste data in te saven/deleten/whatever?
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Dat zijn implementatieproblemen en _NOOIT_ het probleem van de klant. Als ik ergens een stukje hardware bestel en de leverancier begint te piepen dat het vervoer uit Taiwan problematisch is en hij daardoor wellicht kleinere marges moet gaan rekenen en daardoor erg zielig is dan is dat mijn probleem niet. Als de klant een probleem ABC voorlegt aan een oplosser en die oplosser zorgt voor een oplossingsbeschrijving en gaat daarna met prutsers dat realiseren, dan is de oplosser een knoeier en zijn de problemen t.a.t. voor zijn rekening. De klant vroeg om een oplossing, als je die als oplosser dan zegt te kunnen leveren, zijn daarna de problemen die dat met zich meebrengt ook voor jouw rekening. Wat doet een goede oplosser dus? Die consulteert mensen die advies kunnen geven op bepaalde trajecten. Die adviseurs kunnen programmeurs zijn, maar ook collega-designers. Die praten echter niet met de klant, want dat voegt niets toe aan de analyseresultaten.maikel schreef op:
Volgens mij moet er toch echt wel iemand bij zitten die weet wat er precies mogelijk is en welke problemen er kunnen optreden.
De klant weet inderdaad de functionaliteiten, maar weet niet wat de gevolgen van bepaalde wensen zijn. Als de klant iets wil wat haast onmogelijk is, gaat hem dit veel geld of veel tijd kosten. En het is maar de vraag of de klant dat er voor over heeft. Een programmeur kan hierin meer duidelijkheid verschaffen en ervoor zorgen dat het project eerder opgeleverd kan worden.
[ Voor 3% gewijzigd door EfBe op 14-02-2003 13:07 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
I take that as a 'yes'.maikel schreef op:
Een klein project is bijv. een website met weinig funtionaliteiten waarbij bijv. alleen wat overzichten getoond worden.
Hierbij is het in mijn ogen onnodig daarvoor een aantal classes te bouwen die de gegevens ophalen. Het enige wat die classes dan zouden doen is het ophalen van de gegevens uit de database en die vervolgens direct doorgeven. Wat is dan de toegevoegde waarde van een extra laag?
Volgens mij niets. Het dient alleen als doorgeefluik voor data.
Zoals al eerder gezegd: het opzetten van abstractieniveaus, het onderscheiden van layers, kost geen extra tijd want het zit in je ontwerpfase en maakt dus deel uit van de manier waarop je je applicatie ontwerpt. Sterker, ik durf de stelling wel aan dat DOORDAT je alles gelaagd en abstract het weggewerkt, je tijd bespaart, omdat je bij de bouw van iedere page weet waar welke functionaliteit is gebouwd en je meteen die functionaliteit aan je page kunt koppelen, ipv dat je elke keer de functionaliteit opnieuw moet bouwen of op zoek moet naar een soortgelijke page en de code moet copy/pasten (in de volksmond: broddelen).Het goed opzetten van extra lagen kost extra tijd. Vooral om ze zo flexibel en herbruikbaar mogelijk te maken. En als die lagen enkel data doorgeven zonder zelf daar complexe bewerkingen op uit te voeren is dat dus overbodig.
Hergebruik van generieke code is iets anders. N-tier development levert hergebruik van code BINNEN de applicatie op. Op basis van functionaliteit, niet op basis van implementatiedetails.Veel classes zijn overigens ook project-specifiek. Elk project zit weer anders in elkaar (andere DB, andere voorkant, etc.) en daar moeten dus ook weer nieuwe classes voor gebouwd worden. Overigens zou je die classes dan weer op kunnen splitsen in extra lagen, waarbij de ene laag dus wel generiek is. Maar dat heeft MS dus al voor ons gedaan in het framework.
Ik bouw websites sinds het begin van www, dus sinds netscape 0.x, en al mn klanten hebben wijzigingen gevraagd in de loop der tijd aan de website. Een one-shot 'even dit doen online' sites ken ik niet, wel delen van sites die een of meerdere keren kort werden gebruikt. Doordat vele onderdelen binnen zo'n site al beschikbaar waren, was het bouwen van dat soort sites simpel, itt 1-tier sites die men (en ik dus ook) in het begin maakte met perl/cgi en idc/htx en later asp, waarbij je je een slag in de rondte knoeide met al die code pal achter een page: hergebruik binnen het project uitgesloten.Aan wat voor projecten werk jij dan?
Er zijn genoeg scenario's te verzinnen waarbij de klant snel een website online wil hebben die vervolgens nooit meer verandert. Ik heb ooit een site gemaakt waarbij mensen zich konden inschrijven voor informatiesessies. De klant zelf kon sessies toevoegen, wijzigen, etc. Maar er waren maar een bepaald aantal sessies. Moet ik daarvoor dan een hoop tijd gaan steken in tiers? Die klant wil vooral dat de site snel online staat zodat die gebruikt kan worden, niet dat het mogelijk is om zelf via een onderhoudsomgeving de hele site aan te passen!
Ja. Namelijk iemand die veel verstand heeft van functionaliteit en analyses op dat vlak. Iemand met een nerdblik zit alleen maar zichzelf in de weg want neemt tijdens de analyse beslissingen op basis van eventuele implementatieproblemen die daar eventueel achterweg zouden kunnen komen, wat als gevolg heeft dat de klant niet een oplossing krijgt die gebouwd is op basis van gewenste/noodzakelijke functionaliteit, maar op basis van functionaliteit die voortkomt uit de technische capaciteiten van het technisch iemand. Dat soort software is gedoemd te mislukken.Dus volgens jou bespreekt een niet-programmeur (een commercieel iemand dus) alle ins en outs van een project?
Tijdens een functionele analyse denk je niet aan implementatie. Je functioneel ontwerp mag ook geen implementatie-details bevatten of beslissingen daarop gebaseerd. In je technisch ontwerp van de functionele subset van het functioneel ontwerp ga je pas kijken hoe je welke functionaliteit het beste kunt realiseren en laat je je adviseren door mensen die weten waarover ze praten. Een developer heeft nl. veelal een tunnelblik die gevormd wordt door de prioriteiten die de developer stelt aan details die samenhangen aan de implementatie van de functionaliteit. Daarom moet je een developer ook invulling laten geven aan functionaliteit waarbij je de grenzen afbakend vooraf. Ik ben zelf een developer en heb dat al lang geleden geleerd. Zelfs na 9 jaar prof. software development vraag ik nog altijd de meest basale dingen aan mensen die daar veel beter in zijn als ik, bv gui design beslissingen en functionele prioriteitstellingen: een developer kan iets belangrijk vinden, wat voor het resultaat an sig geen voordeel biedt, maar wel andere zaken ten nadele beinvloedt. Een developer is ook ondergeschikt aan de software-designer: de designer designt de software die developer bouwt en niet andersom. Wellicht niet leuk voor een developer, maar zo werkt het wel. Developers die de designers gaan zitten verbeteren helpen een project veelal van de regen in de drup (ik hoef hopelijk geen voorbeelden van handmatige aanpassingen aan databasetabellen aan te halen).Wat dan als er een hoop functionaliteiten achteraf, door technische beperkingen of door tijdsgebrek, niet mogelijk blijken te zijn?
NEE!!! het draait om de functionaliteit! Hoe die geimplementeerd wordt is ondergeschikt aan de functionaliteit die moet worden opgeleverd. Dit houdt dus OOK in dat als je een Microsoft-jehova bent als developer en op Linux is toevallig het geheel beter te realiseren, je eigenlijk daarvoor moet kiezen. Omdat de developer die beslissingen niet rationeel kan maken wordt dat voor hem gedaan, en geeft precies aan waarom de developer de designer volgt en niet andersom.Een programmeur kan zulke problemen al ruim van de voren aan zien komen en daar dus met de klant een andere oplossing voor vinden. De programmeur is degene met de kennis over de implementatie. En daar draait het volgens mij toch om.
Binnen een team dat de applicatie bouwt kan de developer natuurlijk meevergaderen en problemen signaleren en oplossingen daarvoor aandragen. Echter altijd als ondersteuning van de designer. Immers: alleen dat levert een ontwerp op dat je als basis kunt gebruiken!! Alle andere 'ad hoc' aanpassingen van wat ooit eens ontworpen is door de developer worden niet toegevoegd aan het ontwerp of erger: worden niet verwerkt in het ontwerp en vanaf daar doorgerold naar de implementatie. Bv 'even een veldje in de database erbij'. Mensen die dat doen/denken vernaggelen zoveel in de IT-business, dermate veel dat anno 2003 de IT-business nog steeds een slechte naam heeft, mede door dat soort prutsers. Ipv dat ze het datamodel aanpassen in ORM/NIAM of andere hogere orde methodiek en daarna daaruit een E/R model distilleren en DAN de database daarmee gaan aanpassen.... Zie je het verschil? Het eerste, ff dat veld erbij, is zo gedaan, kost weinig moeite en weinig overhead. Het laatste is echter solide en waarborgt een zekere zekerheid dat het project niet verknoeid wordt gedurende de developmentfase.Ik zeg niet dat de programmeur van begin tot eind bij elke vergadering aanwezig moet zijn, maar 'helemaal nooit' is volgens mij ook niet goed. In mijn ogen is een programmeur toch echt wel wat meer dan iemand die met oogkleppen op code zit te kloppen.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Wie is Fowler? Ik ken hem niet, dus wat zijn mening is laat me eerlijk gezegd koud. Een datareader exporteren naar je gui, plakt je dal in je gui, een datareader is nl. een open database connectie, je moet in je gui record-checking doen om door de rows te lopen. Een datatable / dataview opleveren in je BL heeft die nadelen niet, en je levert een herbruikbaarheid op. Zo kan ik de ene keer een repeater vullen met mn roleview, en de andere keer een comboboxje met mn roleview op een andere page. Ik weet dat dat solide in elkaar zit, want ik kan zonder gezeik mn tiers verplaatsen naar andere bakken, zoals bv dit forum ook doet, een webfarm inzetten uberhaupt, wat veel sites tegenwoordig doen. Het gaat om de semantiek van het geheel: datareaders vernaggelen erg veel aan je ontwerp. Gebruik je datareaders, hou dan ook asjeblieft op met jezelf voor de gek houden dat je n-tier bezig bent, en prak lekker alles in de codebehinds.paulgielens schreef op:
Enne EfBe, DataRaders voor visualisatie zouden al duiden op een slecht ontwerp, zekers niet, voor het vullen voor een comboboxje ga je geen DataTable of DataSet in-memory trekken, maar dat doe je gewoon om de BLL laag heen. Fowler deelt die mening overigens.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
heh. Ik heb serieus me verdiept in Extreme Programming (EX) (ik zeg maar even geen 'XP' om verwarring met het ms os te voorkomenpaulgielens schreef op 14 February 2003 @ 14:28:
Wat Fowler zegt goes, en jij snapt extreme programming nietLees eens iets over refactoring zou ik zeggen, dan kun je misschien EX plaatsen zoals het bedoeld is.
Als we praten over stateful los van de altijd aanwezige userstate, dan lijkt het me totaal niet te combineren met een stateless ontwerp. Ik zie overigens zelden nog het nut in van stateful ontwerpen, wellicht alleen bij single-user client applicaties, waarbij je er zeker van kunt zijn dat de data die de applicatie nodig heeft, gewoon in de usersessie geladen kan worden, immers er is maar 1 user.Een stafull/stateless omgeving is goed te combineren hoor... het beste van 2 werelden kan ook wel eens lekker zijn.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Je kunt ook gerust afzonderlijke technieken van XP gebruiken, zoals idd pairprogramming maar ook design patterns, unit testing en refactoring.EfBe schreef op 14 February 2003 @ 14:45:
[...]
heh. Ik heb serieus me verdiept in Extreme Programming (EX) (ik zeg maar even geen 'XP' om verwarring met het ms os te voorkomen) en het enige dat me erg aanstond was de 2-mans programmeertandems. Echter, men mag pas van EX spreken als je een heel scala aan rules (begrijpelijk) accepteert en ik ben pertinent tegen inmening van klanten tijdens ontwikkeltrajecten.
Je hebt gelijk dat op het gebied van architectuur aan een systeem niet echt veel veranderd met refactoring. Maar slechte code waar nog een beetje structuur in zit, kan je in ieder geval wel een stuk toegankelijker en logischer maken. Verder kan je als je zelf genoeg inzicht bezit ook gerust een systeem kapot breken en dan alsnog een betere architectuur erin plaatsen (voor zover dit mogelijk is natuurlijk, soms kan je beter opnieuw beginnen *kijkt naar het kut project voor hem*Refactoring klinkt inderdaad leuk, maar is een implementatie-technisch truukje. Aanpassingen op basis van functionele wijzigingen gaan veel verder dan je met wat refactoring kunt verhelpen.
Refactoring gaat niet over het sneller maken van code, maar om het verbeteren van de kwaliteit.(zoals je wel sourcecode met de hand wat kunt gaan optimizen, maar een ander algoritme of algoritme-reeks kan veel meer opleveren)
Precies:Alarmnummer schreef op 14 februari 2003 @ 15:31:
Ik heb je laatste stuk verkeerd begrepen. Je maakt een vergelijking tussen een beter algoritme en een betere architectuur tegenover een geoptimaliseerde algoritme en een bijgeschaafde architectuur.
Tuurlijk, net zoals er geen programmeur op aarde is te vinden die lovend zal zijn over iemand anders zn stukje code, zo zal er ook geen programmeur ter wereld te vinden zijn die na een tijdje niet denkt "dat had wellicht anders gekund" bij het bekijken van eigen code.Soms is het handig om niet alles weg te gooien, maar gewoon wat punten bij te schaven. Ik doe het ook genoeg met allerlei projecten van mezelf omdat ik ook genoeg heb bijgeleerd. Soms gooi ik het helemaal weg, maar meestal is het nog dermate goed van kwaliteit dat er alleen wat bijschaafwerkzaamheden verricht hoeven te worden.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Verwijderd
Wellicht zijn je gebeden verhoordwhoami schreef op 12 februari 2003 @ 14:17:
Ik zou ook wel eens een 'real-life' example willen zien van een n-tier enterprise application met de nodige layers en hoe de communicatie tussen die layers is.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
N-tier development is schaalbaar, het past zich aan aan je situatie. Je refereert naar nadelen die er niet zijn.Verwijderd schreef op 14 februari 2003 @ 23:35:
Heren, ik denk dat we het op veel punten eens zijn met elkaar wat betreft N-tier ontwikkeling, de voordelen zijn voor mij overduidelijk. Wat ik probeer duidelijk te maken is dat er, zoals met bijna alles in het leven, naast voordelen ook nadelen verbonden zijn aan het kiezen voor een bepaalde oplossing.
Nee, waat het om gaat is of je inziet dat n-tier development een design aangelegenheid is, die puur bedoeld is voor het abstract maken van functionaliteitsgroepen. Jij zit op het abstractieniveau van implementatie, ik niet, althans niet in deze discussie. En daar zit het hem nu in. Jij wilt niet begrijpen dat bij het ontwerpen van je software je de n-tier methodiek gebruikt, en dat je daarna pas gaat implementeren. Degene die de code intikt is niet bezig te verzinnen of hij n-tier development moet toepassen, dat is voor hem gedaan.Waar het in deze volgens mij om gaat is de vraag: kies ik voor de oplossing GUI/Events + BLL/DAL + SP/DB of ga ik voor de oplossing GUI/Events + SP/DB.
Ik snap niet waarom dit hier staat, en ik kap nu met deze discussie. Ik heb meerdere keren aangegeven waar in het ontwikkeltraject n-tier development aan de orde komt en hoe met als logisch gevolg dat wanneer je het in andere delen van het ontwikkeltraject toepast je verkeerd bezig bent. Verderop lees ik dat ik in een ivoren toren zit. Come again? Ik weet echt wel waarover ik praat en hoe je software ontwikkelt. Iedere universiteit en hogeschool zal je die methodieken leren. Als je zelf zo'n opleiding hebt gevolgd weet je dat. Je weet dan ook dat ik absoluut geen onzin praat als ik het heb over wie welke analyses doet en wie wat ontwerpt en wie die ontwerpen op welke wijze realiseert.Als ik de argumentatie van EfBe volg zou de laatste optie zo ongeveer bij wet verboden moeten worden op straffe van 15 jaar eenzame opsluiting, want het zou de IT in een kwaad daglicht stellen, applicaties volledig on-onderhoudbaar maken en nog meer van dat soort ergs. Ik denk dat als we nog even doorgaan dat EfBe ook nog wel links ontdekt tussen 1-tier programmeren en Osama Bin Laden
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Niks 'Amen'. Get yourself educated.
Dat lag in de lijn der verwachting. Heb je uberhaupt IETS begrepen van wat ik gezegd heb? Wellicht ten overvloede: wat ik gezegd heb is niet iets wat ik gisteren heb gelezen in een artikeltje, maar een voortvloeisel van lang nadenken over de materie, tests doen, in de praktijk brengen, evalueren, en dat al jarenlang.Ik ben het hier dus volledig mee eens. (hoewel ik het zelf nooit zo mooi verwoord zou kunnen hebben)
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Ik begrijp heel goed wat jij zegt hoor. Maar ik begrijp ook heel goed wat paullooijmans te vertellen heeft. En daar ben ik het toch echt veel meer mee eens dan met jou standpunt. Ik begrijp goed wat je wilt zeggen, maar ik weet dat dat niet voor elke situatie geldt. Maar blijkbaar wil jij blijven vasthouden aan de theorieen die je ooit tijdens een opleiding hebt geleerd of ergens gelezen. Uit de praktijk blijkt echter dat de theorieen niet altijd toepasbaar zijn.EfBe schreef op 15 februari 2003 @ 10:26:
[...]
Niks 'Amen'. Get yourself educated.
[...]
Dat lag in de lijn der verwachting. Heb je uberhaupt IETS begrepen van wat ik gezegd heb? Wellicht ten overvloede: wat ik gezegd heb is niet iets wat ik gisteren heb gelezen in een artikeltje, maar een voortvloeisel van lang nadenken over de materie, tests doen, in de praktijk brengen, evalueren, en dat al jarenlang.
Geen tijd gehad om het in boekvorm te gieten, maar misschien moet ik dat toch maar eens doen, dan word je kennelijk wel voor vol aangezien.
Maikel: herlees de teksten totdat je ze begrijpt. Je POV snap ik, die had ik jaren geleden vlak na mn afstuderen ook, maar zo zit de werkelijkheid niet in elkaar, althans de werkelijkheid waarbij softwareprojecten wel slagen.
[ Voor 10% gewijzigd door maikel op 15-02-2003 10:49 ]
Verwijderd
Wie heeft het over schaalbaarheidsproblemen gehad dan? Ik niet hoor, ik heb EEN nadeel genoemd van het toepassen van een BLL/DAL en dat is dat het extra tijd kost. Ik weet dus niet waar je dit vandaan haalt.EfBe schreef op 15 February 2003 @ 10:19:
[...]
N-tier development is schaalbaar, het past zich aan aan je situatie. Je refereert naar nadelen die er niet zijn.
Dat wil ik wel begrijpen, wat ik wil zeggen is dat het, itt wat jij lijkt te beweren, geen doodzonde is om in de analysefase, wanneer de situatie daar om vraagt (door tijd/geld constraints of omdat de applicatie zich nu eenmaal niet leent voor hergebruik) te kiezen voor een oplossing zonder een BLL/DAL.Jij wilt niet begrijpen dat bij het ontwerpen van je software je de n-tier methodiek gebruikt, en dat je daarna pas gaat implementeren. Degene die de code intikt is niet bezig te verzinnen of hij n-tier development moet toepassen, dat is voor hem gedaan.
Mooi, dan ben je het blijkbaar toch met me eens, want in je eerdere posts miste ik deze nuance. Het leek alsof zo'n keuze NOOIT valide kon zijn.Nu stel je of een oplossing, bestaande uit gui/events + sp/db, valide is. Dat is niet te beoordelen, want dat hangt van de situatie af en TE ALLEN TIJDE van het ontwerp.
Dom en kortzichtig? Nee hoor, is gebaseerd op logica (>LOC == >tijd, meer analyse == >tijd) en ervaring.Niet op basis van implementatiedetails als 'dat gaat overhead opleveren' of 'dat is traag'.
[...]
Uit de losse pols redeneren dat dat dan wel zo zal zijn is, sorry, dom en kortzichtig.
Dat je in een ivoren toren zit wil nog niet zeggen dat je niet weet waar je over praat, ik vind alleen dat jouw redenatie een bepaalde realiteitszin ontbeert die ik wel meer zie bij gesprekken over 'enterprise development', alsof dat een soort 'holy grail' is waarbij alleen maar de beste oplossingen bestaan: de 'beste' oplossing is niet altijd de meest architectonisch verantwoorde oplossing.Verderop lees ik dat ik in een ivoren toren zit. Come again? Ik weet echt wel waarover ik praat en hoe je software ontwikkelt. Iedere universiteit en hogeschool zal je die methodieken leren.
uhhmmmmm, thanks? Dan wil ik je waarschuwen om niet te gaan zwemmen binnen een uur na je maaltijd. Is ongeveer net zo to the point.Ik zou je wel willen waarschuwen voor je kortzichtigheid mbt het toepassen van technieken voor betalende klanten.
Verwijderd
[ Voor 34% gewijzigd door Alarmnummer op 15-02-2003 13:08 ]
Verwijderd
[ Voor 22% gewijzigd door Alarmnummer op 15-02-2003 13:13 ]
Ik zou het niet weten. IMHO staat het boek van Fowler op dit moment op eenzame hoogte omdat daarin een compleet beeld geschetst wordt van de mogelijkheden die er zijn. Hij is niet te beroerd om ook aandacht te besteden aan Transaction Script en Table Module oplossingen die door OO puristen vaak verfoeid worden.Alarmnummer schreef op 15 February 2003 @ 12:35:
[half-offtopic]
Raden jullie ook nog literatuur aan?
Ik vind dat idd ook erg fijn aan zijn boek. Hij geeft een oplossing voor een bepaald probleem, maar ook meteen alternatieven en wanneer je beter zo`n alternatief kan gebruiken.tijn schreef op 15 February 2003 @ 13:13:
[...]
Ik zou het niet weten. IMHO staat het boek van Fowler op dit moment op eenzame hoogte omdat daarin een compleet beeld geschetst wordt van de mogelijkheden die er zijn. Hij is niet te beroerd om ook aandacht te besteden aan Transaction Script en Table Module oplossingen die door OO puristen vaak verfoeid worden.
De grootste kost bij software-projecten zit hem meestal niet in de ontwikkeling van de applicatie. De grootste kost zit/zat hem meestal bij het onderhoud van de applicatie. En hoe komt dat denk je? Omdat het een groot kluwen was van business-logica, data-logica en presentatie - logica.maikel schreef op 15 February 2003 @ 10:46:
Uit de praktijk blijkt ook dat een heel groot deel van softwareprojecten uitlopen of teveel gaan kosten. En dat is volgens mij meer realiteit dan jouw 'realiteit'.
Misschien moet je eens een tijdje gaan rondkijken op http://www.dsdm.com/
PS.
Ik heb ook nog bij een bedrijf gewerkt die elke website n-tier opzette.
Die zijn nu failliet.
https://fgheysels.github.io/
[ Voor 12% gewijzigd door Scare360 op 15-02-2003 13:42 ]
Verwijderd
Je polariseert de zaak whoami, maikel heeft helemaal nergens gezegd dat 1-tier ontwikkeling beter is. Maikel stelt, net zoals ik, dat het geen doodzonde is om niet N-tier te ontwikkelen als de situatie daarom vraagt. Ik geloof dat zelfs EfBe het met die stelling eens is.whoami schreef op 15 februari 2003 @ 13:23:
[...]
Waarom zou iedere zichzelf respecterende ontwikkelaar voor n - tier gaan, als 1-tier volgens jou zoveel beter is?
[...]
LeukVerwijderd schreef op 15 februari 2003 @ 13:48:
[...]
Mij lijkt niet de discussie over het optimale interessant, maar de discussie over wat minimaal nodig is voor een verantwoorde applicatie.
In veel situaties verstandig, maar geen must.Stored Procedures bijvoorbeeld, dat is voor mij een must.
Da's logisch want je stopt sowieso geen Data Access code in je code behindOok al kosten die dingen tijd ik wil geen SQL in mijn codebehinds zien.
Die krijg je gratis bij VS.NET. Als die ze niet zou genereren zou niemand ze gebruiken. Overigens moet je er voor waken om hier te veel dingen in te gaan doen. Als je forms wat complex worden verzandt het al snel in een onoverzichtelijke brij code.Die zijn overigens ook een must: codebehinds.
Valt best mee. De methods die je vaak in de codebehind toevoegt kun je meestal ook wel kwijt in de BLL (of wat mij betreft de DAL als je de BLL skipt).Maar een BLL/DAL, de initiele overhead is voor mij gewoon te groot in veel gevallen.
Daarin heb je gelijk. Als het niet nodig is, dan hoef je geen extra layer te creeëren. Echter, het gaat hier over Enterprise Applicaties. Dit wil dus zeggen dat die applicaties zeker de business-rules van dat bedrijf zal moeten omvatten. Dus, waarom zou je die business rules niet in een aparte laag onderbrengen? Je hebt ze dan op 1 centrale plaats, en als er later een andere interface moet gebouwd worden, kan je ze direct hergebruiken.Verwijderd schreef op 15 February 2003 @ 13:48:
[...]
Je polariseert de zaak whoami, maikel heeft helemaal nergens gezegd dat 1-tier ontwikkeling beter is. Maikel stelt, net zoals ik, dat het geen doodzonde is om niet N-tier te ontwikkelen als de situatie daarom vraagt. Ik geloof dat zelfs EfBe het met die stelling eens is.
Idd, de praktijk is waar het gebeurd. En in de praktijk zijn de meeste bedrijven toch echt wel bezig met n-tier development.Over hoe het optimaal moet kunnen wij het denk ik snel eens zijn: geef mij genoeg tijd en genoeg geld en ik bouw voor jou de mooiste BLL/DAL die je ooit gezien hebt. Maar de praktijk werkt anders en de praktijk is waar het gebeurt!
Tja, wat dacht je dan aan de overhead als het later blijkt dat je toch beter een scheiding in die 2 lagen had ondergebracht?Mij lijkt niet de discussie over het optimale interessant, maar de discussie over wat minimaal nodig is voor een verantwoorde applicatie. Stored Procedures bijvoorbeeld, dat is voor mij een must. Ook al kosten die dingen tijd ik wil geen SQL in mijn codebehinds zien. Die zijn overigens ook een must: codebehinds. Maar een BLL/DAL, de initiele overhead is voor mij gewoon te groot in veel gevallen.
Beweer jij werkelijk dat elke applicatie die jij bouwt N-tier opgezet moet zijn? Jij zou jezelf geen serieuze programmeur vinden als je een 1-tier systeem moest bouwen? (ik ga er van uit dat je ASP.NET/CodeBehind/T-SQL SP/DB 1-tier vindt, ikzelf vindt dat iets te simplistisch maar goed).
https://fgheysels.github.io/
SP's zijn in veel situaties, zoniet alle, verstandig.
Hmmm.... Dat denk ik niet. Moest VS.NET ze niet genereren, dan nog zou het de moeite waard zijn om het beetje extra werk te verrichten om code-behind te gebruiken.Die krijg je gratis bij VS.NET. Als die ze niet zou genereren zou niemand ze gebruiken.
https://fgheysels.github.io/
EfBe schreef op 15 February 2003 @ 09:20:
[...]
Wellicht zijn je gebeden verhoordMS heeft een nieuw sample gereleased: http://www.windowsforms.n....aspx?tabIndex=7&tabId=44
[ Voor 17% gewijzigd door whoami op 15-02-2003 16:14 ]
https://fgheysels.github.io/
Ik deed wel degelijk mee, Paulpaulgielens schreef op 15 February 2003 @ 13:34:
ps: ik mis trouwens Martin en Otis in deze discussie
.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Wat denk je, dat ik op een universiteit werk oid? N-tier heb ik helemaal niet geleerd op mn opleiding, want toen bestond internet nog niet eens in de vorm van www, websites en de applicaties die daarbij horen, laat staan een visie op hoe je distributed computing kon gaan doen.maikel schreef op 15 February 2003 @ 10:46:
Ik begrijp heel goed wat jij zegt hoor. Maar ik begrijp ook heel goed wat paullooijmans te vertellen heeft. En daar ben ik het toch echt veel meer mee eens dan met jou standpunt. Ik begrijp goed wat je wilt zeggen, maar ik weet dat dat niet voor elke situatie geldt. Maar blijkbaar wil jij blijven vasthouden aan de theorieen die je ooit tijdens een opleiding hebt geleerd of ergens gelezen. Uit de praktijk blijkt echter dat de theorieen niet altijd toepasbaar zijn.
Te hoge kosten voor een project ligt niet aan een zwakte van een gebruikte techniek, maar aan het slechte management van een project. Dit is logisch af te leiden uit het feit dat bij een goed ontwerp je nadat je het ontwerp hebt afgerond, je een redelijke inschatting kunt geven hoeveel het gaat kosten. Moet je wel vasthouden aan het ontwerp. Ad-hoc iets bouwen aan de hand van invloeden van de dag impliceert dat je vooraf geen idee hebt wat je moet gaan doen (qua totaalplaatje) wat resulteert in een natte-vinger begroting. Een van m'n argumenten tegen bv XP.Uit de praktijk blijkt ook dat een heel groot deel van softwareprojecten uitlopen of teveel gaan kosten. En dat is volgens mij meer realiteit dan jouw 'realiteit'.
Misschien moet je eens een tijdje gaan rondkijken op http://www.dsdm.com/
Mijn 1e werkgever deed iets met Unix en databases en 4GL. Ook failliet. Lekker belangrijk.PS.
Ik heb ook nog bij een bedrijf gewerkt die elke website n-tier opzette.
Die zijn nu failliet.
[ Voor 3% gewijzigd door EfBe op 15-02-2003 17:07 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Yeah, just kidding. Kom eens met argumenten die hout snijden ipv met loze opmerkingen met de strekking van "n-tier is veelal echt teveel overhead". Ik heb jou nog geen 1 argument zien maken waarom die overhead een dermate groot nadeel is dat het een project schaadt. (ooit aan gedacht dat je bij n-tier development weet in welke tier welke functionaliteit zit en je dus in andere tiers weet waar je welke functionaliteit moet zoeken? bij jouw 1-tier model heb je dat niet, kost veel tijd. )Verwijderd schreef op 15 February 2003 @ 12:48:
Het boek van Professor EfBe. WHAAHAHHAHAHAAHAHAHAHAHA...
Just kidding.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Sorry dat ik niet aktief bijdraagpaulgielens: ik mis trouwens Martin en Otis in deze discussie
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Het belangrijkste voor de functionaliteit van de generator is natuurlijk de specificatie en het ontwerp wat je gebruikt in de gegenereerde code, maar de techniek voor code generatie is ook wel boeiend om over na te denken.Alarmnummer: Als experiment ben ik nu aan het bedenken hoe ik zelf het beste een generator kan opzetten
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Verwijderd
Nee, inderdaad, je hebt me geen andere argumenten zien gebruiken. Omdat er wat mij betreft ook geen andere argumenten zijn. Maar doorlooptijd en kosten zijn wel twee hele belangrijke factoren tegenwoordig. Sterker nog, het zijn juist die twee factoren die IT zo'n slechte naam geven bij bedrijven: meer dan 3/4 van alle IT projecten hebben te maken met budget- en/of tijdoverschrijdingen!EfBe schreef op 15 februari 2003 @ 17:13:
[...]
Yeah, just kidding. Kom eens met argumenten die hout snijden ipv met loze opmerkingen met de strekking van "n-tier is veelal echt teveel overhead". Ik heb jou nog geen 1 argument zien maken waarom die overhead een dermate groot nadeel is dat het een project schaadt.
Ooit aan gedacht? Dit valt onder het door mij al onderschreven voordeel van betere onderhoudbaarheid. No argument there.ooit aan gedacht dat je bij n-tier development weet in welke tier welke functionaliteit zit en je dus in andere tiers weet waar je welke functionaliteit moet zoeken? bij jouw 1-tier model heb je dat niet, kost veel tijd.
Sorry professor. Ok professorTot die tijd hou je je mond maar over professor EfBe.
Ik heb ooit 4 ontwerptekeningen van LLBLGen 2.0 gepost:Alarmnummer schreef op 15 February 2003 @ 17:48:
Als experiment ben ik nu aan het bedenken hoe ik zelf het beste een generator kan opzetten. Ik wil het niet al te gecompliceerd maken, maar meer beschouwen als goeie oefening om domain en data layers op te stellen. En verder houdt het me ook van de straat
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Blabla, wollige taal zonder keiharde cijfers zegt zo weinig. Overschreden deadlines en specs die niet met de functionele eisen matchen maar wel de kosten omhoogjagen zijn gevolgen van iets, niet de problemen an sig. Ik heb echter nog geen cijfers van je gezien waaruit blijkt dat bv het gebruik van n-tier development een ontwikkeltraject langer maakt en duurder.Verwijderd schreef op 15 februari 2003 @ 18:40:
Nee, inderdaad, je hebt me geen andere argumenten zien gebruiken. Omdat er wat mij betreft ook geen andere argumenten zijn. Maar doorlooptijd en kosten zijn wel twee hele belangrijke factoren tegenwoordig. Sterker nog, het zijn juist die twee factoren die IT zo'n slechte naam geven bij bedrijven: meer dan 3/4 van alle IT projecten hebben te maken met budget- en/of tijdoverschrijdingen!
Je hebt zelf een bedrijf (codeworks) toch? Dan weet je ook dat IT als snelle fix ingezet niets helpt en alleen maar geld kost. Een bedrijf dat TOCH zo'n opdracht aanneemt is slecht bezig, die zou moeten adviseren het geld in de zak te houden.Daar komt nog bij dat bedrijven er in de huidige economische omstandigheden alles aan doen om kosten te besparen, dat betekent dus voor weinig geld en snel (want de software zou geld moeten besparen) opleveren.
Ik heb alleen gezien van je DAT het kennelijk meer tijd (en daar verbindt jij meteen hogere kosten aan) kost maar meer dan die loze kreet komt er niet uit. Ik beweer het tegendeel. Wie heeft nu gelijk? Ik weet uit ervaring dat n-tier development de tijdsduur van een project korter maakt. Dat zegt niet zoveel in algemene zin, echter jouw loze opmerking zegt nog minder. Als je me wilt overtuigen zul je toch met cijfers moeten komen, tot die tijd is het hot-air.Het gaat niet om de kwantiteit van de argumenten, want ik ben het met je eens dat N-tier ontwikkelen leidt tot de inmiddels bekende voordelen, maar de kwaliteit van mijn argument dat het meer tijd/geld kost is mi belangrijk en door jou onderschat.
Mja...Sorry professor. Ok professor
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
MSDNGoals of a Good N-Tier Application
N-tier design came about as a result of the failings of the client/server model. There are many goals that an n-tier application design should achieve. Here are some of them.
If you change the underlying data access methods, the client-side code should not have to change.
All data access routines should be exposed as objects instead of function calls. As an example, it is much easier to use ADO than the ODBC API calls.
SQL should be eliminated from the client-side code. The client code should just be concerned with methods and properties.
Table and column names should be eliminated from the client-side code. Typed datasets can present table and column names as properties, providing an IntelliSense list, as opposed to having to type in a string name. This means at compile time, checks can be made for data types and names of columns.
The client code should not care where the data comes from. It should just care that it can retrieve and modify the data in some object and the object will take care of the details.
The coding you need to do on the client side should be simplified. Instead of using many functions, your application should be able to use objects with properties and methods.
It becomes easier to create and use the classes than the function calls.
It becomes easier to add functionality to your applications, and change the functionality, without breaking the client-side code.
n-tier developmentN-tier applications have become the norm for building enterprise software today. To most people, an N-tier application is anything that is divided into discrete logical parts. The most common choice is a three-part breakdown—presentation, business logic, and data—although other possibilities exist. N-tier applications first emerged as a way of solving some of the problems associated with traditional client/server applications, but with the arrival of the Web, this architecture has come to dominate new development.
https://fgheysels.github.io/
Verwijderd
Net zo min als jij mij cijfers hebt laten zien die jouw beweringen van flexibiliteit en onderhoudbaarheid ondersteunen.EfBe schreef op 15 February 2003 @ 18:50:
Ik heb echter nog geen cijfers van je gezien waaruit blijkt dat bv het gebruik van n-tier development een ontwikkeltraject langer maakt en duurder.
Nee hoor, dat doe je niet. Je hebt in een eerdere post N-tier afgezet tegen:Ik heb alleen gezien van je DAT het kennelijk meer tijd (en daar verbindt jij meteen hogere kosten aan) kost maar meer dan die loze kreet komt er niet uit. Ik beweer het tegendeel.
Wel consistent blijven aub. Verder heb ik wel degelijk cijfers genoemd:een snelle hack voor weinig
Da's 350% meer code EfBe! Daar komt nog bij dat de analysefase voor een N-tier project langer duurt omdat je beter moet nadenken over hoe die tussenlagen er precies uitzien alvorens ze te gaan bouwen. Tel daarbij op de door al eerder genoemde analisten die er hun licht over moeten laten schijnen, terwijl de 1-tier oplossing in principe met wat begeleiding door een minder 'zware' programmeur te doen is.Sun Petshop: 14000 regels.
MSFT Petshop: 4000 regels.
Verwijderd
Voordelen die ik ook nooit bestreden heb. Maar jullie geloven toch ook niet meer in sprookjes of wel? Elke oplossing heeft voor- en nadelen, ook N-tier development. Dat de voordelen van N-tier development voornamelijk technisch zijn en de nadelen voornamelijk bedrijfsmatig (tijd/geld) wil niet zeggen dat het niet jullie taak is de nadelen te kennen.whoami schreef op 15 February 2003 @ 19:45:
De voordelen van n-tier development blijken hieruit:
[...]
Tja, ik neem aan dat ik hier geen commentaar op hoef te leveren?Alarmnummer: Velocity om code te genereren, en het werkt echt super.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Dat met die templates en de correcte output ben ik het eens. Echter ik zie niet 1 2 3 hoe je middels andere middelen kunt garanderen dat wat je genereert correct is. Het is alleen mogelijk indien je a) een manier vindt waarop de gebruiker middels simpele elementen een definitie kan samenstellen van de te genereren functionaliteit, waarbij je de definitie kunt testen op correctheid en b) dat je een 1:1 afbeelding kunt maken van die definitie op een gelaagd stelsel van template*, waarbij je kunt aantonen dat de wijze van afbeelden correct gebruik van de templates inhoudt, en omdat de templates zodanig zijn opgezet dat ze uit kleine elementen bestaan die 1:1 representaties zijn van de simpele elementen waarmee de gebruiker de definitie in elkaar zet, je daaruit kunt concluderen dat de generatie goede code oplevert.mbravenboer schreef op 15 February 2003 @ 21:34:
Op zich zal het als template engine wellicht heel aardig functioneren, maar ook hier is er geen enkele controle of garantie dat er wat zinnigs uitkomt. Omdat je niet alle mogelijke inputs kan testen, kan je dus ook nooit beweren dat je generator altijd geldige Java code (syntaxtisch gezien) zal produceren. Het lijkt mij waardevol als je generator wel gecontroleerd kan worden op deze eigenschappen door dus een krachtiger mechanisme te gebruiken.
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Dat is ook absoluut niet eenvoudig. Ik legde ook niet voor niets de nadruk op syntaxtische correctheidEfBe: Dat met die templates en de correcte output ben ik het eens. Echter ik zie niet 1 2 3 hoe je middels andere middelen kunt garanderen dat wat je genereert correct is.
Interessant voorbeeldbijvoorbeeld, select stored procedure
Bijvoorbeeld deze select stored proc zal niet worden 'geparsed'
SELECT A, B, C FROM Foo GROUP BY A. Omdat B en C niet in een aggregate zitten, mogen ze niet in de fieldlist staan.
[ Voor 11% gewijzigd door mbravenboer op 15-02-2003 22:36 ]
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Als ik syntactische correctheid wilt garanderen, dan kan ik dit ook uitstekend voor elkaar krijgen door te compileren. En verder is het niet bedoelt als serieuze oplossing, hiervoor kan ik veelbeter een van de vele or tools pakken. Maar door zelf templates ed te schrijven, moet je veel beter nadenken over mappings ed en alle structuren die erbij horen.mbravenboer schreef op 15 February 2003 @ 21:34:
[...]
Tja, ik neem aan dat ik hier geen commentaar op hoef te leveren?![]()
Op zich zal het als template engine wellicht heel aardig functioneren, maar ook hier is er geen enkele controle of garantie dat er wat zinnigs uitkomt. Omdat je niet alle mogelijke inputs kan testen, kan je dus ook nooit beweren dat je generator altijd geldige Java code (syntaxtisch gezien) zal produceren. Het lijkt mij waardevol als je generator wel gecontroleerd kan worden op deze eigenschappen door dus een krachtiger mechanisme te gebruiken.
Verwijderd
Probleem is dan dat je de errormsg in de gegenereerde code krijgt en niet in je template. Dit maakt het debuggen van wat complexere outputs lastig.Alarmnummer schreef op 16 February 2003 @ 11:24:
[...]
Als ik syntactische correctheid wilt garanderen, dan kan ik dit ook uitstekend voor elkaar krijgen door te compileren.
[ Voor 22% gewijzigd door Alarmnummer op 16-02-2003 11:49 ]
Dat is natuurlijk onzin (dat weet jij ook welAlarmnummer: Als ik syntactische correctheid wilt garanderen, dan kan ik dit ook uitstekend voor elkaar krijgen door te compileren.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
[ Voor 29% gewijzigd door Alarmnummer op 16-02-2003 12:04 ]
Apple iPhone 17 LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq