AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language 2 Units zusammenfassen in eine Untergeordnete Logikschicht

2 Units zusammenfassen in eine Untergeordnete Logikschicht

Ein Thema von Impulz · begonnen am 21. Dez 2011 · letzter Beitrag vom 23. Dez 2011
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#1

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 12:42
Du vermischst Objekte, die eigentlich nichts (direkt) mit einander zu tun haben. So ist es z.B. nicht einzusehen, wieso die Connect-Klasse Kunden speichern soll.
Was mir als Vorschlag spontan einfällt:
- ein Klasse für die Datenverbindung
- eine Basisklasse zum Anlegen/Bearbeiten/Löschen von Daten
- eine Basislistenklasse für die Abfrage/Filterung von Datenmengen
- spezielle Ableitungen dieser beiden Klassen für Kunden/Bücher etc.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#2

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 12:57
Hi,
vielen Dank erstmal an dich

aufgebaut ist es ja gerade so, dass die Logikschicht(Databaseconnect bzw connect) alles hat was mit datenbank zutun hat und die logik

die OBS (Oberfläche) pickt sich da einfach immer was raus (schichtenarchitektur)

die einzelnen Abteilungen sind in form von Units (hier ganz unten als UKunde) doch gegeben

abfrage und filterung der Datenmengen siehe: OBS und Databaseconnect (durch SQL wird doch abgefragt und mit der Oberfläche (OBS) aufgerufen)


die frage ist nur wie kriege ich das Kunden Objekt gebündelt mit den anderen Objekten hier zb noch eins von denen:


Code:
unit USendungsverfolgung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls;
type

  TSendung = class(TObject)
  private
    FSendung_ID : integer;
    FSendung_Status: String;
    FSendung_Rechnung: String;
    procedure setStatus(newValue : String);
    procedure setRechnung(newValue: string);
  public
    constructor Create (ASendung_ID:integer; AStatus, Arechnung: string);
    property Status: string read FSendung_Status write setStatus ;
    property Rechnung: string read FSendung_Rechnung write setRechnung;
    property ID: integer read FSendung_ID;
  end;

  TSendungList = class(Tobject)
  private
    FSendungListe :TStringList;
  public
    procedure addSendung (ASendung:TSendung);
    function Count():integer;
    function getSendungById(ASendung_ID:integer):TSendung;
    function getSendungByIndex(AIndex: integer): TSendung;
    constructor create ();
  end;

implementation

uses StrUtils;

{ TKunde }

constructor TSendung.Create(ASendung_ID:integer; AStatus, Arechnung: string);
begin
  inherited Create();

  self.FSendung_ID:= ASendung_ID;
  self.FSendung_Status:= AStatus;
  self.FSendung_Rechnung:= ARechnung;
end;

{ TKUndeList }
function TSendungList.Count():integer;
Begin
  result:= FSendungListe.Count;
end;

procedure TSendungList.addSendung(aSendung:tSendung);
begin
  FSendungListe.AddObject(IntToStr(ASendung.ID),ASendung);
end;

constructor TSendungList.create;
begin
  inherited create();
  self.FSendungListe:=TStringList.Create;
end;

function TSendungList.getSendungByID(ASendung_ID:integer): TSendung;
var
  idx : Integer;
begin
  idx := FSendungListe.IndexOf(IntToStr(ASendung_ID));
  if (idx>-1)then
  begin
    Result:= TSendung(FSendungListe.Objects[idx]);
  end else
  begin
    result:= nil;
  end;
end;

function TSendungList.getSendungByIndex(AIndex: integer): TSendung;
begin
  if(AIndex>-1)and(AIndex<FSendungListe.Count) then
  begin
    result:= TSendung(FSendungListe.Objects[AIndex]);
  end else
  begin
    result:=nil;
  end;
end;

procedure TSendung.setRechnung(newValue: string);
begin
  if (Trim(newValue)<>'') then
  begin
    self.FSendung_Rechnung:=newValue;
  end;
end;

procedure TSendung.setStatus(newValue: String);
begin
  if (Trim(newValue)<>'') then
  begin
    self.FSendung_Status:=newValue;
  end;
end;

end.

damit ich daraus dann alles zur anzeige bringen kann.

mein ausbilder möchte leider, dass ich eine logik unit zur verknüpfung meiner Objekte anlege....

ich habe aber GARKEINE ahnung wie das gehen soll... nicht mal nen kleinen schimmer wie ich die Unit an sich aufbau: bisher bin ich soweit:

Code:
unit Objektezusammenfassen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls,UKunde,UBuecher,Autoren,USendungsverfolgung;
type
  TLogObjects = class(TObject)


  private
  FlogObjects: Tlogobjects;

  public
  procedure addObjects (AAutor:TAutor;AKunde:TKunde;ABuch:TBuch;Asendung:Tsendung);









  end;

implementation

{ TLogObjects }

procedure TLogObjects.addObjects(AAutor: TAutor; AKunde: TKunde;
  ABuch: TBuch; Asendung: Tsendung);
begin

end;

end.
fehlt noch irgendwas an code zum verständniss?

oder wo wird was nicht verstanden?
gerne fragen
Danil
  Mit Zitat antworten Zitat
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#3

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 12:59
Du vermischst Objekte, die eigentlich nichts (direkt) mit einander zu tun haben.
ja, das soll sich ja jetzt ändern damit ich die gleichzeitig zur anzeige sortiert bringen kann


wieso die connect klasse kunden speichert?

weil wenn die Oberfläche speichern würde und es zurückschicken würde wäre es A: doppelter weg
B falsche schichtenarchitektur
Danil
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#4

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:02
Meine Frage zielte dahin ab, wieso die Connection Kunden etc. kennen muss? Sie ist dem Namen nach doch dazu da, eine Verbindung zur DB zu verwalten. Kunden/Bücher/WasWeißIchSonstNoch hat sie doch überhaupt nicht zu interessieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#5

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:06
Die aufgabe der Connection Unit besteht darin:

wie du schon richtig sagtest: die Verbindung herzustellen.


Nur außerdem Erstellt sie die Queries und die Transaktionen und feuert die SQL's ab für verschiedene Situationen, DatenSpeichern, Laden,Löschen,bearbeiten.

Sie übernimmt die Funktion der Logik zwischen Datenbank und Oberfläche also alles was von der DB an die Oberfläche geht geht aus der Connection
als beispiel hier zb:




Code:
procedure TDataconnect.LegeSendungAn(ASendung: TSendung);

var
  neuerSeQuery: TIBOQuery;
  neuerSeTransa:TIBOTransaction;
begin
  neuerSeQuery:= TIBOQuery.Create(nil);
  neuerSeTransa:= TIBOTransaction.Create(nil);
  neuerSeTransa.IB_Connection:=neuerseQuery.IB_Connection ;
  try
    neuerSeQuery.IB_Connection:= FDataBase;
    neuerSeTransa.IB_Connection:= FDatabase;
    try
      neuerSeQuery.SQL.Text:= 'INSERT INTO Sendungsverfolgung (Status,Rechnung) Values ('+QuotedStr(ASendung.Status)+','+QuotedStr(ASendung.Rechnung)+') returning Sendungsverfolgung_ID';
      neuerSeQuery.ExecSQL;
      neuerSETransa.Commit;
    Except
      on E : Exception do
      begin
        ShowMessage('FEHLER IN LEGE Sendung AN');
        neuerSeTransa.Rollback;
      end;
    end;
  Finally
    neuerSeQuery.Free;
    neuerSeTransa.Free;
  end;
end;
und auf die funktion greift die oberfläche zu und zwar hier:::::::::::::
*SIEHE SENDUNG*

Code:
procedure TStartseite.Hinzufgen1Click(Sender: TObject);
var
  Kunde: TKunde;
  Buch: TBuch;
  Sendung: TSendung;
  Autor: TAutor;
begin
  Dateneditieren.StrGrAuswahl.Cells[0,0]:='';
  Dateneditieren.StrGrAuswahl.Cells[1,0]:='';
  if IsPositiveResult(Dateneditieren.ShowModal()) then
  begin
    case (rgAuswahl.ItemIndex) of
      0 : begin
            Kunde :=TKunde.create (0,Dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]);
            connect.LegeKundeAn(Kunde);
            addKundetoLV(Kunde);

          end;
      1 : begin
            Sendung:= TSendung.Create(0,Dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]);
            connect.LegeSendungAn(Sendung);
            addSendungetoLV(Sendung);
          end;
      2 : begin
            Autor:= TAutor.Create(0,dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]);
            connect.LegeAutorAn(Autor);
            addAutortoLV(Autor);
          end;
      3 : begin
            Buch:= TBuch.Create(0,StrToInt(Dateneditieren.StrGrAuswahl.Cells[0,0]),Dateneditieren.StrGrAuswahl.Cells[1,0]);
            connect.LegeBuchAn(Buch);
            addBuchtoLV(Buch);
          end;
    else
      begin
        ShowMessage('Ups, beim Anlegen des Kunden lief etwas schief');
      end;
    end;
  end;
end;
Danil

Geändert von Impulz (21. Dez 2011 um 13:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#6

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:14
Das ist IMHO der falsche Ansatz. Gib mir ein paar Minuten Zeit, dann skizziere ich mal, wie ich das meinte.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#7

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:30
So, hier nun ein gaaanz grobes Modell:
Code:
TDataConnection
  - Servername
  - Benutzername
  - Passwort
  - DBName
  - Connect()
  - Disconnect()
 
TBasisdaten
  - Anlegen()
  - Bearbeiten()
  - Löschen()
 
TBasisliste(TObjectlist)
  - Connection: TDataConnection
  - Filter
  - Datenholen()
  - Aktualisieren()
 
TKunde(TBasisdaten)
  - ID
  - Name
  - Vorname
 
TKundenliste(TBasisliste)

Dasselbe dann für Bücher, etc.
Wenn man so etwas wie Referenzzählung und Klasseneigenschaften unter Delphi 7 hinbekommt, dann kommt man mit einer einzigen Connection aus, die vom ersten erzeugten Objekt erstellt und vom letzten zerstörten wieder freigegeben wird. Aber das sind Details, um die man sich später kümmern kann.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#8

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:37
okay.

aber wie löse ich nun mein problem.
ich müsste ja die Kunden, Buecher etc an ein 'Übergeordnetes' Objekt weitergeben und dann das Objekt zur anzeige bringen?

und dieses Übergeordnete objekt brauche ich ja auch um die beziehungen zwischen den tabellen auch in der syntax darzustellen.


und mein problem ist es: einen ansatz bei dem objekt zufinden um die Kunden usw zusammenzufassen.

wie sieht sowas aus?

BEISPIELWEISE

KUNDENOBJEKT= KUNDEN ID VORNAME NACHNAME
BUCHOBJEKT= ID PREIS NAME

ich will aber das zur anzeige bringen:


KUNDEN VORNAME NACHNAME BUCH PREIS BUCH NAME:

usw...
Danil

Geändert von Impulz (21. Dez 2011 um 13:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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 hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz