Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Sauber? - Datenobjekt kennt sein Model
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

Sauber? - Datenobjekt kennt sein Model

beantworten | zitieren | melden

Hallo,

eins zwei mal habe ich bei einfachen Anwendungen darauf gesetzt, das das Datenobjekt, auf das Ein-/Ausgaben gemacht werden selbst die Methoden zum laden, speichern & ändern in / aus der Datenbank kennt.

Quasi nach dem Prinzip:


private class MyBusinessObject
{
      private MyBusinessObjectModel _model;

      public MyBusinessObject(int iID)
      {
          MyBusinessObject this._model.GetBusinessObject(iID);
          // properties zuweisen
          //..
      }
}

Kann man das so machen, oder sollte das Datenobjekt zwar geliefert werden durch das Model jedoch aber nicht sich selbst um die Erstellung kümmern?

Ich fand es an dieser Stelle recht einfach und übersichtlich, da die Forms somit wirklich nur die zu bearbeitenden Objekte kannten. - Ich möchte mir nur nichts einprägen, was eventuell unsauber ist. Daher meine Frage.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

Ich nutze Models nur als reine Datenhaltungsobjekte ohne Logik.
Umd as Laden der Models sollte sich imho eine andere Stelle kümmern (Repo, DA)

Grüße
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

beantworten | zitieren | melden

Schon klar, mache ich im normalfall bei größeren Sachen auch. Nur habe ich es eben schon 2 mal gemacht bei kleineren Sachen.

Mein Problem ist ja hier einfach, ob man das so machen kann oder ob das Objekt seine Daten nicht über den DAL selbst holen sollte.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Peter Bucher
myCSharp.de - Experte

Avatar #jVxXe7MDBPAimxdX3em3.jpg


Dabei seit:
Beiträge: 6141
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Hallo inflames2k

Machen kann man das so, hast du ja selber schon ;-).
Das ganze nennt sich ActiveRecord-Pattern, oder es ähnelt diesem zumindest.
- Active Record

Für kleinere Sachen nutzbar, für grössere nicht mehr.
Da delegierst du die Verantwortlichkeit lieber an eine dedizierte Klasse.


Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

- https://peterbucher.ch/ - Meine persönliche Seite
- https://fpvspots.net/ - Spots für FPV Dronenflüge
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

beantworten | zitieren | melden

Danke Peter Bucher, dann lag ich mit dem Ansatz in den 2 Fällen ja so falsch garnicht. :)

Das dies sogar in einem Design Pattern verwendet wird, hätte ich nicht gedacht. Aber man lernt nie aus.

Dann werde ich den Ansatz so also für kleine Sachen wahrscheinlich beibehalten. Bei großen Sachen setze ich natürlich weiter darauf, das die Businessschicht für die Befüllung der Objekte mit den vom DAL zurück gelieferten Daten übernimmt.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

Doch du lagst falsch.
Bei ActiveRecord benutzt das Objekt den DAL/ORMapper zum laden/Speichern, nicht das Model.
Das ist der komplett falsche Weg.
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

beantworten | zitieren | melden

Naja eventuell ist auch nur die Bezeichnung "Model" in Bezug auf die Schicht aus der sich das Objekt seine Daten holt schlecht gewählt. Das wäre eigentlich nur eine Klasse im DAL.

Das nur, damit wir jetzt nicht anneinander vorbei reden. :-)
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo inflames2k,

Wikipedia sagt:
Zitat von Drei-Schichten-Architektur
  • Präsentationsschicht (client tier) – Diese, auch Front-End bezeichnet, ist für die Repräsentation der Daten, Benutzereingaben und die Benutzerschnittstelle verantwortlich.
  • Logikschicht (application-server tier, Businessschicht, Middle Tier oder Enterprise Tier) – Sie beinhaltet alle Verarbeitungsmechanismen. Hier ist die Anwendungslogik vereint.
  • Datenhaltungsschicht (data-server tier, back end) – Sie enthält die Datenbank und ist verantwortlich für das Speichern und Laden von Daten.

Das Wort "Modell", so wie ich es kenne und wie es hier im Forum verwendet wird, bezieht sich dabei ausschließlich auf die mittlere Schicht.

herbivore
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,

ich sagte ja das ich die Bezeichnung für das Beispiel eher schlecht gewählt habe, seis auch, weil ichs mir so falsch angewöhnt habe.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers