Mehrere Modelle vs. einzelnes Modell

8

Ich habe eine Frage zu MVC. Besonders über Modelle. Angenommen, ich habe eine Kategorietabelle in meiner Datenbank. Jetzt möchte ich Ergebnisse sowohl für eine einzelne Kategorie für Detailansicht als auch mehrere Kategorien für eine Auflistung erhalten. Außerdem muss ich möglicherweise eine Reihe von Kategorien für verschiedene Zwecke abfragen.

Jetzt ist die Frage; Macht es mehr Sinn, zwei getrennte Modelle zu haben? Wie das Kategoriemodell für Operationen an einer einzelnen Kategorie und Kategorien modelliert es Operationen für mehrere Kategorien.

Ich denke, wenn ich category model verwende, brauche ich keine zusätzlichen Details für mehrere Kategorien. Also macht es Sinn für mich, diese zu trennen. Aber ich bin mir nicht sicher.

Irgendwelche Ideen?

    
Sinan 20.01.2012, 22:27
quelle

6 Antworten

2

Es kommt darauf an, müssen Sie verschiedene Daten für eine einzelne Kategorie und für mehrere Kategorien speichern?

Wenn ja , ist Ihr Vorschlag sinnvoll, da Sie ansonsten redundante Felder in Ihrem Modell hätten. Ich würde empfehlen, eine klare Unterscheidung zwischen beiden Modellen zu treffen (also nicht Category und Categories , sondern zB SingleCategory und MultipleCategories ).

Wenn nicht , würde ich vorschlagen, ein Modell für eine Kategorie zu haben, wobei jedoch verschiedene Operationen für Operationen mit einer oder mehreren Kategorien definiert sind. Ich nehme an, das ist deine Situation.

Im letzteren Fall können Sie eine abstrakte Superklasse Category verwenden und dann zwei untergeordnete Elemente definieren: eines, das Operationen für einzelne Kategorien enthält, und eines, das Operationen für mehrere Kategorien enthält.

    
thomaux 23.01.2012, 12:52
quelle
5

Die Sache ist, dass Ihr Modell die Behandlung einzelner und mehrerer Datensatzabfragen unterstützen sollte.

Ich rate Ihnen daher, ein Modell zu verwenden und Ihre Methoden zu entwickeln, um genau die Daten zu erhalten, die Sie benötigen.

Wenn Sie zwei Modelle für eine einzelne Datenquelle haben, wird das Ganze nur komplizierter ...

    
Lucian Vasile 20.01.2012 22:31
quelle
1

Ich kann keinen Grund sehen, mehrere Modelle für dieselbe Datensammlung zu verwenden.

In MVC stellt das Modell die Sammlung von Daten dar - es kann sich um einzelne oder mehrere Elemente handeln. Wenn das spezifische Modell nur ein einzelnes Element darstellt, ist es immer noch der Teil der Datensammlung.

Warum fragen Sie sich, zwei separate Modelle zu verwenden?

    
Andrzej Ośmiałowski 24.01.2012 11:45
quelle
1

Was wir in unserer eigenen MVC und ORM getan haben, ist, dass wir einen Wrapper für Operationen an mehreren Modellinstanzen erstellt haben. Was ist ein ResultSet? Das Resultset kann dann beispielsweise ein Array von Category-Modellen bearbeiten.

Als Referenz: Ссылка

    
Beanow 29.01.2012 13:22
quelle
0

Es kommt nur auf DICH an!

Du bist der Programmierer, was immer dir passt ist was geht.

Um meine Argumentation hinzuzufügen:

Eine einzelne Modellklasse wäre besser in Bezug auf Lesbarkeit und Wartbarkeit!

z.B.

%Vor%

Dies wäre für einen anderen Programmierer, der den Code liest, sehr einfach zu verstehen

z.B.

%Vor%

Hoffe, das hilft!

Denken Sie daran, es gibt keine richtige oder falsche Lösung, genauso lange wie es für Sie funktioniert!

    
tomaytotomato 26.01.2012 10:54
quelle
0

Meiner Meinung nach sind Listen, Arrays, Sammlungen usw., die von der von Ihnen verwendeten Sprache bereitgestellt werden, gültige Auswahlmöglichkeiten für Modellsammlungen, und Sie sollten kein zusätzliches Modell erstellen, das diese Sammlung einfach umschließt, da es wirklich nichts erreicht alle. Sie können die Sammlung in ein Modell einschließen, wenn Sie der Sammlung eine Schnittstelle zuordnen möchten.

Wenn Sie zusätzliche Informationen über die Sammlung speichern möchten, sollten Sie sie in ein anderes Modell einfügen.

Ich stimme auch nicht mit der Idee überein, dass Sie nicht mehrere Modelle haben sollten, weil die Daten von derselben Datenquelle stammen. Tatsächlich glaube ich, dass Sie Ihre Datenbanklogik nicht in das Modell selbst einfügen sollten, sondern einen separaten Dienst verwenden, der Geschäftsobjekte zurückgibt. Mit dieser Einkapselungsstufe können Sie die High-Level-Modelle (oder Business-Objekte) auf Anwendungsebene manipulieren, während Sie die Datenzugriffslogik von diesen Objekten entkoppeln. Wenn Sie dann die Datenbank mit etwas anderem austauschen müssen, müssen Sie nur die Datenzugriffslogik und die Schnittstelle, die die Modelle erstellt, ersetzen.

    
Matt Esch 27.01.2012 13:57
quelle