ฉันสามารถเปลี่ยนลายเซ็นของโรงงานรถยนต์เพื่อยอมรับเอนทิตีของคนขับทั้งหมด จากนั้นโรงงานก็จะเลือกรหัสจากเอนทิตีนั้นและสร้างรถด้วย ที่นี่ค่าคงที่มีการตรวจสอบโดยปริยาย
วิธีนี้น่าสนใจเนื่องจากคุณได้รับเช็คฟรีและสอดคล้องกับภาษาที่แพร่หลาย Car
ไม่ได้ขับเคลื่อนด้วยแต่โดยdriverId
Driver
วิธีการนี้ในความเป็นจริงที่ใช้โดยจอห์นเวอร์นอนอยู่ในนั้นของเอกลักษณ์และการเข้าถึงบริบทตัวอย่างขอบเขตที่เขาผ่านUser
รวมไปGroup
รวม แต่ถือลงบนประเภทค่าGroup
GroupMember
ตามที่คุณเห็นสิ่งนี้ยังช่วยให้เขาสามารถตรวจสอบการเปิดใช้งานของผู้ใช้ (เราทราบดีว่าการตรวจสอบอาจค้างอยู่)
public void addUser(User aUser) {
//original code omitted
this.assertArgumentTrue(aUser.isEnabled(), "User is not enabled.");
if (this.groupMembers().add(aUser.toGroupMember()) && !this.isInternalGroup()) {
//original code omitted
}
}
อย่างไรก็ตามโดยผ่านDriver
อินสแตนซ์คุณยังเปิดตัวเองเพื่อปรับเปลี่ยนDriver
ภายในโดยไม่Car
ตั้งใจ การส่งผ่านค่าอ้างอิงช่วยให้เหตุผลเกี่ยวกับการเปลี่ยนแปลงจากมุมมองของโปรแกรมเมอร์ได้ง่ายขึ้น แต่ในเวลาเดียวกัน DDD นั้นเกี่ยวกับภาษา Ubiquitous ดังนั้นอาจคุ้มค่ากับความเสี่ยง
หากคุณสามารถสร้างชื่อที่ดีเพื่อใช้หลักการแยกส่วนต่อประสาน(ISP) ได้คุณอาจใช้อินเทอร์เฟซที่ไม่มีวิธีการเชิงพฤติกรรม คุณอาจจะได้แนวคิดเกี่ยวกับวัตถุค่าที่แสดงถึงการอ้างอิงไดรเวอร์ที่ไม่เปลี่ยนรูปแบบและสามารถสร้างอินสแตนซ์ได้จากไดร์เวอร์ที่มีอยู่เท่านั้น (เช่นDriverDescriptor driver = driver.descriptor()
)
ฉันสามารถจินตนาการได้ว่ามวลรวมเหล่านั้นอาจอาศัยอยู่ในบริบทที่มีขอบเขตแยกกันและตอนนี้ฉันจะทำให้มลภาวะทางรถยนต์ของ BC กับการพึ่งพาใน DriverRepository หรือเอนทิตีของผู้ขับขี่ของไดรเวอร์ BC
ไม่คุณไม่อยากทำ มีเลเยอร์ต่อต้านการคอร์รัปชั่นอยู่เสมอเพื่อให้แน่ใจว่าแนวคิดของบริบทหนึ่งจะไม่แยกออกไปอีก จริงๆแล้วมันง่ายกว่ามากถ้าคุณมี BC ที่อุทิศให้กับการเชื่อมโยงคนขับรถเพราะคุณสามารถสร้างแบบจำลองแนวคิดที่มีอยู่เช่นCar
และDriver
โดยเฉพาะสำหรับบริบทนั้น
ดังนั้นคุณอาจDriverLookupService
กำหนดไว้ใน BC ที่รับผิดชอบในการจัดการความสัมพันธ์ของผู้ขับขี่รถยนต์ บริการนี้อาจเรียกบริการเว็บที่เปิดเผยโดยบริบทการจัดการโปรแกรมควบคุมซึ่งส่งคืนDriver
อินสแตนซ์ที่น่าจะเป็นวัตถุค่าในบริบทนี้
โปรดทราบว่าบริการบนเว็บไม่จำเป็นต้องเป็นวิธีการเรียงลำดับที่ดีที่สุดระหว่าง BC นอกจากนี้คุณยังสามารถพึ่งพาการส่งข้อความที่ตัวอย่างเช่นUserCreated
ข้อความจากบริบทการจัดการไดรเวอร์จะถูกใช้ในบริบทระยะไกลซึ่งจะเก็บการเป็นตัวแทนของไดรเวอร์ในฐานข้อมูลของตัวเอง ความDriverLookupService
สามารถในการใช้ฐานข้อมูลนี้และข้อมูลของคนขับจะได้รับการอัพเดทพร้อมข้อความเพิ่มเติม (เช่นDriverLicenceRevoked
)
ฉันไม่สามารถบอกคุณได้ว่าวิธีใดดีกว่าสำหรับโดเมนของคุณ แต่หวังว่าจะช่วยให้คุณมีข้อมูลเชิงลึกที่เพียงพอสำหรับการตัดสินใจ
Driver.delete
ไม่ควรมีอยู่ ฉันไม่เคยเห็นโดเมนที่จะถูกทำลายมวลรวม ด้วยการทำให้ ARs อยู่รอบตัวคุณจะไม่มีวันจบลงด้วยเด็กกำพร้า