คำถามติดแท็ก domain-driven-design

การออกแบบที่ขับเคลื่อนด้วยโดเมน (DDD) เป็นวิธีการพัฒนาซอฟต์แวร์สำหรับความต้องการที่ซับซ้อนโดยการเชื่อมต่อการใช้งานกับรูปแบบการพัฒนา

2
คำสั่ง CQRS ควรจะตรวจสอบและแปลงเป็นวัตถุโดเมนอย่างไร?
ฉันได้ปรับCQRS 1ของคนยากจนมาระยะหนึ่งแล้วเพราะฉันชอบความยืดหยุ่นในการมีข้อมูลละเอียดในแหล่งข้อมูลเดียวให้ความเป็นไปได้ที่ยอดเยี่ยมสำหรับการวิเคราะห์และเป็นการเพิ่มมูลค่าทางธุรกิจและเมื่อต้องการอีกอันสำหรับอ่านที่มีข้อมูล . แต่น่าเสียดายมากตั้งแต่ต้นฉันได้รับการดิ้นรนกับปัญหาที่ฉันควรวางตรรกะทางธุรกิจในสถาปัตยกรรมประเภทนี้ จากสิ่งที่ฉันเข้าใจคำสั่งหมายถึงการสื่อสารเจตนาและไม่มีความผูกพันกับโดเมนด้วยตัวเอง โดยทั่วไปจะเป็นข้อมูล (เป็นใบ้ - หากคุณต้องการ) ถ่ายโอนวัตถุ นี่คือการทำให้คำสั่งถ่ายโอนระหว่างเทคโนโลยีที่แตกต่างได้อย่างง่ายดาย เช่นเดียวกับเหตุการณ์ที่เป็นการตอบสนองต่อเหตุการณ์ที่เสร็จสมบูรณ์แล้ว ในแอปพลิเคชัน DDD ทั่วไปตรรกะทางธุรกิจจะอยู่ภายในเอนทิตีวัตถุค่ารูตรวมโดยรวมพวกเขามีทั้งข้อมูลและพฤติกรรม แต่คำสั่งไม่ใช่วัตถุโดเมนดังนั้นจึงไม่ควร จำกัด เฉพาะการแสดงข้อมูลโดเมนเพราะนั่นทำให้เครียดมากเกินไป ดังนั้นคำถามที่แท้จริงคือตรรกะตรงไหน? ฉันพบว่าฉันมักจะเผชิญกับการต่อสู้ครั้งนี้บ่อยที่สุดเมื่อพยายามสร้างการรวมที่ค่อนข้างซับซ้อนซึ่งกำหนดกฎบางอย่างเกี่ยวกับการรวมกันของค่านิยม นอกจากนี้เมื่อสร้างแบบจำลองวัตถุโดเมนฉันชอบที่จะทำตามกระบวนทัศน์ที่ล้มเหลวอย่างรวดเร็วรู้ว่าเมื่อวัตถุมาถึงวิธีการที่มันอยู่ในสถานะที่ถูกต้อง สมมติว่าการรวมCarใช้สององค์ประกอบ: Transmission, Engine. วัตถุทั้งสองTransmissionและEngineค่าจะแสดงเป็นประเภทซุปเปอร์และมีตามประเภทย่อยAutomaticและManualการส่งสัญญาณหรือPetrolและElectricเครื่องยนต์ตามลำดับ ในโดเมนนี้การใช้ชีวิตที่สร้างขึ้นอย่างประสบความสำเร็จTransmissionไม่ว่าจะเป็นAutomaticหรือManualหรือประเภทใดประเภทหนึ่งEngineก็ใช้ได้ดี แต่การCarรวมรวมจะมีกฎใหม่สองสามข้อใช้งานได้เฉพาะเมื่อTransmissionและEngineวัตถุถูกใช้ในบริบทเดียวกัน กล่าวคือ: เมื่อรถใช้เครื่องยนต์ชนิดส่งได้รับอนุญาตเพียงอย่างเดียวคือElectricAutomatic เมื่อรถใช้เครื่องยนต์มันอาจจะมีประเภทของการอย่างใดอย่างหนึ่งPetrolTransmission ฉันสามารถตรวจจับการละเมิดการรวมกันของส่วนประกอบนี้ในระดับของการสร้างคำสั่ง แต่ตามที่ฉันได้ระบุไว้ก่อนหน้านี้จากสิ่งที่ฉันเข้าใจว่าไม่ควรทำเพราะคำสั่งนั้นจะมีตรรกะทางธุรกิจซึ่งควร จำกัด ชั้นโดเมน หนึ่งในตัวเลือกคือการย้ายการตรวจสอบความถูกต้องทางตรรกะทางธุรกิจไปยังตัวตรวจสอบคำสั่งด้วยตนเอง แต่ดูเหมือนจะไม่ถูกต้องเช่นกัน มันรู้สึกเหมือนว่าฉันจะแยกแยะคำสั่งตรวจสอบคุณสมบัติที่เรียกคืนโดยใช้ getters และเปรียบเทียบมันภายใน validator และตรวจสอบผลลัพธ์ เสียงกรีดร้องดังกล่าวเป็นการละเมิดกฎหมายของ Demeterสำหรับฉัน ยกเลิกตัวเลือกการตรวจสอบความถูกต้องที่กล่าวถึงเพราะดูเหมือนว่าจะไม่สามารถใช้งานได้ดูเหมือนว่ามีใครควรใช้คำสั่งและสร้างการรวมจากมัน แต่ตรรกะนี้ควรอยู่ที่ไหน ควรอยู่ในตัวจัดการคำสั่งที่รับผิดชอบการจัดการคำสั่งที่เป็นรูปธรรมหรือไม่? หรือควรอยู่ในเครื่องมือตรวจสอบคำสั่ง (ฉันไม่ชอบวิธีการนี้เช่นกัน) ขณะนี้ฉันกำลังใช้คำสั่งและสร้างการรวมจากคำสั่งภายในตัวจัดการคำสั่งที่รับผิดชอบ แต่เมื่อฉันทำสิ่งนี้ฉันควรจะมีเครื่องมือตรวจสอบคำสั่งมันจะไม่มีอะไรเลยเพราะCreateCarคำสั่งควรมีอยู่แล้วมันจะมีส่วนประกอบที่ฉันรู้ว่าถูกต้องในกรณีที่แยกต่างหาก …

2
การออกแบบโดเมนขับเคลื่อน - พึ่งพาภายนอกในปัญหาเอ็นติตี้
ฉันต้องการเริ่มต้น Domain-Driven-Design แต่มีปัญหาหลายอย่างที่ฉันต้องการแก้ไขก่อนเริ่มต้น :) ลองนึกภาพฉันมีกลุ่มและผู้ใช้และเมื่อผู้ใช้ต้องการเข้าร่วมกลุ่มฉันกำลังเรียกgroupsService.AddUserToGroup(group, user)วิธี ใน DDD ฉันควรทำgroup.JoinUser(user)ซึ่งดูดีทีเดียว ปัญหาจะปรากฏขึ้นหากฉันมีกฎการตรวจสอบความถูกต้องบางประการสำหรับการเพิ่มผู้ใช้หรืองานภายนอกบางอย่างจำเป็นต้องเริ่มต้นเมื่อมีการเพิ่มผู้ใช้ในกลุ่ม การมีงานเหล่านี้จะนำไปสู่เอนทิตีที่มีการอ้างอิงภายนอก ตัวอย่างอาจเป็น - ข้อ จำกัด ที่ผู้ใช้สามารถเข้าร่วมได้สูงสุด 3 กลุ่มเท่านั้น วิธีนี้จะต้องใช้การเรียก DB จากภายในกลุ่มวิธีใช้ JoinUser เพื่อตรวจสอบความถูกต้องนี้ แต่ความจริงที่ว่า Entity นั้นขึ้นอยู่กับบริการ / คลาสภายนอกบางอย่างนั้นดูไม่ดีนัก วิธีที่เหมาะสมในการจัดการกับสิ่งนี้ใน DDD คืออะไร?

5
ORMs เปิดใช้งานการสร้างแบบจำลองโดเมนที่หลากหลายหรือไม่
หลังจากใช้ Hibernate ในโครงการส่วนใหญ่ของฉันเป็นเวลาประมาณ 8 ปีฉันได้ตกลงกับ บริษัท ที่ไม่สนับสนุนการใช้งานและต้องการให้แอปพลิเคชันโต้ตอบกับ DB ผ่านขั้นตอนการจัดเก็บเท่านั้น หลังจากทำสิ่งนี้สองสามสัปดาห์ฉันก็ไม่สามารถสร้างรูปแบบโดเมนที่หลากหลายของแอปพลิเคชันที่ฉันเริ่มสร้างได้และแอปพลิเคชันก็ดูเหมือนสคริปต์ธุรกรรมที่น่ากลัว ปัญหาบางอย่างที่ฉันพบคือ: ไม่สามารถนำทางกราฟวัตถุในขณะที่ขั้นตอนการจัดเก็บเพียงแค่โหลดข้อมูลขั้นต่ำซึ่งหมายความว่าบางครั้งเรามีวัตถุที่คล้ายกันที่มีเขตข้อมูลที่แตกต่างกัน ตัวอย่างหนึ่งคือ: เรามีขั้นตอนการจัดเก็บเพื่อดึงข้อมูลทั้งหมดจากลูกค้าและอีกวิธีหนึ่งในการดึงข้อมูลบัญชีรวมทั้งสองสามช่องจากลูกค้า ตรรกะจำนวนมากจบลงในคลาสตัวช่วยดังนั้นโค้ดจึงมีโครงสร้างมากขึ้น (โดยใช้เอนทิตีที่ใช้เป็นโครงสร้าง C แบบเก่า) โค้ดนั่งร้านน่าเบื่อมากขึ้นเนื่องจากไม่มีกรอบที่แยกชุดผลลัพธ์จากกระบวนงานที่เก็บไว้และวางไว้ในเอนทิตี คำถามของฉันคือ: มีใครอยู่ในสถานการณ์ที่คล้ายกันและไม่เห็นด้วยกับวิธีการจัดเก็บ? คุณทำอะไรลงไป? มีประโยชน์จริง ๆ ของการใช้กระบวนงานที่เก็บไว้หรือไม่ นอกเหนือจากจุดที่ไร้สาระของ "ไม่มีใครสามารถออกตารางลดลง" มีวิธีการสร้างโดเมนที่หลากหลายโดยใช้ขั้นตอนการจัดเก็บหรือไม่? ฉันรู้ว่ามีความเป็นไปได้ที่จะใช้ AOP ในการฉีด DAOs / ที่เก็บข้อมูลลงในเอนทิตีเพื่อให้สามารถนำทางกราฟวัตถุ ฉันไม่ชอบตัวเลือกนี้เนื่องจากอยู่ใกล้กับวูดู ข้อสรุป ก่อนอื่นขอบคุณทุกคำตอบของคุณ บทสรุปที่ฉันได้มาคือ ORM ไม่สามารถเปิดใช้งานการสร้างโมเดล Rich Domain (ตามที่บางคนกล่าวถึง) แต่มันทำให้การทำงานง่ายขึ้น ต่อไปนี้เป็นคำอธิบายโดยละเอียดเพิ่มเติมของข้อสรุป แต่ไม่ได้อยู่บนพื้นฐานของข้อมูลที่ยาก แอปพลิเคชันส่วนใหญ่ร้องขอและส่งข้อมูลไปยังระบบอื่น ในการทำสิ่งนี้เราสร้างสิ่งที่เป็นนามธรรมในเงื่อนไขของแบบจำลอง (เช่นเหตุการณ์ทางธุรกิจ) และโมเดลของโดเมนจะส่งหรือรับเหตุการณ์ …

3
แนวคิดไม่ตรงกันระหว่าง DDD Application Services และ REST API
ฉันกำลังพยายามออกแบบแอปพลิเคชันที่มีโดเมนธุรกิจที่ซับซ้อนและข้อกำหนดเพื่อสนับสนุน REST API (ไม่ใช่ REST อย่างเคร่งครัด แต่มุ่งเน้นไปที่ทรัพยากร) ฉันมีปัญหาบางอย่างในการหาวิธีเปิดเผยโมเดลโดเมนในลักษณะที่เน้นทรัพยากร ใน DDD ลูกค้าของโมเดลโดเมนจำเป็นต้องผ่านเลเยอร์ 'Application Services' ขั้นตอนเพื่อเข้าถึงฟังก์ชันการทำงานทางธุรกิจใด ๆ ที่ใช้งานโดย Entities และ Domain Services ตัวอย่างเช่นมีแอปพลิเคชันบริการที่มีสองวิธีในการอัปเดตเอนทิตีผู้ใช้: userService.ChangeName(name); userService.ChangeEmail(email); API ของ Application Service นี้แสดงคำสั่ง (คำกริยาขั้นตอน) ไม่ใช่สถานะ แต่ถ้าเราต้องจัดหา RESTful API สำหรับแอปพลิเคชันเดียวกันนั่นก็คือโมเดลทรัพยากรของผู้ใช้ซึ่งมีลักษณะดังนี้: { name:"name", email:"email@mail.com" } API ของทรัพยากรที่มุ่งเน้น exposes รัฐไม่ได้คำสั่ง สิ่งนี้ทำให้เกิดข้อกังวลต่อไปนี้: การดำเนินการอัปเดตแต่ละครั้งกับ REST API สามารถแมปกับการเรียกขั้นตอนบริการแอปพลิเคชันอย่างน้อยหนึ่งรายการขึ้นอยู่กับคุณสมบัติที่จะถูกอัพเดตบนโมเดลรีซอร์ส การดำเนินการอัปเดตแต่ละครั้งจะดูเหมือน atomic ไปยังไคลเอนต์ …

2
แบบจำลองโดเมนแอนดี้และการฉีดบริการโดเมน
รูปแบบโดเมนโรคโลหิตจางจะอธิบายว่าการต่อต้านรูปแบบในการออกแบบโดเมนขับเคลื่อนโดยมาร์ตินฟาวเลอร์ เพื่อให้มีตรรกะทางธุรกิจในรูปแบบโดเมนมักจะใช้บริการโดเมน แต่การฉีดบริการโดเมนลงในแบบจำลองโดเมนนั้นถือว่าเป็นอันตรายโดย Vaughn Vernon (ดู "การใช้การออกแบบที่ขับเคลื่อนด้วยโดเมน, หน้า 387) ในความคิดของฉันความคิดเห็นเหล่านั้นขัดแย้งกันจริงหรือไม่? จะพิจารณาทั้งสองประเด็นได้อย่างไร มันเป็นรูปแบบโดเมนที่สมบูรณ์จริง ๆกับบริการโดเมนฉีดกับแบบจำลองโดเมน anemic และบริการโดเมนปกติหรือไม่

3
ฐานข้อมูลเชิงสัมพันธ์และการพัฒนาซ้ำ
ในหลาย ๆ แนวทางในการพัฒนาซอฟต์แวร์เช่นวิธีการที่คล่องตัวการออกแบบที่ขับเคลื่อนด้วยโดเมนและการวิเคราะห์และออกแบบเชิงวัตถุเราได้รับการสนับสนุนให้ใช้วิธีการหนึ่งซ้ำเพื่อการพัฒนา ดังนั้นเราไม่ควรที่จะทำให้โมเดลโดเมนของเราถูกต้องในครั้งแรกที่เราเริ่มทำงานในโครงการ แต่เมื่อเวลาผ่านไปเราจะปรับโครงสร้างโมเดลใหม่เนื่องจากเราได้รับความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับโดเมนปัญหาด้วยเวลา นอกเหนือจากนั้นแม้ว่าเราจะพยายามทำให้ได้แบบอย่างที่สมบูรณ์แบบซึ่งฉันเชื่อแล้วว่ามันยากมากความต้องการอาจเปลี่ยนแปลงได้ ดังนั้นหลังจากที่ซอฟแวร์ได้ถูกนำไปใช้เพื่อการผลิต, ผู้ใช้อาจสังเกตเห็นว่าเป็นความต้องการบางอย่างก็ไม่ได้เข้าใจอย่างสมบูรณ์หรือเลว, ความต้องการบางอย่างที่ขาดหายไป ประเด็นตรงนี้คือเราอาจจำเป็นต้องเปลี่ยนรุ่นหลังจากที่ซอฟต์แวร์ได้รับการปรับใช้ หากสิ่งนี้เกิดขึ้นเรามีปัญหา: ฐานข้อมูลการผลิตมีข้อมูลของผู้ใช้ซึ่งมีความสำคัญและติดตั้งในรูปแบบสำหรับรุ่นเก่าแล้ว การอัปเดตรหัสอาจเป็นเรื่องยากหากรหัสไม่ได้รับการออกแบบมาอย่างดีและหากระบบมีขนาดใหญ่ แต่มันสามารถทำได้เมื่อเวลาผ่านไปเรามีเครื่องมือเช่น Git ซึ่งช่วยให้เราทำเช่นนั้นได้โดยไม่สร้างความเสียหายกับเวอร์ชันที่พร้อมใช้งานจริง ในทางกลับกันถ้าโมเดลเปลี่ยนแปลงหากคุณสมบัติของคลาสหายไปหรืออะไรก็ตามฐานข้อมูลก็ควรเปลี่ยนเช่นกัน แต่เรามีปัญหา: มีข้อมูลอยู่ที่นั่นซึ่งไม่สามารถสูญหายได้ซึ่งได้รับการจัดรูปแบบสำหรับรุ่นเก่าแล้ว ดูเหมือนว่าฐานข้อมูลเชิงสัมพันธ์ที่นี่เป็นอุปสรรคที่ขัดขวางเราจากการพัฒนาซ้ำ ๆ และแม้แต่การอัพเดตซอฟต์แวร์เมื่อผู้ใช้ปลายทางต้องการ วิธีหนึ่งที่ฉันเคยใช้คือการเขียนรหัสคลาสพิเศษที่แมปตารางฐานข้อมูลเก่ากับรายการใหม่ ดังนั้นคลาสเหล่านี้จึงเลือกข้อมูลในรูปแบบเก่าแปลงเป็นรูปแบบที่ใช้โดยโมเดลใหม่และบันทึกลงในตารางใหม่ วิธีการนี้ดูเหมือนจะไม่เป็นวิธีที่ดีที่สุด คำถามของฉันที่นี่คือ: มีวิธีใดที่รู้จักกันดีและแนะนำในการกระทบยอดการพัฒนาซ้ำกับฐานข้อมูลเชิงสัมพันธ์?

4
การติดตาเป็นภาษาที่ใช้งานได้จริงเพียงใด?
รูปแบบของการใช้ตัวจัดการคำสั่งในการจัดการกับการคงอยู่ของภาษาที่ใช้งานได้อย่างแท้จริงซึ่งเราต้องการทำให้โค้ดที่เกี่ยวข้องกับ IO มีความบางที่สุด เมื่อใช้การออกแบบที่ขับเคลื่อนด้วยโดเมนในภาษาเชิงวัตถุเป็นเรื่องปกติที่จะใช้รูปแบบคำสั่ง / ตัวจัดการเพื่อดำเนินการเปลี่ยนแปลงสถานะ ในการออกแบบตัวจัดการคำสั่งจะอยู่ด้านบนของวัตถุโดเมนของคุณและรับผิดชอบต่อตรรกะที่เกี่ยวข้องกับการคงอยู่ที่น่าเบื่อเช่นการใช้ที่เก็บข้อมูลและการเผยแพร่กิจกรรมโดเมน ตัวจัดการเป็นหน้าสาธารณะของโมเดลโดเมนของคุณ รหัสแอปพลิเคชันเช่น UI เรียกตัวจัดการเมื่อจำเป็นต้องเปลี่ยนสถานะของวัตถุโดเมน ร่างใน C #: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } …

8
วัตถุที่ไม่เปลี่ยนรูปแบบและ DDD ไปด้วยกันไหม?
พิจารณาระบบที่ใช้ DDD (เช่นกัน: ระบบใด ๆ ที่ใช้ ORM) จุดของระบบใด ๆ ตามความเป็นจริงในเกือบทุกกรณีการใช้งานคือการจัดการวัตถุโดเมนเหล่านั้น มิฉะนั้นจะไม่มีผลหรือวัตถุประสงค์ที่แท้จริง การแก้ไขวัตถุที่ไม่เปลี่ยนรูปจะทำให้เกิดการสร้างบันทึกใหม่หลังจากที่วัตถุยังคงอยู่ซึ่งจะสร้างการขยายตัวครั้งใหญ่ในแหล่งข้อมูล (เว้นแต่ว่าคุณจะลบระเบียนก่อนหน้าหลังจากการแก้ไข) ฉันเห็นประโยชน์ของการใช้วัตถุที่ไม่เปลี่ยนรูป แต่ในแง่นี้ฉันไม่สามารถเห็นกรณีที่มีประโยชน์สำหรับการใช้วัตถุที่ไม่เปลี่ยนรูปได้ มันผิดหรือเปล่า?

3
วิธีจัดการข้อผิดพลาดหลังการตรวจสอบความถูกต้องในคำสั่ง (DDD + CQRS)
ตัวอย่างเช่นเมื่อคุณส่งแบบฟอร์มลงทะเบียนคุณจะต้องตรวจสอบในDomain Model( WriteModelในCQRS) ว่ามันอยู่ในสถานะที่ถูกต้อง (ตัวอย่างไวยากรณ์ที่อยู่อีเมลอายุ ฯลฯ ) จากนั้นคุณสร้างและส่งไปยังCommandCommand Bus ฉันเข้าใจว่าคำสั่งไม่ควรส่งคืนสิ่งใด ดังนั้นคุณจะจัดการกับข้อผิดพลาดได้Command Busอย่างไร (ตัวอย่างเช่นผู้ใช้ที่ลงทะเบียน 1 วินาทีก่อนหน้านี้ด้วยเหมือนกันusername/email) คุณรู้ได้อย่างไรว่าคำสั่งนั้นล้มเหลวและคุณรู้ได้อย่างไรว่ามีข้อผิดพลาด?

3
คำแนะนำโครงสร้างโครงการแอปพลิเคชันแบบชั้น MVVM, DDD และ WPF
ฉันกำลังพยายามตั้งค่าโครงสร้างแอปพลิเคชันของฉันใน VS และฉันต้องการ "ลอง" และพิสูจน์ในอนาคตให้อยู่ในระดับที่เหมาะสม แอปพลิเคชั่นนี้จะเป็น WPF เขียนใหม่ของแอป Winform เก่าที่ไม่ได้ทำตามอนุสัญญา ไม่มีเลเยอร์เทียร์คำย่อ ฯลฯ ... มันเป็นแอพพลิเคชั่นสำหรับองค์กรขนาดใหญ่พอสมควร ฉันวางแผนที่จะใช้ Linq To SQL เป็นฐานข้อมูลของฉันและมักจะเป็น MS SQL นอกจากนี้ฉันมีชุดทักษะที่มีอยู่กับมัน ฉันต้องการติดตาม MVVM และ DDD ที่ดีที่สุดที่ฉันสามารถทำได้ แต่ฉันสับสนในโครงสร้างของแอปพลิเคชันของฉันเมื่อรวมสิ่งเหล่านี้ ให้ฉันลองและอธิบายด้วยตัวอย่างบางส่วน เมื่อฉันติดตาม MVVM โครงสร้างโฟลเดอร์ของฉันอาจมีลักษณะเช่นนี้: Views Models ViewModels Helpers แต่วิธีที่เหมาะกับ DDD แบบเลเยอร์เรียบง่ายที่โครงสร้างโครงการของฉันอาจมีลักษณะเช่นนี้: MyApp.UI MyApp.Domain MyApp.Data ฉันจะใส่Modelsใน Domain layer หรือฉันมี 3 รุ่นว่าPerson? สิ่งนี้นำไปสู่คำถามอื่นที่ฉันจะวางที่เก็บและการแมปของวัตถุ DB …

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

5
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่บริการต่างๆจะแบ่งปันฐานข้อมูลใน SOA
เมื่อเร็ว ๆ นี้ฉันได้อ่านรูปแบบการรวมองค์กรของ Hohpe และ Woolf หนังสือของ Thomas Erl บางตัวเกี่ยวกับ SOA และดูวิดีโอและพ็อดแคสต์ต่างๆโดย Udi Dahan และคณะ บน CQRS และระบบขับเคลื่อนเหตุการณ์ ระบบในที่ทำงานของฉันต้องทนทุกข์ทรมานจากการมีเพศสัมพันธ์สูง แม้ว่าแต่ละระบบจะมีฐานข้อมูลเป็นของตนเองในทางทฤษฎี ในทางปฏิบัติหมายความว่ามีฐานข้อมูลขนาดใหญ่หนึ่งระบบที่ใช้ทั้งหมด ตัวอย่างเช่นมีข้อมูลลูกค้าหนึ่งตาราง สิ่งที่ฉันได้อ่านส่วนใหญ่ดูเหมือนว่าจะแนะนำข้อมูลที่ผิดปกติเพื่อให้แต่ละระบบใช้เฉพาะฐานข้อมูลของตน ฉันคิดว่านี่เป็นวิธีหนึ่งในการบังคับใช้ขอบเขตใน SOA - แต่ละบริการควรมีฐานข้อมูลของตัวเอง แต่จากนั้นฉันอ่านสิ่งนี้: /programming/4019902/soa-joining-data-across-multiple-services และมันบอกว่านี่เป็นสิ่งที่ผิดที่ต้องทำ การแยกฐานข้อมูลดูเหมือนจะเป็นวิธีที่ดีในการแยกระบบออก แต่ตอนนี้ฉันสับสนเล็กน้อย นี่เป็นเส้นทางที่ดีใช่ไหม เคยแนะนำหรือไม่ว่าคุณควรแยกฐานข้อมูลบนเปิดบริการ SOA บริบท DDD Bounded แอปพลิเคชัน ฯลฯ

3
เมื่อใช้ DDD และ CRQS ควรเป็นหนึ่งเหตุการณ์ต่อคำสั่งใช่หรือไม่
ฉันกำลังมองหาวิธีในการออกแบบแอพพลิเคชั่น ddd ด้วยระเบียบการตั้งค่า สมมติว่า "ลูกค้า" โดยรวมมีคำสั่งที่กำหนดไว้ว่า "FillProfile" มันจะยกเหตุการณ์ "ProfileFilled" อย่างมีเหตุผล มีกรณีที่คำสั่งจะเพิ่มมากกว่าเหตุการณ์หรือคำสั่งที่จะเพิ่มเหตุการณ์ที่แตกต่างกันตามตรรกะบางอย่าง? หรือนี่คือความสัมพันธ์แบบ 1 - 1 เสมอ (คำสั่ง 1 จะไม่มีการเพิ่มหรือเป็นเหตุการณ์ประเภทที่กำหนดไว้เสมอ) ฉันถามสิ่งนี้เพราะถ้านี่เป็นความจริงที่ว่าคำสั่งจะเพิ่มเหตุการณ์เดียวกันฉันสามารถสร้างระบบการประชุมของฉันในความเป็นจริงนั้น ฉันรู้ว่า "RaiseEvent" จะส่งผลให้ "EventRaised" ...

2
บริบทและโดเมนที่ถูก จำกัด DDD?
ฉันทำงานในแอปพลิเคชั่นที่ค่อนข้างซับซ้อนด้วยตารางฐานข้อมูล 10 รายการ (Aggregates, Entities / Object Objects) และการใช้ DDD ณ จุดนี้ดูเหมือนว่าโดยทั่วไปแล้ว DDD-Lite หมายถึงมี Application / Domain Services, Domain Model (เอนทิตี, Object Value) และ Repositories ฉันหยิบหนังสือนำ DDD มาใช้และสิ่งแรกที่เขาพูดถึงคือ DDD-Lite และบริบทที่ถูกผูกไว้และเหตุการณ์โดเมนที่หายไปเป็นข้อผิดพลาดแรกซึ่งเป็นเรื่องปกติเมื่อเริ่มต้น DDD ขณะนี้ฉันพยายามจัดรูปแบบโดเมนโดยความสัมพันธ์แบบรวมและใช้เนมสเปซเพื่อสาธิต ฉันไม่เห็นประโยชน์ / ข้อผิดพลาดที่เกี่ยวข้องกับการแยกโครงการ Domain Model ออกเป็นบริบทที่ถูกผูกมัด (ยัง) บางทีมันอาจจะชัดเจนในภายหลัง แต่ฉันต้องการความคิดเห็นเกี่ยวกับชีวิตจริงในบริบทที่ถูกผูกไว้ (และอาจเป็นโดเมนย่อยเป็นต้นหากพวกเขาเชื่อมโยงเข้ากับมัน)

1
การออกแบบการขับเคลื่อนด้วยโดเมนมีประโยชน์ / มีประสิทธิผลสำหรับโดเมนที่ไม่ซับซ้อนใช่หรือไม่
เมื่อประเมินโครงการที่มีศักยภาพในที่ทำงานฉันแนะนำว่าอาจเป็นประโยชน์ในการใช้วิธีการออกแบบโดยใช้โดเมนเป็นโมเดลวัตถุ โครงการไม่มีโดเมนที่ซับซ้อนมากนักดังนั้นเพื่อนร่วมงานของฉันก็โยนเรื่องนี้มาให้ฉัน: มีการกล่าวกันว่า DDD นั้นเป็นที่นิยมในกรณีที่มีรูปแบบโดเมนที่ซับซ้อน (“ ... มันใช้เมื่อใดก็ตามที่เราทำงานในโดเมนที่ซับซ้อนและซับซ้อน” Eric Evans) สิ่งที่ฉันทำคือ - คุณกำหนดความซับซ้อนของโดเมนได้อย่างไร สามารถกำหนดจำนวนรากรวมในรูปแบบโดเมนได้หรือไม่ ความซับซ้อนของโดเมนในการโต้ตอบของวัตถุหรือไม่ โดเมนที่เรากำลังประเมินนั้นเกี่ยวข้องกับการเผยแพร่ออนไลน์และการจัดการเนื้อหา

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