Laden...

Korrektes Applikationsdesign?!?

Erstellt von Zed vor 17 Jahren Letzter Beitrag vor 13 Jahren 8.757 Views
Z
Zed Themenstarter:in
19 Beiträge seit 2006
vor 17 Jahren
Korrektes Applikationsdesign?!?

Hi Leute,

bei dieser Frage handelt es sich für mich nur um eine Verständnisfrage.
Ich selbst komme von der Delphi-Schiene und bin mir daher nicht sicher, ob meine Erstellung der Formularen + Kommunikation mit der DB korrekt ist, weil mir die ganze Erstellung der DB-Verbindungen im Gegenteil zu Delphi doch teilweise unnötig erscheint.

Also im momentan sieht das ganze so aus:

  1. Ich benutze die Firebird-Provider und habe ein Hauptformular, auf dem ich eine FbConnection habe. Diese benötige ich auf JEDEM Formular, damit ich Komponenten wie einen FbDataadapter damit verbinden kann.
  2. Sobald ich ein neues Formular erstelle, muss ich erst mal ne neue Connection stellen und eine Property mit einem "Set"-er, in dem ich die Connection meines Hauptformulars übergeben kann. Anschließend muss ich im "Set"-er, meine Connection der visuell erstellten Connection zuweisen + jedem Command die Connection neu zuordnen (weil diese nicht automatisch geändert werden, wenn die verknüpfte Connection neu zugewiesen wird)
  3. Anschließend muss ich zu aller erst einen Dataadapter erstellen um Daten für eine einfach Datenverarbeitung zu erstellen. Aus dem Dataadapter erstelle ich dann jedes mal ein DataSet um meine Komponenten visuell verknüpfen zu können. Will ich jetzt auch noch sowas wie ein "Position_Changed"-Ereigniss haben, lege ich mir noch eine Bindungsource an und Verknüpfe diese.

Was mich an dem ganzen stört: Ich muss für jedes Formular eine neue FbConnection erstellen und übergeben. Auch kann ich keinen DataAdapter, den ich auf einem anderen Formular vielleicht genau gleich erstellt hab, nochmal benutzen.
In Delphi gibt es Datenmodule. Nicht visuelle Oberflächen, auf dennen man 1 Connection ablegen kann + alle gewollten Query's um auf diese von allen Formularen zurück greifen zu können.

Von sowas wie einem Datenmodul hab ich bisher nichts gelesen. Und von einem Formular auf die Connection des Hauptformulars zurück zu greifen (vor allem auch wichtig im Design-Modus) soll ja auch nicht gehen. Hierzu gibt es ja jede Menge informationen hier im Forum.

Daher meine Frage:
Ist meine Erstellung der Applikation, wie oben beschrieben, richtig oder kann ich mir irgendwo Arbeit sparen?

G
131 Beiträge seit 2005
vor 17 Jahren

Hi,

schau mal hier:

http://www.entwickler-forum.de/webx?50@228.XqHhabi7ltB.2@.2cb7d398

PS: du kannst auch einfache UserControls nutzen. Musst sie ja nicht anzeigen.

Es gibt noch 2 andere Wege:

  1. Basis-Formular mit Connection, von der du alle weiteren ableitest

  2. völlig anderes System. GUI und Application völlig trennen. MVC oder 3-tier sind hier Stichpunkte. Bevor ich das wieder erkläre, verweise ich lieber auf die Suche hier im Forum. Da sind ein paar richtig gute Threads dabei, wo es wunderbar erklärt wird. Stichworte: MVC, 3-tier, n-tier, Layer

Z
Zed Themenstarter:in
19 Beiträge seit 2006
vor 17 Jahren

Danke für die schnelle Antwort.

Die Component Class, wie in deinem Link angegeben, kann man leider nicht benutzen um Komponenten visuell zu verknüpfen. (d.h. z.B. meine Textbox mit einem DataSet auf der Component Class) Per Code, wäre das aber die Lösung, die ich benötige.

Auf die Idee mit dem Basis-Formular bin ich auch schon gekommen, nur wäre mir eine Lösung, wie ein Datenmodul lieber.

Zu deinem letzten Vorschlag, muss ich mich erst mal genauer Informieren. Sieht aber auf den ersten Blick so aus, als müsste man hierfür sein Projekt von Anfang an komplett so aufbauen.

Was mich wundert: Ich hab einen typerisierten Dataset (eine Temp-Tabelle) den ich in jedem Formular verwenden kann. Warum kann ich das nicht auch irgendwie mit einem untyperisierten generierten Dataset realisieren?!?

G
131 Beiträge seit 2005
vor 17 Jahren

Zu deinem letzten Vorschlag, muss ich mich erst mal genauer Informieren. Sieht aber auf den ersten Blick so aus, als müsste man hierfür sein Projekt von Anfang an komplett so aufbauen.

Ja, da muss von Anfang an so geplant werden.

Was mich wundert: Ich hab einen typerisierten Dataset (eine Temp-Tabelle) den ich in jedem Formular verwenden kann. Warum kann ich das nicht auch irgendwie mit einem untyperisierten generierten Dataset realisieren?!?

Ähm, verstehe ich nicht ganz. Ein typisiertes Dataset (TD) ist nur eine Klasse, welche ein untypisiertes Dataset (UTD) umhüllt. Das TD stellt über Properties oder Funktionen einen typensicheren Zugriff auf Tabellen und Inhalten zur Verfügung. Das gleiche kannst du auch mit einem UTD erreichen.

Inwiefern kannst du ein TD überall verwenden. Hast du irgendwo eine Instanz auf ein TD erstellt, auf welche man über ein Propertie zugreifen kann?

public class xx
{
   // TD = typisiertes DataSet;
   private TD _data = new TD();

   public TD Data
   {
       get { return this._data;}
   }

}


public class y
{
   public void DoSomething()
   { 
      xx ClassXXVar = new xx();
      TD publicData = ClassXXVar.Data;
   }
}
Z
Zed Themenstarter:in
19 Beiträge seit 2006
vor 17 Jahren

Ich bin mir nicht 100% sicher, ob ich mich richtig ausdrücke. Beschäftige mich erst seit kurzem mit der C#-Welt.

Also was ich gemacht hab:
Zum Projekt -> Neues Element hinzufügen -> Dataset

Anschließend in dem erstellten Dataset manuell eine DataTable angelegt und manuell Felder eingepflegt. Dieses Dataset wird dann manuell per Code gefüllt (also nicht mit .fill())

So ein Dataset nennt man doch "typerisiertes Dataset" oder?

Auf jeden Fall kann ich dieses Dataset immer verknüpfen, egal auf welchem Formular im Projekt. Ich bekomme dann bei der Databindung-Zuweißung immer den Baum:

Weitere Datenquellen
-> Projektdatenquellen
-> MeinDataSet

Der DataAdapter von Firebird erstellt leider nur "untyperisierte Dataset" in dem Formular und sind somit nicht Projektübergreifend verfügbar.

Hoffe jetzt hab ich mich verständlicher ausgedrückt?

Auf jeden Fall möchte ich die generierten Datasets (untyperisierte) Projektübergreifend zur Verfügung stehen haben, wenn dies möglich wäre?

G
131 Beiträge seit 2005
vor 17 Jahren

Hi,

ähm ok jetzt versteh ich dich besser. Also: ich selber geh nie den Weg weil ich immer im Code die TD's erstelle. Hintergrund ist die von mir bereits erwähnte Trennung nach Tiers und Layern.

Schau mal bitte in der Methode InitializeComponents() in der FormX.Designer.cs nach. Ich denke für jedes Formular wird dort eine neue Variable und Instanz des TD angelegt. Du willst aber, das es auf einem Formular liegt und nur eine Instanz also nur 1x vorkommt und dann von jedem Formular aus zugreifbar ist.

Wenn das nicht der Fall ist, dann kannst du das über eine statische Variable lösen
Bevor ich viel rede nen Code-Bsp:

public class DataModul:CustomControl
{

   private UTD _MyData;

   #region Singleton-Implementierung
   // sichert die einmalige Existenz einer! Instanz von DataModul zur Laufzeit
   // nähere Infos zu Singleton hier im Forum oder z.B. bei wikipedia.de
   private static readonly DataModul _Instance;

   private DataModul()
   {
      //Constructor

      this._MyData = new UTD();
      ... // DataSet füllen
   }

   #endregion

   public static DataModul GetDataModulInstance()
   {
      if(DataModul._Instance == null)
         DataModul._Instance = new DataModul();
     
      return DataModul._Instance;
   }

   public UTD MyUntypedDataProperty
   {
      get{ return this._MyData;}
   }
}


public class FormX:System.Windows.Forms.Form
{
   ...

    public void DoSomethingWithUTD()
    {
         UTD = DataModul.GetDataModulInstance().MyUntypedDataProperty;
         ... // UTD verwenden
    }
   ...
}

Vorteil vom Erben von CustomControl ist, das du den Designer nutzen kannst.

K
13 Beiträge seit 2010
vor 13 Jahren

Habe diesen Thread hier entdeckt, was auch mein Problem beschreibt! Verwende VS2008 und komme auch aus der Delphi Welt! Wenn man eine etwas größere Applikation entwickelt, kann der normale weg nicht funktioniert, man kann nicht in jeden Formular alle datenbank Komponenten reinlegen und 100 Instanzen auf eine Db haben!

Leider funktionieren das Beispiel von oben nicht!

  1. Es gibt kein CustomControl, könnte jetzt UserControl heißen?
  2. Was ist ein UTD? Das erkennt der Compiler auch nicht!

Gibt es mitlerweile eine Schönere möglichkeit, möchte die Datenbankkomponenten auf einen Datenmodule(keine Ahnung wie man das in C# nennt) legen und alle Formulare sollten dort zugreifen können!

F
10.010 Beiträge seit 2004
vor 13 Jahren

Leichenflederer!

Wenn man eine etwas größere Applikation entwickelt, kann der normale weg nicht funktioniert,

Dies ist ein ziemlich schlechtes Beispiel, das so ganz bestimmt nicht die normale Herangehensweise in .NET zeigt, im Gegenteil, es ist der komplett falsche Weg.
Auch zeigt es, das man fast nichts aus der Delphiwelt in .NET gebrauchen kann.
Die Herangehensweisen sind komplett anders.

Ausserdem fängt Applicationdesign nicht beim DB zugriff an.
Als erstes musst du dich entscheiden was es werden soll, WindowsForms oder WPF.
Als nächstes dann MVP oder MVVM oder MVMVP oder..........
Benutzt du ein AppFramework wie SCSF, Prism, Chinch oder machst du es selber.
Dann ob und welchen DI/IOC Container du benutzen willst.
Dann die DB Schnittstelle, wird es ADO.NET oder ein ORMapper wie EF4 oder NHibernate.

Erst jetzt solltest Du dir Gedanken machen ob du per DI/IOC Container deinen DAL Injizierst oder Repositories immer neu erstellst.

Versuch einfach alles zu vergessen was Du wie mit Delphi gelöst hast, es ist einfach alles anders.

K
13 Beiträge seit 2010
vor 13 Jahren

Für mich sind deine Begriff noch etwas neu, aber einwenig gegoogelt habe ich!

Meine Applikation sollte eine normale Windows Applikation sein, sammle Daten von externen Geräte(WLAN, LAN oder Serial) das ganze wird dann über Threads kommunizieren und brauche dazu eine Windows Benutzeroberfläche!

Habe da an einere Windows-Forms Applikation gedacht! Werde wahrscheinlich eine MSSQL-Datenbank verwenden über ADO.NET!

Habe mir mal kurz so ein 3 Schichten(Data, Business, UI) Model angesehen! Da muß man sich sicher daran einigezeit damit befassen!

Möchte mein erstes richtiges C# nicht zukompliziert gestalten!

Kannst du mir eine einfache Lösung für meine Anforderung empfehlen?

Hinweis von gfoidl vor 13 Jahren

Es gibt auch noch andere Satzzeichen als das Rufzeichen (!) - es ist ausdrücklich erlaubt diese auch zu verwenden 😉

F
10.010 Beiträge seit 2004
vor 13 Jahren

Einfach ist immer im Auge des Betrachters.

  1. Mit Threading solltest du dich auf jedenfall vorher intensiv beschäftigen, denn da hast du viele Fallstricke. Schau mal unsere FAQ und Artikel durch.

  2. Der Einsatz eines DI/IOC Containers ist nicht schwer, man muss ihn ja nicht von Anfang an voll ausnutzen.

  3. Erstelle dir einen DAL für den Zugriff auf die DB, und erstelle diesen bei Programmstart. Injecte diesen in die Module von wo aus du den Ziugriff benötigst.
    Statt DI/IOC könntest du auch direkte übergaben machen, aber das wird dann komplizierter als es zu Injecten.

K
13 Beiträge seit 2010
vor 13 Jahren

Was mich stört dabei ist dass damit das schöne DB Komponenten reinlegen wegfällt, liege ich da Richtig?

G
131 Beiträge seit 2005
vor 13 Jahren

@Koloss: Ja

@FZelle: ich weiß ja nicht, wie gut Koloss sich auskennt, aber IOC/DI für den Start finde ich bissl übertrieben. Normale View-Business-DataLayer würde reichen.

Wenn es doch sein soll, dann schau mal hier Koloss: Enterprise Library 5

K
13 Beiträge seit 2010
vor 13 Jahren

Wie gesagt in C# so gut wie garnicht. Gibt es Irgendwo ein Beispiel mit einer Datenbank für das Normale View-Business-Datalayer Modell?

G
131 Beiträge seit 2005
vor 13 Jahren

schau dier mal das Beispiel von Rainbird an n-Tier Architektur Beispiel

F
10.010 Beiträge seit 2004
vor 13 Jahren

@Koloss:
Auch Schön ist da im Auge des Betrachters.
Ich persönlich finde diese DB Componenten hässlich.

@Generalissimo:
Naja, das würde ich jetzt persönlich als deutlich komplexer bezeichnen als "mal eben" einen DI/IOC Container zu benutzen.

Er soll ja keinen selber schreiben, nur benutzen, und das hat ja erstmal überhaupt nichts mit den 3 Layern zu tun, sondern erleichtert nur die Arbeit.
Und 3Layer und N-Tier sind etwas komplett verschiedenes.

K
13 Beiträge seit 2010
vor 13 Jahren

Leider funktioniert dieses N-Tier Beispiel nicht, bekomme beim starten immer einen Fehler SessionID!=Null ..., habe natürlich vorher denn appserver gestartet.
Es scheint als ob dieses Projekt in VS2005 Programmiert wurde!

Auch scheint mir dieses Beispiel für den Anfang sehr kompliziert!

K
13 Beiträge seit 2010
vor 13 Jahren

Um mein Problem ganz einfach zulösen, jede Anwendung hat eine MainForm dort kann ich eigentlich mein Dataset und die TableAdapter reinlegen. Dort hat dann jedes Form Zugriff! Das funktioniert auch so wie ich mir das Vorstelle.

Laut euer und vieler anderen User ist diese Methode scheinbar falsch, ich frage mich für was habe ich typiserte Datasets und visuelle DB Komponenten wenn ich sie garnicht verwenden soll? Irgendwie verstehe ich diese Logik überhaupt nicht! Mir kommt vor mit dieser .net Logik geht man wieder 15 Jahre zurück! Heutzutage zählt nicht so, wie man eine Software entwickelt, sondern wie schnell ist man fertig damit.

Vielleicht denke ich auch falsch! Ich habe in Delphi größere Projekte entwickelt mit locker 30 Tables, da stelle ich mir in C# Sharp Chaos pur vor.

Habe noch kein vernünftiges Beispiel gefunden für ein 3 Schichten Modell mit Windows Forms und ADO.net Anbindung.

Funktionieren Typisierte Datsets im 3 Schichten Modell vielleicht doch?

W
955 Beiträge seit 2010
vor 13 Jahren

Es kommt immer auf den Business der Anwendung an. Wenn Du nur eine Art Admintool baust und mehr oder weniger die Datenbanktabellen direkt in den Forms bearbeiten lassen willst kannst Du wahrscheinlich mit plain Ado.Net schnell Ergebnisse erzielen.
Das Problem besteht aber eher darin dass heutzutage Business-Objekte eine sehr komplexe Anwendungslogik kapseln müssen und es deshalb besser ist diese Logik in den Objekten direkt zu implementieren. Also ich möchte nicht mehr irgendwelche DataTables oder -Rows durch irgendwelche Objekte schleusen die diese Teile irgendwie modifizieren.
Wenn die Anwendungslogik komplex ist kommen auch weitere Faktoren hinzu. Wie stelle ich sicher dass die Logik korrekt implementiert ist? Z.B. durch Unittesting aber wie implementiere ich dies wenn die Dataset-Objekte auf den Forms geklatscht worden sind? Wie tausche ich GUI und Storage aus, schließlich ist die Anwendungslogik das Teil einer Software die am längsten überlebt.
Ich würde nicht sagen dass .Net-Technologien in der Zeit zurückgegangen sind, sondern die alte Visual-Komponent-Idee für komplexe Anwendungen einfach unzureichend ist.

2.187 Beiträge seit 2005
vor 13 Jahren

Hallo Koloss,

Dass man die visuellen Datenbank-Komponenten nicht verwenden soll stimmt zu 99%.
Microsoft bietet immer viele Möglichkeiten eine bestimme Aufgabe zu lösen. Meistens wird als erstes und offensichtlichstes die Quick-and-Dirty Lösung angeboten.
Bei Datenbankzugriffen sind das (Typisierte-)DataSets und die BindingSources dazu. Diese funktionieren (ich würde nie was anderes behaupten), jedoch sind diese für Rapid-Application-Developement und damit ist die entwickelte Software:

  • schwer Wartbar
  • nicht Erweiterbar
  • nicht Wiederverwendbar
    Übertrieben gesagt:
    Entwickeln und Wegwerfen.

Gruß
Juy Juka

K
13 Beiträge seit 2010
vor 13 Jahren

Bin eigentlich auch bald so weit, das ich glaube, Typisierten Dataset und das Formular auf Formular zugreifen auch nicht sehr komfortable ist in C#.

Formular auf Formular zugreifen funktioniert trotzdem muß ich die Bindings händisch zuweisen, dass bringt mir dann auch nicht sehr viele Vorteile.

Ich finde derzeit kein vernünftiges Three Tier Beispiel, wo einfach auf eine Tabelle über ADO.NET zugegriffen wird und der Präsentation Teil eine Windows-Form Applikation ist! Habt Ihr Tips wo ich sowas für VS2008 finden kann?

K
13 Beiträge seit 2010
vor 13 Jahren

Bin noch immer auf der Suche nach ein vernüftiges Beispiel!

Bin an ein Beispiel gestoßen das funktionieren könnte von der Logik her aber das Funktioniert nicht richtig!

http://lamahashim.blogspot.com/2010/04/c...chitecture.html

Folgendes Problem:


        public static SqlDataReader GetReader(string commandText, SqlParameter[] parameters)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(ConnectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(commandText, conn))
                    {
                        foreach (SqlParameter param in parameters)
                            cmd.Parameters.Add(param);
                        SqlDataReader reader = cmd.ExecuteReader();
                        return reader;
                    }
                }
            }
            catch
            {
                throw;
            }
        }  



            SqlDataReader reader = DAL.GetReader("SELECT * FROM EmployeeDetails WHERE Id = @Id", param);
            if (reader.HasRows)
            {
                EmployeeEntity emp = new EmployeeEntity();
                while (reader.Read())
                {
                    int temp = 0;
                    int.TryParse(reader["Id"].ToString(), out temp);
                    emp.Id = temp;
                    emp.Name = reader["Name"].ToString();
                    emp.Address = reader["Address"].ToString();
                    break;
                }
                return emp;
            }  

Es geht um den Befehl reader.HasRows, der Reader ist an dieser Position wieder geschloßen. Ich vermute dieses passiert automatisch bei verlassen der funktion GetReader!

F
10.010 Beiträge seit 2004
vor 13 Jahren

Ja, denn Using bedeutet am Ende Dispose des Commands aufgerufen wird, was den Reader natürlich schliesst.

Auch ist die Schleife natürlich humbug, wenn du nur ein Object benutzt.
Und das Static hat in einem DAL nichts zu suchen, sonst bekommst du spätestens bei Threading probleme.
Und der Rest dieses Blogs ist auch Architektonisch kompletter m....
Der kommt anscheinend von VB6 und hat das mit der OOP noch nicht so durchdrungen.

Wenn du etwas lernen willst, geh auf Codeproject.com oder Codeplex.com wobei ersteres ein Bewertungssystem hat, da siehst du schnell, was wie nicht gemacht werden sollte.
Mit den beiden Adressen hast du auch gleich ein gegenstück zu torry.ru

        public void HydrateFromReader(string commandText, SqlParameter[] parameters, Predicate<SqlDataReader> action)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(ConnectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(commandText, conn))
                    {
                        foreach (SqlParameter param in parameters)
                            cmd.Parameters.Add(param);

                        SqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            if (action(reader))
                                break;
                        }
                    }
                }
            }
            catch
            {
                throw;
            }
        }

            Employee emp = new Employee();

            Context.HydrateFromReader("SELECT * FROM EmployeeDetails WHERE Id = @Id", param, (reader) =>
                {
                    int temp = 0;
                    int.TryParse(reader["Id"].ToString(), out temp);
                    emp.Id = temp;
                    emp.Name = reader["Name"].ToString();
                    emp.Address = reader["Address"].ToString();
                    return true;
                });
            return emp;            

So sähe das besser aus.

Nur warum willst Du dir das antun?
Es gibt zig verschiedenen ORMapper (NHibernate, EF4 ) oder Zugriffstools ( BLToolKit ) die dir das alles abnehmen.

Bei den Linq unterstützenden Tools sähe das z.b. dann so aus


var emp = from e in Context.Employees 
                where e.Id == id 
                select e;

return emp;

K
13 Beiträge seit 2010
vor 13 Jahren

Mein Kopf raucht!?!?

Natürlich möchte ich nicht unnötiges SourceCode tippen!

Wenn ich nicht demnächst ein Project in .net hätte, würde ich sagen weg mit den Dreck, sowas umständliches ist mir selten untergekommen!

Na gut jetzt zum Thema, hab mir jetzt mal das BLToolKit angesehen, so wie ich das auf die schnelle verstanden habe sind es reine Templates wo ich meinen Code reinsetzen soll!. Wie ich das dann alles verknüpfe noch keine Ahnung.

Die 2 anderen habe ich noch nicht zum installieren geschafft, keine Ahnung derzeit wie ich die Installiere!

Ich muß sowieso bei einen anfangen, ist für den Start BLToolKit in Ordnung?

F
10.010 Beiträge seit 2004
vor 13 Jahren

Ehrlich gesagt nein.

BLToolKit ist etwas für jemanden der sich gut mit .NET auskennt, und weiss was er tut, und da bist Du noch weit von entfernt.
Du würdest am Anfang eher zu viel damit zu tun haben als alles andere zu machen.

Und wenn du dich mit den Vorzügen der IDE mal beschäftigen würdest, müsstest du z.b. den Code zum binden auch nicht selber schreiben.
DatenQuelle Hinzufügen, Object auswählen, DetailView einstellen, auf eine Form ziehen und schon hast alle Felder gebunden, incl Bindingsource und Navigator.
Wie kann ich eine Datenbankanwendung in .NET schreiben? Ist zwar für VB.NET, aber das selbe geht auch für C#.

Du schreibst das du demnächst ein Kundenprojekt machen musst, was ist das denn, dann kann man da vielleicht viel eher etwas zu sagen als solche abstrakten Antworten geben zu müssen.

Es wäre z.b. wichtig zu wissen ob du Brownfield oder Greenfield machen wirst.

Greenfield => Grüne Wise, also alles frisch und neu.
Brownfield => Alte Sachen versuchen aufzupeppen oder weiterzumachen.

Ist es Datenzentrisch, also viele Daten, oder eher so ne "Normale" Endanwender GUI sache?
Datenbank Vorgaben?

All das kann dann eher helfen dir etwas zu raten.

K
13 Beiträge seit 2010
vor 13 Jahren
  1. Vorzügen der IDE, die kenne ich, so in der Art habe ich mir es vorgestellt. Aber so wie .Net es macht kann es nicht funktionieren, ich kann doch nicht in jedes Formular alle Komponenten reinlegen, ein Ding der unmöglichkeit, deswegen gibt es in Delphi ein gemeinsames Datenmodul!

  2. Die Anwendung ist eine Neuentwicklung. Die Anwendung ist etwas komplizierter zum Erklären aber es geht im groben darum, Daten einzugeben und die werden dann gegenseitig verrechnet! Ich würde sagen einerseits eine Normale Dateneingabe Anwendung andererseits, suche datensatz, x, y, z, in Tabelle a, b, c und mach was damit!

1.457 Beiträge seit 2004
vor 13 Jahren

Hallo Kokos,

Sorry, aber auch ich habe jahrelang in Delphi programmiert und wenn du mir mit Klicki & Bunti kommst und behauptest das .NET macht alles kompliziert usw. dann hast du das Berufsfeld leider verfehlt!

Wenn du ein korrektes Applikationsdesign haben möchtest, musst du auch arbeiten!

F
10.010 Beiträge seit 2004
vor 13 Jahren

@Koloss:
Du bist so festgefahren in deiner alten Denke, das du nicht sehen willst wie es gehen könnte, und du glaubst scheinbar das du innerhalb weniger Tage ein komplett neues System durchdringen könntest.

In den letzten 20 Jahren hat die SW Entwicklung einen Prozess durchgemacht, der leider scheinbar an den meisten VB und Delphi Entwicklern vorbeigegangen ist,
aber es wird einen Grund haben, warum viele Delphi Leute umsteigen ( müssen ).

KlickydiBunti ist u.a. deshalb in echten Anwendungen nicht wirklich der Weisheit letzter Schluss, weil man das nicht automatisch testen kann.

Zu 1 )
Wovon redest Du hier?
Was für Komponenten musst/willst du hier überall ablegen?
Du erstellst dir einmal die DataSource, das kann ein TableAdapter sein ( also typisiertes DataSet ) oder von deinen DomainObjekten ( ORMapper klassen ).
Wenn du diese dann auf eine Detailform ziehst wird nur eine BindingSource und die entsprechenden Controls "aufgebracht".
Und wenn du dann noch ein bischen OOP machst, also den Datenzugriff selber dann z.b. über DI/IOC zur Verfügung stellst, ist da überhaupt nichts überflüssig.

Ich wollte sowieso mal so ein "einfaches Demo" machen, kann aber bis morgen früh dauern.

K
13 Beiträge seit 2010
vor 13 Jahren

FZelle:

So eine Demo wäre toll. damit ich mal einen überblick habe wie man eine Anwendung vernünftig entwickelt.

Also bei mir legt er bei jeder Form Dataset, TableAdapter, AdapterManager, BindingSource, BindingNavigator. Vielleicht mache ich ja auch was falsch, lasse mich gerne belehren.

Das Problem ist, du sagst nehme EF4, NHibernate oder BLToolkit. Ich denke mir was solle ich jetzt nehmen? Eines würde mal reichen, nur welches.

Vielleicht Bringt mir deine Demo mehr aufschluß.

F
10.010 Beiträge seit 2004
vor 13 Jahren

Weiss nicht, ob dir die Demo soviel dabei hilft 😉

Ich habe sie mit SCSF erstellt.
Dann habe ich noch das Contrib Project dazu benutzt.
Und als ORMapper setze ich Retina.NET ein ( vielleicht finde ich ja mal die zeit für Timur ).

Insofern kann dir das nur zeigen wie es am ende aussehen kann.
Und da die Assistenten von SCSF vieles an arbeit abnehmen, sieht der code auch nur viel aus.

Ich muss das noch ein bischen anhübschen, aber für bis jetzt 2 Stunden arbeit incl. neu Installation der 2010 Version von GAX/GAT + SCSF geht es schon.

Mal sehen ob ichs heute noch "fertig" bekomme.

Edit:
Soderle, nochmal ne stunde reingesteckt, aber leider ist das dann etwas gross geworden.
Knapp etwas über 1 MB.
Muss ich mal sehen wo ich das hinstelle.