มันจะดีกว่าถ้ามีการสร้างและแก้ไขการกระทำที่แยกจากกันหรือรวมสร้างและแก้ไขเป็นหนึ่ง?


15

เรากำลังใช้ ASP.NET MVC 2 กับเลเยอร์ควบคุมและมุมมองการนำเสนอและรูปแบบซึ่งประกอบด้วยชั้นตรรกะทางธุรกิจ, ชั้นการเข้าถึงข้อมูล

ในชั้นธุรกิจขึ้นไปเพื่อวัตถุประสงค์ส่วนใหญ่การแก้ไขดูเหมือนว่าจะสามารถแสดงทั้งการสร้างวัตถุและการแก้ไขวัตถุ สิ่งนี้สอดคล้องกันกับรูปแบบการออกแบบพื้นที่เก็บข้อมูลของเราซึ่งกำหนดวิธีการ "บันทึก" เราสามารถเช็คอินกระบวนงานที่เก็บไว้ถ้า ID เป็น 0 และสร้างวัตถุใหม่ถ้าเป็น 0 มิฉะนั้นเราสามารถอัปเดตวัตถุที่มีอยู่ได้เนื่องจากรหัสหมวดหมู่ควรตรงกับหนึ่ง

ประเด็นหลักของการสนทนาคือถ้าเหมาะสมที่สุดที่จะแยกการแก้ไขซึ่งรวมถึงการสร้างเป็นส่วนต่าง ๆ ของการสร้างและแก้ไขนอกเหนือจากเลเยอร์ DAL

ตัวอย่างที่ชัดเจนสามารถแสดงเป็นเส้นทาง:

สร้าง - http: // someurl / somearea / edit / 0

แก้ไข - http: // someurl / somearea / edit / 254

เมื่อเทียบกับ

สร้าง - http: // someurl / somearea / create

แก้ไข - http: // someurl / somearea / edit / 254

มีมาตรฐานหรือแนวทางปฏิบัติที่ดีในเรื่องนี้หรือไม่?

ฉันรู้ว่านี่เป็นรายละเอียดเล็ก ๆ แต่ฉันคิดว่ามันสำคัญมาก


4
ฉันคิดว่าการดำเนินการสร้างและแก้ไขที่แยกจากกันเป็นการใช้งานที่ง่ายกว่า
อดัมเลียร์

1
วิธีการหนึ่งใน DAL สองวิธีสำหรับ API หากเหมาะสม
CaffGeek

จากมุมมองของฉันแยกจากกันสร้างและแก้ไขอย่างเป็นธรรมชาติเป็น mvc และการใช้วิธีการนั้นให้ประโยชน์มากมายจากการใช้ mvc ให้เต็มที่และนั่นควรเป็นจุดมุ่งหมายของทุกคน
maz3tt

คำตอบ:


5

แน่นอนฉันจะบอกว่ามีความคุ้มค่าในการแยกสร้าง / แก้ไขหากไม่ได้สำหรับการเชื่อฟังหลักการรับผิดชอบเดียว

หนึ่งสามารถอ้างว่ามี SEO ที่ดีกว่าในการมีการกระทำที่ถูกต้องใน URL เช่นกัน

การไม่แยกทั้งสองจะทำให้การทดสอบหน่วยยากขึ้น

โปรแกรมเมอร์คนใหม่อ่านโค้ดอาจจะไม่พบรหัสที่ใช้งานง่ายมากในการสร้างออบเจ็กต์ในวิธี "แก้ไข" แต่ก็ไม่สมเหตุสมผลเลย อย่างไรก็ตามฉันสามารถเห็นอกเห็นใจกับวิธีการบันทึก () ใน DAL

เมื่อคิดถึงเรื่องนี้ฉันไม่เห็นประโยชน์ของการวางทั้งหมดในวิธีแก้ไข


4

ฉันมักจะต้องการสร้างSaveวิธีหนึ่งใน DAL แต่จริง ๆ แล้วใช้Create/ Edit/ Deleteแยกต่างหาก

ตัวอย่างเช่นSaveวิธีการของฉันจะตรวจสอบสถานะวัตถุและเรียกใช้วิธีการสร้าง / แก้ไข / ลบขึ้นอยู่กับสิ่งที่จำเป็น

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

สิ่งนี้ทำให้ฉันสามารถเรียกวิธีการทั่วไปหนึ่งวิธีสำหรับการบันทึกวัตถุใด ๆ แต่ก็ยังคงดำเนินการตามแยก (สร้างแก้ไขลบ) แต่ละรายการ


คุณจะบอกได้อย่างไรว่าเป็นการลบ
NoChance

วัตถุของฉันมักจะมีStateคุณสมบัติ ตัวอย่างเช่นการคลิกDeleteปุ่มจะทำเครื่องหมายวัตถุเป็นลบแล้วเรียกSaveChanges()
ราเชล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.