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

แบบจำลองโดเมนประกอบด้วยวัตถุพฤติกรรมความสัมพันธ์และคุณลักษณะที่ประกอบกันเป็นอุตสาหกรรมที่เป็นจุดสำคัญของการพัฒนา

3
DDD กับ ORM ตรรกะทางธุรกิจควรไปที่ใด
ฉันเคยใช้เครื่องมือ MDA (สถาปัตยกรรมที่ขับเคลื่อนด้วยโมเดล) ในอดีตที่เราทำโมเดลผ่าน UML และสิ่งนี้ได้สร้างเอนทิตีธุรกิจ (โมเดลโดเมนของเรา) และ ORM (การทำแผนที่ ฯลฯ ) ท่ามกลางสิ่งอื่น ๆ รหัสธุรกิจและบริการจำนวนมากที่ทำงานบนโดเมนนั้นเป็นส่วนหนึ่งของแบบจำลองและที่เก็บของเราส่งคืนเอนทิตีธุรกิจ (ดังนั้นจึงเป็นไปไม่ได้ที่จะเปลี่ยนไปใช้ ORM อื่น (ไม่ใช่ที่เราต้องการ)) อย่างไรก็ตามตอนนี้ฉันกำลังเริ่มโครงการและฉันต้องการคิดในแง่ของ DDD จนถึงตอนนี้ฉันรู้สึกราวกับว่าฉันวางตรรกะทางธุรกิจของฉันในรูปแบบโดเมนของฉันและผ่านที่เก็บฉันจะทำงานร่วมกับ ORM (ซึ่งฉันเคยเลือก) อย่างไรก็ตามถ้าฉันต้องการใช้เครื่องมือ MDA สำหรับส่วน ORM ของแอปพลิเคชันต่อไปโมเดลที่สร้างขึ้นที่นี่จะเป็นโลหิตจางมาก (เช่นไม่มีตรรกะทางธุรกิจ) ในทำนองเดียวกันถ้าฉันใช้ Entity framework (.net) หรือ NHibernate สำหรับ ORM ของฉันมันก็จะเป็นแบบจำลองโลหิตจางด้วย? ฉันไม่แน่ใจว่าคุณจะใช้ตรรกะทางธุรกิจที่ใดถ้าฉันใช้ NHibernate ฉันถูกต้องในการคิดแบบนี้ในคำอื่น ๆ ที่มี DDD ตรรกะทางธุรกิจทั้งหมดในโดเมนและเพียงแค่ใช้ ORM สำหรับการคงอยู่ผ่านทางที่เก็บ?

4
การออกแบบการขับเคลื่อนโดเมนและการโต้ตอบข้ามโดเมน
ฉันเป็นมือใหม่ DDD ญาติ แต่ฉันกำลังอ่านอะไรและทุกอย่างที่ฉันสามารถรับในมือที่จะต้มออกและกลั่นความรู้ของฉัน ฉันเจอคำถาม DDD นี้และหนึ่งในคำตอบที่ฉันสนใจ บริบทและโดเมนที่ถูก จำกัด DDD? หนึ่งในคำตอบที่ผู้โพสต์ให้ตัวอย่างของระบบอีคอมเมิร์ซกับผลิตภัณฑ์ที่อยู่ในโดเมนอย่างน้อย 2 โดเมน: 1) แคตตาล็อกสินค้า 2) การจัดการสินค้าคงคลัง ตกลงนั่นคือเหตุผลทั้งหมดเช่นในส่วนหน้าอีคอมเมิร์ซของคุณคุณมีความสนใจในการแสดงข้อมูลผลิตภัณฑ์และไม่สนใจในการจัดการสินค้าคงคลัง แต่. คุณอาจต้องการแสดงระดับสินค้าคงคลังบนหน้าเว็บหรือคุณอาจต้องการแสดงหมายเลขรุ่นของสินค้าคงคลังในสต็อก (ลองนึกภาพว่าสินค้าคงคลังของคุณคือหนังสือนิตยสาร ฯลฯ ) ข้อมูลนี้มาจากโดเมนสินค้าคงคลัง ดังนั้นคุณจะจัดการกับสิ่งนี้อย่างไร คุณจะ a) โหลดทั้งโดเมนผลิตภัณฑ์และการรวมโดเมนสินค้าคงคลังหรือไม่ b) คุณจะถือคุณสมบัติบางอย่างในเอนทิตีโดเมนผลิตภัณฑ์ของคุณสำหรับตัวเลขในสต็อกและรุ่นในสต็อกจากนั้นใช้กิจกรรมโดเมนเพื่ออัปเดตเหล่านี้เมื่อมีการอัปเดตเอนทิตีสินค้าคงคลังหรือไม่ คำถามสุดท้ายหนึ่งข้อ ฉันรู้ว่าเราหมายถึงการลืม / เพิกเฉยต่อการคงอยู่ของโดเมนและเพียงแค่คิดถึงโดเมน แต่เพียงคิดผ่านตัวอย่างข้างต้นเราจะจบลงด้วย 2 DB ตารางที่อาจเกิดขึ้นสำหรับแคตตาล็อกสินค้าและสินค้าคงคลังสินค้า ตอนนี้เราจะใช้ตัวระบุเดียวกันในสิ่งเหล่านี้เพราะเป็นผลิตภัณฑ์เดียวกันหรือไม่ หรือเราสามารถใช้ 1 ตารางและ 1 แถวของตารางสำหรับข้อมูลและแมปข้อมูลที่เกี่ยวข้องกับคุณสมบัติรวมได้หรือไม่

1
ORM POCOs แทนที่โดเมนหรือไม่
นี่ค่อนข้างคล้ายกับคำถามนี้แต่กว้างขึ้น โดยทั่วไปแล้วด้วย ORMs เช่น EF 4.1 ที่รองรับ POCO ตอนนี้มันสมเหตุสมผลหรือไม่ที่จะให้หน่วยงานโดเมนของคุณเป็นวัตถุที่ยังคงอยู่ในฐานข้อมูลของคุณ ด้วย ORM ที่เก่ากว่าเช่น EF 4 หรือ Linq-to-SQL วัตถุ "ฐานข้อมูล" ของคุณจะถูกสร้างขึ้นโดยอัตโนมัติและเชื่อมต่อกับฐานข้อมูลของคุณอย่างแน่นหนาและดังนั้นสำหรับแอปพลิเคชันที่ไม่น่าสนใจ นำไปทำงาน เป็นความคิดที่มี ORM ที่ใหม่กว่าเพียงแค่สร้างเอนทิตีโดเมนที่มีประสิทธิภาพแล้วมี data-layer ที่ให้การแม็พระหว่างเอนทิตีโดเมนดังกล่าวกับ DBMS ของคุณหรือไม่ ในการเขียนที่ฉันรู้สึกว่านี่เป็นเป้าหมายเสมอแต่ไม่สามารถทำได้อย่างง่ายดายด้วยเครื่องมือที่มีอยู่อย่างน้อยไม่ใช่ในโลก NET

2
ควรระบุ ID ธุรกิจที่เป็นที่รู้จักกันดีของกิจการด้วยประเภทเฉพาะใน DDD / OOP หรือไม่
ในแง่การปฏิบัติมันหมายถึงการใช้กำหนดเอง (ไม่เปลี่ยนรูป) classมากกว่าstringหรือบางประเภทดั้งเดิมอื่น ๆ ตัวอย่าง: สำนักพิมพ์: หมายเลขหนังสือมาตรฐานสากล การเงิน: หมายเลขประจำตัวของหลักทรัพย์ระหว่างประเทศ ข้อดี: สามารถมั่นใจได้ว่ารูปแบบของตัวระบุ กลายเป็นสมาชิกชั้นหนึ่งของโมเดล ข้อเสีย: เพิ่มแรงเสียดทานติดตา (เช่น Entity Framework) รหัสเพิ่มเติม

4
สร้างแบบจำลองความสัมพันธ์กับ DDD (หรือมีเหตุผล)?
นี่คือข้อกำหนดที่ง่ายขึ้น: ผู้ใช้สร้างQuestionที่มีหลายAnswers Questionต้องมีอย่างน้อยหนึ่งAnswerรายการ การชี้แจง: คิดQuestionและAnswerในการทดสอบ : มีคำถามหนึ่งข้อ แต่มีหลายคำตอบซึ่งมีเพียงไม่กี่ข้อที่ถูกต้อง ผู้ใช้คือนักแสดงที่กำลังเตรียมการทดสอบนี้ดังนั้นเขาจึงสร้างคำถามและคำตอบ ฉันพยายามจำลองตัวอย่างง่ายๆนี้เพื่อ 1) จับคู่โมเดลชีวิตจริง 2) แสดงรหัสด้วยดังนั้นเพื่อลดการใช้ผิดและข้อผิดพลาดที่อาจเป็นไปได้และให้คำแนะนำแก่นักพัฒนาเกี่ยวกับวิธีใช้โมเดล คำถามที่เป็นนิติบุคคลในขณะที่คำตอบคือวัตถุที่คุ้มค่า คำถามถือคำตอบ จนถึงตอนนี้ฉันมีวิธีแก้ปัญหาที่เป็นไปได้เหล่านี้ [A]ภายในโรงงานQuestion แทนที่จะสร้างAnswerด้วยตนเองเราสามารถโทร: Answer answer = question.createAnswer() answer.setText(""); ... ที่จะสร้างคำตอบและเพิ่มลงในคำถาม จากนั้นเราสามารถจัดการคำตอบได้โดยตั้งค่าคุณสมบัติ ด้วยวิธีนี้เฉพาะคำถามเท่านั้นที่สามารถสร้างคำตอบได้ นอกจากนี้เราป้องกันไม่ให้มีคำตอบโดยไม่มีคำถาม แต่เราไม่ได้มีการควบคุมมากกว่าการสร้างคำตอบเป็นที่ hardcoded Questionใน นอกจากนี้ยังมีปัญหาหนึ่งกับ 'ภาษา' ของรหัสด้านบน ผู้ใช้คือคนที่สร้างคำตอบไม่ใช่คำถาม โดยส่วนตัวแล้วฉันไม่ชอบที่เราจะสร้างวัตถุที่มีคุณค่าและขึ้นอยู่กับนักพัฒนาเพื่อเติมให้เต็มด้วยค่า - เขาจะแน่ใจได้อย่างไรว่าจะต้องเพิ่มอะไรบ้าง [B]คำถามจากโรงงานใช้ # 2 บางคนบอกว่าเราควรมีวิธีนี้ในQuestion: question.addAnswer(String answer, boolean correct, int level....); เช่นเดียวกับวิธีแก้ไขปัญหาข้างต้นวิธีนี้ใช้ข้อมูลที่จำเป็นสำหรับคำตอบและสร้างรายการที่จะถูกเพิ่มลงในคำถามด้วย …

4
การตรวจสอบความสอดคล้องของธุรกรรมด้วย DDD
ฉันเริ่มต้นด้วย DDD และเข้าใจว่ามีการใช้รากรวมเพื่อรับรองความมั่นคงข้ามชาติ เราไม่ควรแก้ไขการรวมหลายรายการในบริการแอปพลิเคชันเดียว ฉันต้องการทราบวิธีจัดการกับสถานการณ์ต่อไปนี้ ฉันมีรูทรวมที่เรียกว่าผลิตภัณฑ์ นอกจากนี้ยังมีรูทรวมที่เรียกว่ากลุ่ม ทั้งสองมีรหัสและสามารถแก้ไขได้อย่างอิสระ ผลิตภัณฑ์หลายรายการสามารถชี้ไปที่กลุ่มเดียวกัน ฉันมีบริการแอปพลิเคชันที่สามารถเปลี่ยนกลุ่มของผลิตภัณฑ์: ProductService.ChangeProductGroup(string productId, string groupId) ตรวจสอบกลุ่มที่มีอยู่ รับผลิตภัณฑ์จากพื้นที่เก็บข้อมูล ตั้งค่ากลุ่ม เขียนผลิตภัณฑ์กลับไปที่ที่เก็บ ฉันยังมีบริการแอปพลิเคชันที่สามารถลบกลุ่มได้: GroupService.DeleteGroup(string groupId) 1. รับผลิตภัณฑ์จากที่เก็บซึ่ง groupId ถูกตั้งค่าเป็น groupId ที่ระบุตรวจสอบให้แน่ใจว่าการนับเป็น 0 หรือยกเลิก 2. ลบกลุ่มจากที่เก็บกลุ่ม 3. บันทึกการเปลี่ยนแปลง คำถามของฉันคือสถานการณ์ต่อไปนี้จะเกิดอะไรขึ้นถ้า: ใน ProductService.ChangeProductGroup เราจะตรวจสอบกลุ่มที่มีอยู่ (เช่นนั้น) จากนั้นหลังจากการตรวจสอบนี้ผู้ใช้ที่แยกต่างหากจะลบ productGroup (ผ่าน GroupService.DeleteGroup อื่น) ในกรณีนี้เราตั้งค่าการอ้างอิงถึงผลิตภัณฑ์ที่เพิ่งถูกลบ? นี่เป็นข้อบกพร่องในการออกแบบของฉันที่ฉันควรใช้การออกแบบโดเมนที่แตกต่างกัน (เพิ่มองค์ประกอบเพิ่มเติมถ้าจำเป็น) หรือฉันจะต้องใช้การทำธุรกรรม?

3
กระบวนการคิดเชิงวัตถุคืออะไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันกำลังศึกษา OOP ร่วมกับการใช้ MVC ของ Zend ในช่วงไม่กี่เดือนที่ผ่านมา โดยทั่วไปฉันค่อนข้างใหม่กับการเขียนโปรแกรม แต่ฉันรู้สึกอย่างยิ่งว่าฉันควรเรียนรู้สิ่งต่าง ๆ ในแบบที่ 'ถูกต้อง' ซึ่งสำหรับฉันหมายถึงการทำให้แน่ใจว่าฉันเข้าใจว่าทำไมสิ่งต่าง ๆ ถึงถูกต้อง คือฉันได้พบว่าในการเรียนรู้วิธีทำบางสิ่ง (พูดอะไรเพลง) วิธีที่ดีที่สุดในการเรียนรู้วิธีทำบางสิ่งคือรู้ว่าทำไมมันถึงทำแบบนั้นตั้งแต่แรก อย่างไรก็ตามฉันพยายามอย่างหนักกับความเข้าใจในการพัฒนารูปแบบธุรกิจของตัวเอง (เช่น M ของ MVC) และฉันตัดสินใจว่าไม่ใช่เพราะฉันไม่เข้าใจ OOP โดยทั่วไปเพราะฉันศึกษามาหลายครั้ง เดือนและฉันไม่คิดว่าแนวคิดจะยากมากที่จะเข้าใจ ฉันพบตัวอย่างที่ฉันได้ศึกษาอย่างเข้าใจง่าย ฉันคิดว่าปัญหาสำหรับฉันนั้นอยู่ในขั้นตอนการแปลปัญหาของฉันเองไปสู่การแก้ปัญหาเชิงวัตถุ ตัวอย่างในหนังสือ (ที่ฉันอ่านมาแล้ว) ชัดเจนเกินไปดังนั้นกระบวนการแปลปัญหาเป็นวัตถุไม่ยากมาก สิ่งที่ฉันคิดว่าฉันอาจขาดหายไปคือกระบวนการที่เป็นนามธรรมระดับสูง รายการขั้นตอนหรือคำถามบางประเภทที่โซลูชันเชิงวัตถุทุกตัวต้องตอบในระดับสูงสุด หากคุณต้องอธิบายกระบวนการดังกล่าวในไม่เกินห้าขั้นตอนพวกเขาจะเป็นอย่างไรและเพราะอะไร กระบวนการที่มีประสิทธิภาพที่สุดในการแปลปัญหาใด ๆ ให้เป็นโซลูชันเชิงวัตถุคืออะไร

1
หลักฐานปัจจุบันสนับสนุนการยอมรับบริบทผ่านแบบจำลองข้อมูลของแคนนอนหรือไม่
แนวคิด "บัญญัติ" นั้นแพร่หลายในซอฟต์แวร์ รูปแบบเช่นCanonical Model , Canonical Schema , Canonical Data Modelเป็นต้นดูเหมือนจะเกิดขึ้นซ้ำแล้วซ้ำอีกในการพัฒนา เช่นเดียวกับนักพัฒนาหลายคนฉันมักจะติดตามอย่างไม่ถี่ถ้วนภูมิปัญญาดั้งเดิมที่คุณต้องการแบบจำลองที่เป็นที่ยอมรับมิฉะนั้นคุณจะต้องเผชิญกับการระเบิดของนักทำแผนที่และนักแปล หรืออย่างน้อยฉันก็เคยทำเช่นนั้นจนกระทั่งสองสามปีที่ผ่านมาเมื่อฉันอ่านEF Vote of No Confidence เป็นครั้งแรก: สมมติฐานที่ครั้งหนึ่งเคยสนับสนุนการแสวงหารูปแบบข้อมูลที่ยอมรับไม่ได้และไม่สามารถรวมปัจจัยที่จะค้นพบได้เมื่อแนวคิดถูกนำไปใช้จริง เราพบว่าผ่านการลองผิดลองถูกมาหลายปีว่าการใช้แบบจำลองแยกต่างหากสำหรับแต่ละบริบทซึ่งอาจใช้แบบจำลองข้อมูลแคนนอนเป็นวิธีที่ซับซ้อนน้อยที่สุดเป็นวิธีที่มีค่าใช้จ่ายน้อยที่สุดและเป็นวิธีหนึ่งที่นำไปสู่ ของแอพพลิเคชั่นและอุปกรณ์ปลายทางโดยใช้แบบจำลองตามบริบทและเป็นวิธีการที่ไม่สนับสนุนให้เอนโทรปีของซอฟต์แวร์ที่เป็นแบบจำลองมาตรฐานยอมรับ บทความนี้ไม่มีหลักฐานใด ๆ ที่สนับสนุนข้อเรียกร้องของมัน แต่ทำให้ฉันสงสัยว่าวิธีการ CDM นั้นนานพอที่จะลองใช้ทางเลือกอื่นและซอฟต์แวร์ที่ได้นั้นไม่ได้ระเบิดอย่างแท้จริงหรือเป็นรูปเป็นร่าง แต่นั่นไม่ได้แปลว่าโดดเดี่ยวทั้งหมด ฉันเพิ่งจะโชคดี ดังนั้นฉันจึงสงสัยว่ามีการวิจัยอย่างจริงจังในเรื่องของผลกระทบระยะยาวในทางปฏิบัติของการมีแบบจำลองมาตรฐานและแบบจำลองเชิงบริบทในระบบซอฟต์แวร์หรือสถาปัตยกรรมหรือไม่? หรือถ้ามันยังเร็วเกินไปที่จะถามว่ามีนักพัฒนา / สถาปนิกคนใดเขียนเกี่ยวกับประสบการณ์ส่วนตัวที่เปลี่ยนจาก CDM เป็นแบบจำลองตามบริบทอิสระหรือในทางกลับกันและสิ่งที่เกิดขึ้นจริงในเรื่องการผลิตความซับซ้อนหรือความน่าเชื่อถือ แล้วความแตกต่างในระดับต่าง ๆ คือการใช้แบบจำลองเดียวกันในแอพพลิเคชั่นเดียวกับการใช้ข้ามระบบของแอพพลิเคชั่นหรือทั้งองค์กร (โปรดข้อเท็จจริงเท่านั้นยินดีต้อนรับเรื่องราวสงคราม แต่ไม่มีการเก็งกำไร)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.