Là tốt hơn để có các hành động Tạo và Chỉnh sửa riêng biệt hoặc kết hợp Tạo và Chỉnh sửa thành một?


15

Chúng tôi đang sử dụng ASP.NET MVC 2 với Lớp và Mô hình trình bày Trình điều khiển / Xem bao gồm Lớp logic nghiệp vụ, Lớp truy cập dữ liệu [Các thủ tục lưu trữ và các lớp / phương thức để nói chuyện với các thủ tục được lưu trữ].

Trong lớp nghiệp vụ trở lên cho hầu hết các mục đích Chỉnh sửa dường như có khả năng đại diện cho cả việc tạo ra một đối tượng và chỉnh sửa một đối tượng. Điều này hoàn toàn trùng khớp với Mẫu thiết kế kho lưu trữ của chúng tôi xác định phương thức "Lưu". Chúng ta chỉ cần kiểm tra thủ tục được lưu trữ nếu ID bằng 0 và sau đó tạo một đối tượng mới nếu nó bằng 0 nếu không chúng ta chỉ có thể cập nhật đối tượng hiện có, vì id danh mục phải khớp với một.

Điểm chính của cuộc thảo luận là nếu nó có ý nghĩa nhất để phân chia Chỉnh sửa bao gồm Tạo thành các phần riêng biệt của Tạo và Chỉnh sửa ngoài lớp DAL.

Một ví dụ rõ ràng có thể được hiển thị dưới dạng các tuyến đường:

Tạo - http: // someurl / somearea / chỉnh sửa / 0

Chỉnh sửa - http: // someurl / somearea / chỉnh sửa / 254

so với

Tạo - http: // someurl / somearea / tạo

Chỉnh sửa - http: // someurl / somearea / chỉnh sửa / 254

Có bất kỳ tiêu chuẩn được thiết lập hoặc thực hành tốt nhất liên quan đến điều này?

Tôi biết đây là một chi tiết nhỏ, nhưng tôi nghĩ nó là một điều quan trọng.


4
Cá nhân tôi nghĩ rằng các hành động Tạo và Chỉnh sửa riêng biệt là một triển khai sạch hơn (và có thể dễ bảo trì hơn).
Adam Lear

1
Một phương thức trong DAL, hai cho API nếu nó có ý nghĩa.
CaffGeek

Theo quan điểm của tôi, việc tạo và chỉnh sửa riêng biệt đến với mvc một cách tự nhiên và đi theo cách tiếp cận đó mang lại nhiều lợi thế cho việc sử dụng mvc đến mức tối đa và đó là mục tiêu của mọi người.
maz3tt

Câu trả lời:


5

Tôi chắc chắn sẽ nói rằng có giá trị trong việc tách Tạo / Chỉnh sửa, nếu không tuân theo nguyên tắc trách nhiệm duy nhất .

Người ta có thể tuyên bố rằng có SEO tốt hơn trong việc có hành động chính xác trong url.

Không tách hai cũng sẽ làm cho mã khó hơn để kiểm tra đơn vị.

Một lập trình viên mới đọc mã có thể sẽ không tìm thấy mã rất trực quan khi phải tạo các đối tượng theo phương thức "chỉnh sửa", nó chỉ không có ý nghĩa về mặt ngữ nghĩa. Tuy nhiên tôi có thể thông cảm với phương thức Save () trong DAL.

Nghĩ về nó, tôi thực sự không thể thấy được lợi ích của việc đưa tất cả vào phương pháp Chỉnh sửa.


4

Tôi thường thích tạo một Savephương thức trong DAL, nhưng thực tế triển khai Create/ Edit/ Deleteriêng.

Ví dụ: Savephương thức của tôi sẽ kiểm tra Trạng thái đối tượng và gọi phương thức Tạo / Chỉnh sửa / Xóa tùy thuộc vào những gì cần thiết

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

Điều này cho phép tôi chỉ gọi một phương thức chung để lưu bất kỳ đối tượng nào, nhưng vẫn tách biệt việc thực hiện từng (Tạo, Chỉnh sửa, Xóa).


Làm thế nào bạn có thể nói nó xóa?
NoChance

Thông thường các đối tượng của tôi có một Statetài sản. Ví dụ: nhấp vào Deletenút sẽ đánh dấu đối tượng là Đã xóa, sau đó gọiSaveChanges()
Rachel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.