แนวคิด DTO และ DAO และ MVC [ปิด]


133

1) เหตุใดเราจึงใช้DTOและDAOและเมื่อใดที่เราควรใช้ ฉันกำลังพัฒนาGUIซอฟต์แวร์ Java เพื่อทำเกี่ยวกับการแทรกแก้ไขลบข้อมูล แต่ผมกำลังดิ้นรนที่จะแยกแยะระหว่างDTO/DAOและModel, View, Controller(MVC) โครงสร้าง? พวกเขามีความคล้ายกันซึ่งจะดีกว่าที่จะใช้เมื่อมีปฏิสัมพันธ์กับฐานข้อมูลผ่าน GUIJava

2) สิ่งหนึ่งที่ฉันอยากรู้มากคือการมีแบบฝึกหัดที่ดีviewหรือไม่Controllerในชั้นเรียนเดียว หากเราคิดถึงNetbeansคุณสามารถสร้างGUIFrame Class และเพิ่มส่วนประกอบต่างๆเช่นJButtonลงในเฟรมได้โดยการดับเบิลคลิกที่ปุ่มจะนำคุณไปยังactionListenermethod (Controller) ซึ่งดูเหมือนว่าจะอยู่ในเฟรมข้อมูลที่จะแสดงต่อผู้ใช้ (View) . พวกเขาอยู่ในคลาสเดียวกัน นั่นขัดกับแนวคิดนี้อย่างสิ้นเชิงหรือไม่?

นี่คือสิ่งที่ฉันกำลังพูดถึง

การปฏิบัติที่ไม่ดีในการมีมุมมองและควบคุมในชั้นเรียนเดียว?


@RomanC มีตารางฐานข้อมูลที่เก็บเหตุการณ์ (eventId, name, date.etc) ดังนั้น DTO และ MVC เหมือนหรือต่างกัน?
Hoody

ที่ฐานข้อมูลคุณไม่มี DTO แต่เป็นวัตถุฐานข้อมูล
Roman C

@RomanC ในคลาส Java ขออภัยใช้โครงสร้าง DTO / DAO หรือควรใช้ MVC? อะไรคือความแตกต่าง
Hoody

อ่านนี้และที่ตรวจสอบความแตกต่าง
โรมัน C

คุณอ่านเกี่ยวกับฐานข้อมูลใน def ที่สองหรือไม่?
Roman C

คำตอบ:


269

DTOเป็นคำย่อของData Transfer Objectดังนั้นจึงใช้เพื่อถ่ายโอนข้อมูลระหว่างคลาสและโมดูลของแอปพลิเคชันของคุณ

  • DTO ควรมีเฉพาะฟิลด์ส่วนตัวสำหรับข้อมูลตัวรับตัวตั้งค่าและตัวสร้างของคุณ
  • DTO ไม่แนะนำให้เพิ่มเมธอดตรรกะทางธุรกิจลงในคลาสดังกล่าว แต่สามารถเพิ่มวิธีการใช้ประโยชน์บางอย่างได้

DAOเป็นคำย่อของData Access Objectดังนั้นจึงควรสรุปตรรกะสำหรับการดึงบันทึกและอัปเดตข้อมูลในที่จัดเก็บข้อมูลของคุณ (ฐานข้อมูลระบบไฟล์หรืออะไรก็ได้)

นี่คือตัวอย่างของอินเตอร์เฟส DAO และ DTO จะมีลักษณะอย่างไร:

interface PersonDTO {
    String getName();
    void setName(String name);
    //.....
}

interface PersonDAO {
    PersonDTO findById(long id);
    void save(PersonDTO person);
    //.....
}

MVCเป็นรูปแบบที่กว้างขึ้น DTO / DAO จะเป็นโมเดลของคุณในรูปแบบ MVC
จะบอกวิธีจัดระเบียบแอปพลิเคชันทั้งหมดไม่ใช่เฉพาะส่วนที่รับผิดชอบในการดึงข้อมูล

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


2
ฉันอาจเข้าใจคำถามผิด
Petr

4
ฉันไม่แน่ใจว่าคุณหมายถึง "ตัวควบคุมแยกต่างหาก" จากการอ่านของฉันคอนโทรลเลอร์ใน MVC ควรมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้และตรรกะทางธุรกิจของคุณควรถูกห่อหุ้มไว้ในโมเดลของคุณ
Paul Carlton

4
การใช้โมเดลอ็อบเจ็กต์ของ DTO เพื่อเชื่อมต่อเป็นแนวทางปฏิบัติที่แย่มาก โมฆะบันทึก (PersonDTO person) เป็นมะเร็งบริสุทธิ์
เบ็น

3
ทำไมเราถึงต้องการ DTO ในเมื่อเรามีคลาสออบเจ็กต์เช่น POJO ทั้งคู่ไม่เหมือนกัน?
Bhargav

3
@Bhargav DTOs ใช้เพื่อส่งคืนผลลัพธ์รวมของหลายเอนทิตี (POJOs) หรือทรัพยากรที่ จำกัด จากเอนทิตี
TheCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.