Ist es besser, separate Aktionen zum Erstellen und Bearbeiten zu haben oder Erstellen und Bearbeiten in einer zu kombinieren?

15

Wir verwenden ASP.NET MVC 2 mit einer Controller / View-Präsentationsebene und einem Modell, das aus einer Geschäftslogikebene, einer Datenzugriffsebene [Gespeicherte Prozeduren und Klassen / Methoden für die Kommunikation mit den gespeicherten Prozeduren] besteht.

In der Business-Schicht und darüber scheint Edit in der Lage zu sein, sowohl die Erstellung eines Objekts als auch die Bearbeitung eines Objekts darzustellen. Dies stimmt gut mit unserem Repository-Entwurfsmuster überein, das eine "Speichern" -Methode definiert. Wir können einfach in der gespeicherten Prozedur überprüfen, ob die ID 0 ist, und dann ein neues Objekt erstellen, wenn es 0 ist. Andernfalls können wir nur das vorhandene Objekt aktualisieren, da die Kategorie-ID mit einer übereinstimmen sollte.

Der primäre Diskussionspunkt ist, ob es am sinnvollsten ist, die Bearbeitung einschließlich der Erstellung in separate Teile von Erstellen und Bearbeiten außerhalb der DAL-Ebene aufzuteilen.

Ein offensichtliches Beispiel kann als Routen gezeigt werden:

Erstellen Sie - http: // someurl / somearea / edit / 0

Bearbeiten - http: // someurl / somearea / edit / 254

gegen

Erstellen - http: // someurl / somearea / create

Bearbeiten - http: // someurl / somearea / edit / 254

Gibt es diesbezüglich etablierte Standards oder Best Practices?

Ich weiß, dass dies ein kleines Detail ist, aber ich denke, dass es logistisch ein wichtiges ist.

Joshua Enfield
quelle
4
Ich persönlich halte die getrennte Erstellung und Bearbeitung von Aktionen für eine sauberere (und möglicherweise leichter zu wartende) Implementierung.
Adam Lear
1
Eine Methode in der DAL, zwei für die API, wenn es Sinn macht.
CaffGeek
Nun, aus meiner Sicht ist das separate Erstellen und Bearbeiten für mvc eine Selbstverständlichkeit. Wenn Sie diesen Ansatz wählen, können Sie die mvc optimal nutzen, und das sollte jedem ein Anliegen sein.
Maz3tt

Antworten:

5

Ich würde definitiv sagen, dass es sich lohnt, Create / Edit zu trennen, wenn man nicht dem Prinzip der Einzelverantwortung folgt .

Man könnte behaupten, dass es eine bessere Suchmaschinenoptimierung gibt, wenn man auch die richtige Aktion in der URL hat.

Wenn die beiden nicht getrennt werden, ist der Code auch schwerer zu testen.

Ein neuer Programmierer, der den Code liest, würde den Code wahrscheinlich nicht sehr intuitiv finden, wenn er Objekte in einer "Editier" -Methode erstellen müsste. Das ist semantisch einfach nicht sinnvoll. Ich kann jedoch mit der Save () - Methode in der DAL sympathisieren.

Wenn ich darüber nachdenke, kann ich die Vorteile einer Edit-Methode nicht wirklich erkennen.

nillls
quelle
4

Ich ziehe es in der Regel erstellen SaveMethode in der DAL, aber tatsächlich implementieren die Create/ Edit/ Deletegetrennt.

Zum Beispiel Savewürde meine Methode den Objektstatus überprüfen und die Create / Edit / Delete-Methode aufrufen, je nachdem, was benötigt wird

switch(obj.State)
{
    case ObjectState.New:
        CreateObject(obj);
        break;
    case ObjectState.Modified:
        UpdateObject(obj);
        break;
    case ObjectState.Deleted:
        DeleteObject(obj);
        break;
}

Auf diese Weise kann ich nur eine allgemeine Methode zum Speichern eines Objekts aufrufen, die Implementierung der einzelnen Methoden (Erstellen, Bearbeiten, Löschen) bleibt jedoch getrennt.

Rachel
quelle
Wie kannst du ihm eine Löschung erklären?
NoChance
Normalerweise haben meine Objekte eine StateEigenschaft. Wenn Sie zum Beispiel auf die DeleteSchaltfläche klicken, wird das Objekt als Gelöscht markiert. Rufen Sie dannSaveChanges()
Rachel