Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups microsoft.public.de.* 1 Forum > Newsgroup microsoft.public.de.german.entwickler.dotnet.csharp
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup microsoft.public.de.german.entwickler.dotnet.csharp Forum microsoft.public.de.german.entwickler.dotnet.csharp

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10-31-2009, 08:29 PM
Michael Erlinger
 
Beiträge: n/a
Standard Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Hallo

ich soll eine C#-Applikation schreiben, die vorerst einmal auf eine
MySQL-Datenbank zugreiffen soll; was sich aber in einem bis zwei
Jahren ändern wird, und dann soll diese Applikation mit einem SQL-
Server zusammenarbeiten.

Frage an die Profis hier: wie würdet Ihr eine solche Applikation
beginnen, um nach der Datenbank-Umstellung möglichst wenig (oder gar
keinen) Programmier-Aufwand zu haben - die gleiche Applikation mit
der gleichen Datenbank-Struktur weiter zu verwenden.....

Danke schon mal für Infos dazu
Schönen Gruß
Michael
Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 11-01-2009, 03:07 AM
Christoph Basedau
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Michael Erlinger schrieb:

> ich soll eine C#-Applikation schreiben, die vorerst einmal auf eine
> MySQL-Datenbank zugreiffen soll; was sich aber in einem bis zwei
> Jahren ändern wird, und dann soll diese Applikation mit einem SQL-
> Server zusammenarbeiten.
>
> Frage an die Profis hier: wie würdet Ihr eine solche Applikation
> beginnen, um nach der Datenbank-Umstellung möglichst wenig (oder gar
> keinen) Programmier-Aufwand zu haben - die gleiche Applikation mit
> der gleichen Datenbank-Struktur weiter zu verwenden.....


Ist relativ unwahrscheinlich, dass man gar keinen Aufwand mehr hat.
Ebenso unwahrscheinlich ist, dass sich die DB-Schemata auf's Haar
gleichen. I.d.R gibt es da ein paar Feinheiten, z.B. beim
Datentyp-Mapping. MySQL hat z.B. afaics kein wirkliches bool
bzw bildet das intern als irgendein speziellen mini-int-Typ ab,
der in ADO.NET als sbyte gemappt wird.
MS-SQL unterstützt aber schon bool und .NET mappt das auch wie
erwartet und da fängt es dann schon an...


Es empfiehlt sich natürlich die Connection- und andere -Parameter
in config-files auszulagern, dann bleibst Du auf dieser Ebene
schon mal flexibel.

Die Standard-Herangehensweise bzgl Klassenlayout sieht oft wie folgt
aus:

1. Traditionelle Herangehensweise (ADO.NET)
Zwei Datenzugriffsklasse, die jeweils als Intefaces abstrahiert
werden und für jedes RDBMS eine Implementation erfahren.
- Eine für grundlegende Datenzugriffe wie Connection aufbauen, SPs
ausführen und Daten zurückgeben bzw manipulieren, Transaktionskontexte
etc.

- Eine weitere, das eigentliche DAL, für die konkreten
Anwendungsspezifischen DB-Zugriffe kapselt und ausführt und die
intern die erstere verwendet. Wenn Du es richtig und gut machst, musst
Du diese Klasse nur einmal implementieren, weil alle DB-Spezifika
bereits von Klasse 1 abgefangen werden.

- DB-seitig möglichst alle Zugriffe über Stored-Procs
abfrühstücken, selbst trivialste SELECT *'s, so dass möglichst kein
SQL im Code vorkommt und außerdem alle Parameter typisierbar sind.
Benamsung von SPs und allen DB-Objekten möglichst ASCII,
unexotisch und nach nachvollziehbarem, übertragbarem Schema.
SP-Innereien eher schlicht halten im Hinblick auf Portierbarkeit.


Um trendy zu sein und im Windschatten des aktuellen Hypes und
auf der weiten See der Buzzwords zu segeln, kann man es mit
Object Relationalem Mapping versuchen:
Kapsle alle Datenbankzugriffe mit Hilfe eines ORM-Tools wie ADO-Entities
NHibernate oder Genome. Wirf SQL über Bord und lerne stattdessen HQL
oder eSQL und wie man Mapping-Dateien editiert, konzentriere dich
ansonsten auf OO und achte Performanceaspekte gering - sonst hast Du mit
ORM nicht immer Freude ;-) )

Gruß
Christoph

Mit Zitat antworten
  #3  
Alt 11-01-2009, 09:06 AM
Michael Erlinger
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Hallo Christoph

danke vorweg einmal für die ausführlichen Infos. Natürlich ergeben
sich dadurch noch einige Fragen, die sicherlich den Rahmen hier
sprengen würden - aber eine muss ich Dir trotzdem nochmals stellen:

> - DB-seitig möglichst alle Zugriffe über Stored-Procs
> abfrühstücken, selbst trivialste SELECT *'s, so dass möglichst kein
> SQL im Code vorkommt und außerdem alle Parameter typisierbar sind.
> Benamsung von SPs und allen DB-Objekten möglichst ASCII,
> unexotisch und nach nachvollziehbarem, übertragbarem Schema.
> SP-Innereien eher schlicht halten im Hinblick auf Portierbarkeit.


Alle Abfragen über StoredProc. -> meinst Du damit auch eine "einfache"
Abfrage wie zum Beispiel <SELECT * from MyTable> - die mir die
komplette TabellenStruktur und alle Daten zurückliefert, auf die ich
dann zum Beispiel über eine DataAdpater die INSERT/UPDATE/DELETE-
Commands aufbauen kann ?
und wenn ich dann komplexere Abfragen benötige - ebenfalls jede
Abfrage in eine eigene StoreProc. packen ?
und wie meinst Du das mit "alle Parameter typisierbar sind" ??

Danke nochmals & schönen Gruß
Michael
Mit Zitat antworten
  #4  
Alt 11-01-2009, 10:50 AM
Klaus P. Pieper
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Hallo,

Michael Erlinger schrieb:
> Hallo Christoph
>
> danke vorweg einmal für die ausführlichen Infos. Natürlich ergeben
> sich dadurch noch einige Fragen, die sicherlich den Rahmen hier
> sprengen würden - aber eine muss ich Dir trotzdem nochmals stellen:
>
>> - DB-seitig möglichst alle Zugriffe über Stored-Procs
>> abfrühstücken, selbst trivialste SELECT *'s, so dass möglichst kein
>> SQL im Code vorkommt und außerdem alle Parameter typisierbar sind.
>> Benamsung von SPs und allen DB-Objekten möglichst ASCII,
>> unexotisch und nach nachvollziehbarem, übertragbarem Schema.
>> SP-Innereien eher schlicht halten im Hinblick auf Portierbarkeit.

>
> Alle Abfragen über StoredProc. -> meinst Du damit auch eine "einfache"
> Abfrage wie zum Beispiel <SELECT * from MyTable> - die mir die
> komplette TabellenStruktur und alle Daten zurückliefert, auf die ich
> dann zum Beispiel über eine DataAdpater die INSERT/UPDATE/DELETE-
> Commands aufbauen kann ?


gerade Stored Procedures versuchen wir bei einfachen Abfragen vollkommen
zu vermeiden. Bei einfachen Abfragen sind SPs eigentlich überflüsig und
bei komplexen Abfragen unterscheiden sich die SQL Dialekte doch erheblich.

Wir benutzen XPO von DevExpress als OR Mapper, für > 95% aller
Standardoperationen reicht das vollkommen aus. Den Rest kann man dann in
Stored Procedures verpacken. Der OR Mapper kann sowohl mit MySQL (warum
überhaupt MySQL und kein richtiges DMBS wie PostgreSQL?) als auch mit
dem SQL Sever und noch mit vielen anderen umgehen.

> und wenn ich dann komplexere Abfragen benötige - ebenfalls jede
> Abfrage in eine eigene StoreProc. packen ?
> und wie meinst Du das mit "alle Parameter typisierbar sind" ??


Gruß

Klaus
Mit Zitat antworten
  #5  
Alt 11-01-2009, 01:23 PM
Uwe Paredo
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen


"Michael Erlinger" <michael.erlinger*hotmail.com> schrieb

> ich soll eine C#-Applikation schreiben, die vorerst einmal auf eine
> MySQL-Datenbank zugreiffen soll; was sich aber in einem bis zwei
> Jahren ändern wird, und dann soll diese Applikation mit einem SQL-
> Server zusammenarbeiten.


> Frage an die Profis hier: wie würdet Ihr eine solche Applikation
> beginnen,


Garnicht - der Aufwand ist enorm und alle Versuche bisheriger Firmen
kläglich gescheitert.

Solche Versuche zeugen auch von der Ahnungslosigkeit der Entscheider. Wer
sowas verlangt und versucht gilt bei mir schonmal als ahnungsloser Idiot.


Mit Zitat antworten
  #6  
Alt 11-01-2009, 03:08 PM
Michael Justin
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Michael Erlinger wrote:

> Hallo
>
> ich soll eine C#-Applikation schreiben, die vorerst einmal auf eine
> MySQL-Datenbank zugreiffen soll; was sich aber in einem bis zwei
> Jahren ändern wird, und dann soll diese Applikation mit einem SQL-
> Server zusammenarbeiten.
>
> Frage an die Profis hier: wie würdet Ihr eine solche Applikation
> beginnen, um nach der Datenbank-Umstellung möglichst wenig (oder gar
> keinen) Programmier-Aufwand zu haben - die gleiche Applikation mit
> der gleichen Datenbank-Struktur weiter zu verwenden.....


Einfach: O/R Mapper ausprobieren und schauen welcher geeignet ist, zum
Beispiel:

* NHibernate
* Entity Framework

Später muss (im Idealfall) nur noch die Datenbank in der Konfiguration
umgestellt werden.

Wenn man schon weiss welche Datenbank später eingesetzt werden soll kann
man das auch bei Entwicklung und Tests berücksichtigen um die Feinheiten
der Systeme kennenzulernen. Hat man erst mal den Bogen raus, geht es mit
den nächsten RDMS entsprechend einfacher.

Viele Grüße,
--
Michael Justin
SCJP, SCJA
betasoft - Software for Delphiâ„¢ and for the Javaâ„¢ platform
http://www.mikejustin.com - http://www.betabeans.de
Mit Zitat antworten
  #7  
Alt 11-01-2009, 07:18 PM
FrankDzaebel
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Hallo Michael,

> ich soll eine C#-Applikation schreiben, die vorerst einmal auf eine
> MySQL-Datenbank zugreiffen soll; was sich aber in einem bis zwei
> Jahren ändern wird, und dann soll diese Applikation mit einem SQL-
> Server zusammenarbeiten.
> Frage an die Profis hier: wie würdet Ihr eine solche Applikation
> beginnen, um nach der Datenbank-Umstellung möglichst wenig (oder gar
> keinen) Programmier-Aufwand zu haben - die gleiche Applikation mit
> der gleichen Datenbank-Struktur weiter zu verwenden.....


Stored Procs würde ich vermeiden.
Für unabhängige DB-Entwicklung würde ich
als eine Möglichkeit den DbProviderFactory in Betracht
ziehen, allerdings würde ich beim Datenbank-Design
darauf achten, dass möglichst allgemeingültige Typen
benutzt werden, quasi als GGT.

[DbProviderFactory-Klasse (System.Data.Common)]
http://msdn.microsoft.com/de-de/libr...erfactory.aspx

[ADO.NET DbProviderFactory and.... - Stack Overflow]
http://stackoverflow.com/questions/1...derfactory-and
________

Eine andere Möglichkeit wären die OR-Mapper, würde ich
das Entity Framework empfehlen würde, allerdings würde ich
da, wenn möglich schon versuchen, mit dem EF des VS
2010 Beta2 (das feature-complete, aber noch nicht Bug-frei ist)
zu beginnen, je nach Zeitrahmen, denn es
gibt ein paar vorteilhafte Zusatzfeatures.

[Einführung in Entity Framework]
http://msdn.microsoft.com/de-de/library/bb399567.aspx

Neu in Version 2 ist beispielsweise, dass Änderungen der
Datenbankstruktur einfach auf den Anwendungscode übertragen werden
können. Weiterhin ist die Unterstützung für die modellgetriebene
Entwicklung neu: Es ist nun erstmals auch die Generierung der
Datenbank aus dem Entitymodell möglich, dadurch lässt sich die
Entwicklungsdauer datengetriebener Anwendungen stark verkürzen und die
Pflege der Anwendungen vereinfachen. Auch ein anpassbarer Wizard für
die Codegenerierung ist vorhanden: im neuen Entity Framework v2 können
Entwickler nun den vom Wizard zu generierenden Quellcode selbst
bestimmen. Die Standard-Codegenerierung wird in Form von T4 Text-
Templates ausgeliefert und kann von jedem Entwickler individuell
angepasst werden. Persistence-Ignorant Objects erlauben es
Entwicklern, individuelle Datenklassen mit dem Datenmodell zu
verwenden, ohne von "Entity"-Klasse erben zu müssen.

[Generating Artifacts By Using Text Templates]
http://msdn.microsoft.com/en-us/libr...5(VS.100).aspx


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Mit Zitat antworten
  #8  
Alt 11-02-2009, 06:44 PM
Michael v. Fondern
 
Beiträge: n/a
Standard Re: Applikation vorbereiten auf unterschiedliche Datenbank-Anbindungen

Hallo Michael,
> Frage an die Profis hier: wie würdet Ihr eine solche Applikation
> beginnen, um nach der Datenbank-Umstellung möglichst wenig (oder gar
> keinen) Programmier-Aufwand zu haben - die gleiche Applikation mit
> der gleichen Datenbank-Struktur weiter zu verwenden.....


neben den rein technischen Tipps, die hier schon gepostet wurden, noch
ein organisatorischer Tipp: warte nicht erst ein bis zwei Jahre ab,
bevor du die DB wechselst, sondern setz' möglichst bald auch dein
zweites Zielsystem in einer Testumgebung auf, welches du gelegentlich
immer mal wieder ausprobierst. So vermeidest du später böse
Überraschungen, auf was du alles hättest achten müssen.

Grüße

- Michael -
Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen
Es ist dir nicht erlaubt, auf Beiträge zu antworten
Es ist dir nicht erlaubt, Anhänge anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
listings: Wie unterschiedliche Styles für unterschiedliche Sprachen setzen? Gilbert Mirenque Newsgroup de.comp.text.tex 5 10-28-2009 01:55 PM
Teig vorbereiten? Jens Tönsing Newsgroup de.rec.mampf 5 01-02-2009 05:57 PM
Wie Nachnahmesendung vorbereiten? Florian Unger Newsgroup de.etc.post 2 10-25-2008 03:21 PM
Psychometrie Tests - wie vorbereiten? peth68@hotmail.com Newsgroup de.sci.psychologie 2 12-18-2007 06:56 PM
Wie auf Offizierspruefung bei der BW in Koeln vorbereiten? John Orlando Newsgroup de.etc.militaer 21 08-26-2007 09:08 PM


Alle Zeitangaben in WEZ. Es ist jetzt 03:12 PM Uhr.





Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Forum SEO by Zoints