DDD-Lite เป็นภาษารูปแบบสำหรับการฉีดแบบพึ่งพาหรือไม่


17

ฉันสะดุดกับคำพูดของเกร็กยัง7 เหตุผลที่โครงการ DDD ล้มเหลวซึ่งเขาพูดถึงบางสิ่งที่เขาเรียกว่า DDD-Lite เวลา 7:20

โดยสรุปเขากล่าวโดยทั่วไปว่าบางคนใช้ DDD เป็นภาษารูปแบบ (เอนทิตี, ที่เก็บ, อ็อบเจ็กต์ค่า, การบริการและอื่น ๆ ) โดยไม่ต้องทำสิ่งอื่นใดที่เกี่ยวข้องกับ DDD เขาอ้างถึงโดเมนแบบจำลอง 60% ขึ้นไปใน. Net คือ DDD-Lite เขาคิดว่า DDD-Lite นั้นกำลังสร้างภาษาเกี่ยวกับการฉีดพึ่งพาซึ่งเป็นสิ่งที่คุณไม่จำเป็นต้องทำ เขาบอกว่าทำ DDD ทั้งหมดหรือทำสิ่งที่ง่ายกว่า ไม่อย่างนั้นเขาก็อ้างว่าคน ๆ หนึ่งกำลังนำผลงานทั้งหมดนี้มาสร้างนามธรรมที่ดี แต่ไม่มีผลประโยชน์ที่แท้จริง

ฉันต้องยอมรับว่าฉันไม่รู้จัก DDD มากเท่าที่ฉันต้องการและยังไม่ได้ลองใช้ ฉันยังไม่ได้อ่านหนังสือของ Eric Evan เช่นกัน ฉันกำลังมากขึ้นที่สนใจในการพึ่งพาการฉีดและหลายหนังสือหลายเล่มและบล็อกในแง่นี้การใช้งานภายใต้แนวความคิดและการอ้างอิงจากเอริคอีแวนส์หนังสือ DDD นี่คือที่ฉันได้สัมผัสกับแนวคิด DDD หนังสือที่ฉันอ่านมาเล่มนี้ประกอบด้วย:

  • การพึ่งพาการฉีดใน. NET
  • Microsoft .Net: แอปพลิเคชั่นด้านสถาปัตยกรรมสำหรับองค์กร
  • การพัฒนาแอพพลิเคชั่น Brownfield ใน. NET

ถ้าใครอยากจะทำ Dependency Injection ทางเลือกที่ง่ายกว่าการทำ "DDD-Lite" คืออะไร? ดูเหมือนว่าฉันจะสร้าง abstractions ที่ดีค่อนข้างมีประโยชน์ไม่ว่าใครจะใช้แนวคิดจาก DDD ในแบบ "DDD-Lite" (ดูโพสต์บล็อกของ Mark Seemann: การเชื่อมต่อไม่ใช่ abstractionsและไปสู่ ​​abstractions ที่ดีกว่า ) ฉันมีเวลายากที่จะเชื่อว่าทุกคนที่ทำ Dependency Injection นั้นกำลังทำอยู่ (หรือต้องทำ) DDD ที่เต็มเปี่ยม ฉันเข้าใจผิดข้อโต้แย้งของ Greg Young เกี่ยวกับ DDD-Lite หรือไม่?

คำตอบ:


15

การพึ่งพาการฉีดและ DDD เป็นสองแนวคิดที่แยกจากกัน การทำ Dependency Injection ไม่จำเป็นต้องทำ DDD และ DDD นั้นไม่จำเป็นต้องใช้ Dependency Injection

โครงการ DDD จำนวนมากล้มเหลวเนื่องจากเลือกรูปแบบ แต่ไม่สนใจกระบวนการที่อยู่เบื้องหลัง DDD พวกเขาไม่ใช้เวลาในการแยกกฎเกณฑ์ทางธุรกิจ พวกเขาไม่ได้มุ่งความสนใจไปที่โมเดลโดเมน พวกเขาไม่ได้สร้างภาษาที่แพร่หลาย

ในระยะสั้น: ฉันคิดว่านั่นเป็นความเข้าใจผิด


4
+1 รูปแบบที่อธิบายไว้ในหนังสือของ Evans ยังคงมีคุณค่าในบริบทที่กว้างขึ้น - ตราบใดที่มีความเข้าใจว่าการใช้แบบแยกส่วนไม่ได้ทำให้ DDD
Mark Seemann

1
ใช่ฉันเข้าใจ DI! = DDD @ MarkSeemann ดังนั้นอาร์กิวเมนต์ของ Greg จึงดูเหมือนว่าผู้คนกำลังพูดว่าพวกเขากำลังทำ DDD เมื่อพวกเขาไม่อยู่ โอเคฉันเข้าใจแล้ว แต่เขาก็ยังให้เหตุผลว่าการใช้ abstractions เช่นที่พบใน DDD (มวลรวมที่เก็บเอนทิตี้ของโดเมนวัตถุค่าบริการ ฯลฯ ) นั้นไม่จำเป็นถ้าพวกมันถูกใช้เพื่อสนับสนุนสถาปัตยกรรมแบบพึ่งพา นั่นคือส่วนที่ฉันไม่เข้าใจ บางทีนั่นอาจเป็นอาร์กิวเมนต์ฟางแมนเนื่องจากการใช้สิ่งต่าง ๆ ไม่ใช่เพียงแค่ "สร้างภาษาเกี่ยวกับการพึ่งพาการฉีด"
Matt

3
Greg ถูกต้องเพียงบางส่วน: รูปแบบพิเศษใน DDD ไม่เกี่ยวข้องโดยเฉพาะกับ DI อย่างไรก็ตามในหนังสือของฉันฉันหยิบคำศัพท์บางคำขึ้นมาโดยเฉพาะคำจำกัดความของ Entity vs. Value Object vs. Service เนื่องจากเป็นสิ่งสำคัญที่จะต้องเข้าใจว่าจะฉีดที่ไหน อย่างไรก็ตามทั้งศัพท์และรูปแบบอื่น ๆ เช่น Repository และ Factory นั้นเก่ากว่าหนังสือ DDD มากดังนั้นการบอกว่าสิ่งเหล่านี้ไม่จำเป็นนอก DDD ฟังดูไม่ถูกต้องสำหรับฉัน มันอาจขึ้นอยู่กับวิธีที่คุณกำหนด DDD จริง ๆ
Mark Seemann

2

ฉันพนันได้ว่าเกร็กอ้างถึงแอพพลิเคชั่นที่เรียบง่ายหากเซตย่อยของรูปแบบการออกแบบที่ขับเคลื่อนด้วยโดเมนแทนที่จะเป็นวิธีการ DDD ทั้งหมด คำ DDD-Lite โดยนัยหมายถึงหนังสือhttp://www.infoq.com/minibooks/domain-driven-design-quicklyซึ่งเคยเป็นที่นิยมในหมู่มือใหม่ของ DDD แต่คิดถึงภาพรวมทั้งหมดโดยเน้นเฉพาะที่ รูปแบบการออกแบบการสร้างแบบจำลองท้องถิ่น

แม้ว่าการพึ่งพาการฉีดนั้นถือว่าเป็นสิ่งที่ดี แต่ก็ไม่มีความสัมพันธ์ที่แข็งแกร่งระหว่าง DDD และ DI

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