Używamy ASP.NET MVC 2 z warstwą kontrolera / widoku i modelem prezentacji złożonym z warstwy logiki biznesowej, warstwy dostępu do danych [Procedury składowane i klasy / metody komunikowania się z procedurami przechowywanymi].
Wydaje się, że w warstwie biznesowej i wyższych dla większości celów edycja może reprezentować zarówno tworzenie obiektu, jak i edycję obiektu. Jest to dobrze zbieżne z naszym Wzorem Projektu Repozytorium, który definiuje metodę „Zapisz”. Możemy po prostu sprawdzić w procedurze przechowywanej, czy identyfikator ma wartość 0, a następnie utworzyć nowy obiekt, jeśli ma wartość 0, w przeciwnym razie możemy po prostu zaktualizować istniejący obiekt, ponieważ identyfikator kategorii powinien być zgodny z jednym.
Podstawowym punktem dyskusji jest to, czy najbardziej sensowne jest podzielenie Edycji zawierającej Kreację na oddzielne części Utwórz i Edytuj poza warstwą DAL.
Oczywisty przykład można przedstawić jako trasy:
Utwórz - http: // someurl / somearea / edit / 0
Edycja - http: // someurl / somearea / edit / 254
vs.
Utwórz - http: // someurl / somearea / create
Edycja - http: // someurl / somearea / edit / 254
Czy istnieją jakieś ustalone standardy lub najlepsze praktyki w tym zakresie?
Wiem, że to mały szczegół, ale myślę, że jest to logistycznie ważne.
źródło
Odpowiedzi:
Zdecydowanie powiedziałbym, że warto oddzielić Tworzenie / Edycja, gdyby nie przestrzeganie zasady pojedynczej odpowiedzialności .
Można powiedzieć, że poprawne działanie w adresie URL jest lepsze.
Nieoddzielenie tych dwóch sprawiłoby również, że kod byłby trudniejszy do testowania jednostkowego.
Nowy programista czytający kod prawdopodobnie nie uznałby kodu za bardzo intuicyjny w tworzeniu obiektów metodą „edycji”, po prostu nie ma to sensu semantycznego. Mogę jednak sympatyzować z metodą Save () w DAL.
Myśląc o tym, naprawdę nie widzę korzyści płynących z umieszczenia tego wszystkiego w metodzie edycji.
źródło
Zwykle wolę utworzyć jedną
Save
metodę w DAL, ale faktycznie implementujęCreate
/Edit
/Delete
osobno.Na przykład moja
Save
metoda sprawdza stan obiektu i wywołuje metodę Create / Edit / Delete w zależności od potrzebPozwala mi to po prostu wywołać jedną ogólną metodę zapisywania dowolnego obiektu, ale nadal zachowuje osobną implementację każdej (Utwórz, Edytuj, Usuń).
źródło
State
właściwość. Na przykład kliknięcieDelete
przycisku oznaczałoby obiekt jako usunięty, a następnie zadzwoniłSaveChanges()