ฉันได้ต่อสู้กับสิ่งนี้ด้วยตัวเอง มีหลายกรณีที่ DTO เหมาะสมที่จะใช้ในการนำเสนอ สมมติว่าฉันต้องการแสดงรายการแบบหล่นลงของ บริษัท ในระบบของฉันและฉันต้องการรหัสของพวกเขาเพื่อผูกค่ากับ
แทนที่จะโหลด CompanyObject ซึ่งอาจมีการอ้างอิงถึงการสมัครสมาชิกหรือใครรู้อะไรอีกฉันสามารถส่ง DTO กลับพร้อมชื่อและรหัสได้ นี่เป็นการใช้ IMHO ที่ดี
ตอนนี้ใช้ตัวอย่างอื่น ฉันมีออบเจ็กต์ที่แสดงถึงการประมาณการค่าประมาณนี้อาจประกอบขึ้นด้วยแรงงานอุปกรณ์และอื่น ๆ ซึ่งอาจมีการคำนวณจำนวนมากที่กำหนดโดยผู้ใช้ซึ่งนำรายการเหล่านี้ทั้งหมดมาสรุป (ค่าประมาณแต่ละรายการอาจแตกต่างกันไปตามประเภทต่างๆ ของการคำนวณ) เหตุใดฉันจึงต้องสร้างแบบจำลองวัตถุนี้สองครั้ง เหตุใดฉันจึงไม่สามารถระบุ UI ของฉันในการคำนวณและแสดงได้
โดยทั่วไปฉันไม่ได้ใช้ DTO เพื่อแยกเลเยอร์โดเมนของฉันออกจาก UI ของฉัน ฉันใช้มันเพื่อแยกเลเยอร์โดเมนของฉันจากขอบเขตที่อยู่นอกเหนือการควบคุมของฉัน แนวคิดที่ว่าใครบางคนจะใส่ข้อมูลการนำทางในวัตถุทางธุรกิจของตนนั้นไร้สาระอย่าปนเปื้อนวัตถุทางธุรกิจของคุณ
ความคิดที่ว่าใครบางคนจะใส่การตรวจสอบความถูกต้องในวัตถุทางธุรกิจของตน? ฉันบอกว่านี่เป็นสิ่งที่ดี UI ของคุณไม่ควรมีความรับผิดชอบ แต่เพียงผู้เดียวในการตรวจสอบวัตถุทางธุรกิจของคุณ ชั้นธุรกิจของคุณต้องทำการตรวจสอบความถูกของตนเอง
เหตุใดคุณจึงใส่รหัสการสร้าง UI ในออบเจ็กต์ busienss ในกรณีของฉันฉันได้แยกวัตถุที่สร้างรหัส UI แยกจาก UI ฉันมีวัตถุที่ทำให้วัตถุทางธุรกิจของฉันกลายเป็น Xml ความคิดที่ว่าคุณต้องแยกเลเยอร์ของคุณเพื่อป้องกันการปนเปื้อนประเภทนี้เป็นเรื่องแปลกสำหรับฉันเพราะทำไมคุณถึงใส่รหัสการสร้าง HTML ในวัตถุทางธุรกิจ ...
แก้ไข
เมื่อฉันคิดอีกเล็กน้อยมีหลายกรณีที่ข้อมูล UI อาจอยู่ในเลเยอร์โดเมน และสิ่งนี้อาจบดบังสิ่งที่คุณเรียกว่าเลเยอร์โดเมน แต่ฉันทำงานกับแอปพลิเคชันหลายผู้เช่าซึ่งมีพฤติกรรมที่แตกต่างกันมากทั้งรูปลักษณ์และความรู้สึกของ UI และขั้นตอนการทำงาน ขึ้นอยู่กับปัจจัยต่างๆ ในกรณีนี้เรามีโมเดลโดเมนที่แสดงถึงผู้เช่าและการกำหนดค่าของพวกเขา การกำหนดค่าของพวกเขาเกิดขึ้นเพื่อรวมข้อมูล UI (เช่นป้ายกำกับสำหรับช่องทั่วไป)
ถ้าฉันต้องออกแบบวัตถุเพื่อให้คงอยู่ได้ฉันควรจะต้องทำซ้ำวัตถุด้วยหรือไม่? โปรดทราบว่าหากคุณต้องการเพิ่มฟิลด์ใหม่ในขณะนี้คุณมีสองที่ที่จะเพิ่มเข้าไป บางทีอาจทำให้เกิดคำถามอื่นหากคุณใช้ DDD เอนทิตีโดเมนอ็อบเจ็กต์ทั้งหมดหรือไม่ ฉันรู้ในตัวอย่างของฉันว่าพวกเขาเป็น