Frage

Das ist vielleicht etwas „Diskussionsthema“, aber ich würde wirklich gerne Ihre Meinung dazu hören.

Zuvor habe ich oft Datenzugriffsklassen geschrieben, die sowohl Lesen als auch Schreiben abwickelten, was oft zu einer schlechten Benennung führte, wie FooIoHandler usw.Die Faustregel, dass Klassen, die schwer zu benennen sind, wahrscheinlich schlecht gestaltet sind, legt nahe, dass dies keine gute Lösung ist.

Deshalb habe ich vor kurzem damit begonnen, den Datenzugriff in FooWriter und FooReader aufzuteilen, was zu schöneren Namen führt und etwas mehr Flexibilität bietet, aber gleichzeitig möchte ich es irgendwie zusammenhalten, wenn die Klassen nicht zu groß sind.

Ist eine Lese-/Schreiber-Trennung ein besseres Design oder sollte ich beides kombinieren?Wenn ich sie kombinieren sollte, wie zum Teufel soll ich die Klasse nennen?

Danke /Erik

War es hilfreich?

Lösung

ORM könnte Ihre beste Lösung sein.
Oder verwenden Sie ein Repository-Typmuster mit einem „thingContext“-Objekt, das für die Zustandspersistenz verantwortlich ist.

Persönlich verwende ich das ActiveRecord-Muster, bei dem die Speicherlogik in eine Basisklasse integriert ist, aber ich belasse es zugunsten eines Repository-Musters im nHibernate-Stil.Die Möglichkeit für DDD und das Testen von Dingen ohne Datenbank ist in einer Framework-Situation, in der meine Geschäftslogik jetzt für eine neue Benutzeroberfläche an Bedeutung gewinnt, sehr praktisch.

Andere Tipps

Ich verwende jetzt Linq to Sql.Dies löst das Problem vollständig.

Wenn Sie jedoch nicht über diese Option (oder ein ähnliches ORM-Tool) verfügen, sehe ich keinen Grund, die Lese-/Schreibmethoden zu trennen.Es werden lediglich weitere Klassen hinzugefügt und der Datenzugriff erschwert.Ich habe es immer so gestaltet:

  1. Komponente/Geschäftsobjekt:Auto
  2. Datenzugriff, der statische Lese- und Schreibmethoden enthält:CarDB

Beispielverwendung:

Car car = new Car();
car.Manufacturer = "Toyota"
car.Model = "Camry"
car.Year = 2006;
car.CarID = CarDB.InsertCar(car)
car.OwnerID = 2;
CarDB.UpdateCar(car);

Dies ist auch für den Datenzugriff sinnvoll, bei dem sowohl Lese- als auch Schreibvorgänge als Teil derselben Transaktion durchgeführt werden müssen.Wenn Sie die Klassen aufteilen würden, wohin würde das gehen?

Ich ignoriere ORM (nicht weil ich entweder dafür oder dagegen bin) und würde sie in derselben Klasse belassen.Sie sind beide Facetten einer einzigen Verantwortung, und wenn man sie trennt, sieht man einfach an zwei Stellen, an denen mir eigentlich kein guter Grund einfällt, warum man das tun sollte.

Etwas, das einen Back-End-Speicher liest und schreibt, könnte als Datenzugriffseinrichtung, ReaderWriter, IO oder Store bezeichnet werden.

Wie wäre es also mit einem von:

  • FooDataAccessor
  • FooAccessor
  • FooReaderWriter
  • FooRW
  • FooIO
  • FooStore
  • FooStorage

Wenn ich die Wahl habe, unterteile ich im Allgemeinen den Leser, um den Autor zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top