การออกแบบการขับเคลื่อนโดเมนและการโต้ตอบข้ามโดเมน


10

ฉันเป็นมือใหม่ DDD ญาติ แต่ฉันกำลังอ่านอะไรและทุกอย่างที่ฉันสามารถรับในมือที่จะต้มออกและกลั่นความรู้ของฉัน

ฉันเจอคำถาม DDD นี้และหนึ่งในคำตอบที่ฉันสนใจ

บริบทและโดเมนที่ถูก จำกัด DDD?

หนึ่งในคำตอบที่ผู้โพสต์ให้ตัวอย่างของระบบอีคอมเมิร์ซกับผลิตภัณฑ์ที่อยู่ในโดเมนอย่างน้อย 2 โดเมน:

1) แคตตาล็อกสินค้า 2) การจัดการสินค้าคงคลัง

ตกลงนั่นคือเหตุผลทั้งหมดเช่นในส่วนหน้าอีคอมเมิร์ซของคุณคุณมีความสนใจในการแสดงข้อมูลผลิตภัณฑ์และไม่สนใจในการจัดการสินค้าคงคลัง

แต่. คุณอาจต้องการแสดงระดับสินค้าคงคลังบนหน้าเว็บหรือคุณอาจต้องการแสดงหมายเลขรุ่นของสินค้าคงคลังในสต็อก (ลองนึกภาพว่าสินค้าคงคลังของคุณคือหนังสือนิตยสาร ฯลฯ ) ข้อมูลนี้มาจากโดเมนสินค้าคงคลัง

ดังนั้นคุณจะจัดการกับสิ่งนี้อย่างไร คุณจะ

a) โหลดทั้งโดเมนผลิตภัณฑ์และการรวมโดเมนสินค้าคงคลังหรือไม่ b) คุณจะถือคุณสมบัติบางอย่างในเอนทิตีโดเมนผลิตภัณฑ์ของคุณสำหรับตัวเลขในสต็อกและรุ่นในสต็อกจากนั้นใช้กิจกรรมโดเมนเพื่ออัปเดตเหล่านี้เมื่อมีการอัปเดตเอนทิตีสินค้าคงคลังหรือไม่

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

คำตอบ:


8

คุณอาจต้องการแสดงระดับสินค้าคงคลังบนหน้าเว็บหรือคุณอาจต้องการแสดงหมายเลขรุ่นของสินค้าคงคลังในสต็อก (ลองนึกภาพว่าสินค้าคงคลังของคุณคือหนังสือนิตยสาร ฯลฯ ) ข้อมูลนี้มาจากโดเมนสินค้าคงคลัง

สิ่งสำคัญที่ควรสังเกต ณ จุดนี้คือคุณกำลังพูดถึงมุมมองซึ่งกล่าวได้ว่าการใช้ข้อมูลเก่านั้นเป็นที่ยอมรับ

ดังที่ได้กล่าวไปแล้วคุณไม่จำเป็นต้องโต้ตอบกับมวลรวม (ซึ่งมีหน้าที่ป้องกันการเปลี่ยนแปลงจากการละเมิดค่าคงที่ทางธุรกิจ) แต่ด้วยการเป็นตัวแทนของสำเนาล่าสุดของสถานะของมวลรวม

ดังนั้นสิ่งที่ฉันคาดหวังตามปกติคือการเรียกใช้แบบสอบถามกับแคตตาล็อกผลิตภัณฑ์และการเรียกใช้อีกรายการหนึ่งกับสินค้าคงคลังและสิ่งที่จะเขียนทั้งสองเป็น DTO ที่คุณต้องการสนับสนุนมุมมอง

โหลดทั้งโดเมนผลิตภัณฑ์และการรวมโดเมนสินค้าคงคลังหรือไม่

ดังนั้นที่ใกล้ เราไม่จำเป็นต้องโหลดมวลรวมเพราะเราจะไม่เปลี่ยนแปลงอะไรเลย แต่เราต้องการสถานะของพวกเขา ดังนั้นเราสามารถโหลดมันได้ ที่กล่าวว่าโดยปกติฉันคาดหวังว่าทั้งสองโดเมนจะทำงานในกระบวนการที่แตกต่างกัน ดังนั้นเราจะเรียกทั้งคู่ไม่ใช่โหลดทั้งคู่

คุณจะถือคุณสมบัติบางอย่างในเอนทิตีโดเมนผลิตภัณฑ์ของคุณสำหรับจำนวนในสต็อกและรุ่นในสต็อกแล้วใช้กิจกรรมโดเมนเพื่ออัปเดตเหล่านี้เมื่อมีการปรับปรุงเอนทิตีสินค้าคงคลัง?

"อย่าข้ามลำธารมันจะไม่ดี"

การใช้เหตุการณ์เพื่อประสานข้อมูลข้ามบริบทของโดเมน: แนวคิดที่ยอดเยี่ยม การพุชคอนเซ็ปต์ที่อยู่ในโดเมนหนึ่งไปยังอีกโดเมนหนึ่ง: ตรงข้ามกับแนวคิดที่ดียกเว้นอย่างนั้น

คุณต้องการให้โดเมนสะอาด การใช้งานที่ทำงานกับโดเมนก็ไม่ให้ความสำคัญ ตัวอย่างเช่นมีความเหมาะสมสำหรับแอปพลิเคชันสินค้าคงคลังที่จะเรียกใช้บริการในแอปพลิเคชันผลิตภัณฑ์เพื่อสอบถามแนวคิดเฉพาะผลิตภัณฑ์เพื่อเพิ่มไปยังมุมมอง หรือในทางกลับกัน

ฉันไม่ทราบด้วยเหตุผลใด ๆ ว่าแอปพลิเคชันเดียวจะต้องถูก จำกัด ในโดเมนเดียว ตราบใดที่มีแหล่งความจริงเพียงแหล่งเดียวคุณสามารถกระจายการทำธุรกรรมในแบบที่คุณชอบ

แต่เพียงคิดผ่านตัวอย่างข้างต้นเราจะจบลงด้วย 2 DB ตารางที่อาจเกิดขึ้นสำหรับแคตตาล็อกสินค้าและสินค้าคงคลังสินค้า ตอนนี้เราจะใช้ตัวระบุเดียวกันในสิ่งเหล่านี้เพราะเป็นผลิตภัณฑ์เดียวกันหรือไม่

นั่นจะเป็นวิธีที่ง่าย คุณใช้ตัวระบุเดียวกันเนื่องจากเอนทิตีโลกแห่งความจริงเหมือนกัน บริบทที่แตกต่างกันสองแบบที่เอนทิตี้ของแตกต่างกัน แต่โมเดลไม่ใช่เอนทิตีโลกแห่งความจริง

เมื่อไม่ได้ผลคุณจะต้องใช้แบบสอบถามเพื่อเชื่อมช่องว่าง ฉันคิดว่าการเปลี่ยนแปลงที่พบบ่อยที่สุดของสิ่งนี้คือเอนทิตีที่ใหม่กว่ารักษา ID ของเอนทิตีที่เก่ากว่า คุณจะเห็นสิ่งนี้ภายใน BC เดียวเช่นกัน: ผู้สมัครเมื่อได้รับการอนุมัติจะเป็นลูกค้า มันเป็นผลรวมที่แตกต่างกัน (สถานะที่เกี่ยวข้องกับไคลเอนต์ต้องมีค่าคงที่ที่แตกต่างจากของผู้สมัคร); ดังนั้นหากเลเยอร์การคงอยู่ของคุณกำลังใช้สตรีมเหตุการณ์สตรีมสำหรับการรวมใหม่จะต้องใช้ตัวระบุอื่น ดังนั้นจะมีรัฐสักหน่อยที่บอกว่า "ผู้สมัครรายนี้กลายเป็นลูกค้ารายนี้"

หรือเราสามารถใช้ 1 ตารางและ 1 แถวของตารางสำหรับข้อมูลและแมปข้อมูลที่เกี่ยวข้องกับคุณสมบัติรวมได้หรือไม่

YIKES! ไม่ทำอย่างนั้น คุณกำลังเพิ่มการช่วงชิงธุรกรรมโดยไม่มีเหตุผลทางธุรกิจในการทำเช่นนั้น


ฉันทำเครื่องหมายว่านี่เป็นคำตอบให้เครดิตกับ @guillaume ด้านล่างซึ่งชี้ให้เห็นว่าการอ่านข้อมูลเพื่อแสดงในมุมมองไม่จำเป็นต้องโหลดมวลรวมขึ้น ขอบคุณสำหรับคำตอบแบบละเอียด วิธีแรกมาจากตัวแบบข้อมูล "ฉันพบว่ามันยากที่จะบังคับให้ฉันลืมเลเยอร์การคงอยู่และมุ่งเน้นไปที่ภาษาของโดเมน เมื่อฉันคิดว่าฉันเข้าใจแล้วฉันอ่านบทความอีกฉบับที่ทำให้ความเข้าใจของฉันแตกต่างออกไป
PendorPaul

ฉันเพิ่งอ่านบทความนี้msdn.microsoft.com/en-us/magazine/dn802601.aspxซึ่งรายละเอียดการใช้ Domain Events เพื่อทำซ้ำข้อมูลบางส่วนระหว่างบริบท ตัวอย่างการแชร์รายชื่อลูกค้าระหว่างการบริการลูกค้าและระบบประมวลผลคำสั่ง นี่เป็นการทำซ้ำข้อมูลลูกค้าในระบบการสั่งซื้อและใช้กิจกรรมเพื่อซิงค์ข้อมูล สิ่งนี้บินไปตามสิ่งที่เราตอบไว้ที่นี่ แน่นอนในตัวอย่างที่เชื่อมโยงบริบทการสั่งซื้อเพียงแค่ต้องการ customerID และสามารถบรรจุจากแอปพลิเคชันที่สามารถเข้าถึงบริบทการบริการลูกค้า
PendorPaul

คุณจะต้องแม่นยำมากในการคิดของคุณที่นี่ การจัดการข้อมูลระหว่างระบบไม่เหมือนกับการคัดลอกข้อมูลระหว่างรุ่นโดเมน เมื่อใดก็ตามที่คุณเห็น "อ่านอย่างเดียว [พึมพำ]" มันเป็นคำใบ้ขนาดใหญ่ที่ข้อมูลไม่ได้อยู่ในโดเมนนั้น (แม้ว่าแอปพลิเคชันอาจยังสนใจอยู่)
VoiceOfUnreason

ใช่นั่นคือสิ่งที่ฉันคิดด้วย กระบวนการเปลี่ยนความคิดนั้นยากพอหากไม่มี "ผู้เชี่ยวชาญ" เผยแพร่บทความที่เต็มไปด้วยโคลน ฉันใช้เวลาในวันนี้เพื่อวิเคราะห์โดเมนของฉันจริง ๆ เพื่อลองและเข้าใจอย่างถ่องแท้ว่า BC และ Aggregate Roots ของฉันเป็นอย่างไร ฉันสวยมากที่นั่น แต่ฉันก็รู้ว่าฉันสามารถปรับแต่งและปรับโครงสร้างโมเดลของฉันใหม่ได้ ฉันติดอยู่กับการวิเคราะห์นรกมาหลายวันแล้วตอนนี้กังวลที่จะเริ่มเขียนโค้ดเพราะกลัวว่าจะไม่มี DDD ตรงหัว ฉันคิดว่าวิธีที่ดีที่สุดในการถอดรหัสและตั้งคำถามกับรหัสของฉันและแบบจำลองนั้นถูกต้องหรือไม่ ฉันจะไปที่นั่น ขอบคุณ
PendorPaul

บางทีฉันอาจเข้าใจผิด แต่วิธีปฏิบัติที่ฉันเชื่อว่าคุณกำลังพูดถึงนั้นเรียกว่าการถ่ายโอนของรัฐแบบดำเนินการตามเหตุการณ์ (การถ่ายโอนของรัฐที่จัดกิจกรรม) และเป็นรูปแบบที่ทรงพลังมากโดยเฉพาะอย่างยิ่งสำหรับมุมมองแดชบอร์ด / ตาราง ในบริการต่างๆ คุณสามารถสร้าง "การคาดการณ์" (โดยทั่วไปมุมมอง) จากกิจกรรมโดเมนเพื่อผลักดันแดชบอร์ดเหล่านี้ ฉันเคยใช้มาก่อนค่อนข้างประสบความสำเร็จ มันอาจเป็นเครื่องมือที่ทรงพลังมากในสถานการณ์ที่ถูกต้อง IMHO สิ่งที่สำคัญยิ่งกว่าในที่นี้คือคุณทราบว่าการคาดการณ์เหล่านี้ไม่ได้แสดงถึงแบบจำลองของโดเมนและไม่ควรมีตรรกะทางธุรกิจ
Jordan

3

ฉันคิดว่าคำถามของคุณเรียกร้องให้มีออพชั่น 2 ออโธกอนอล -

  • คุณโหลดวัตถุสองชิ้นแล้วนำเสนอข้อมูลเข้าด้วยกันหรือคุณโหลดวัตถุ 1 รายการที่มีทุกสิ่งที่คุณต้องการหรือไม่

  • คุณใช้มวลรวมเพื่อแสดงเนื้อหาหรืออย่างอื่นหรือไม่?

หากคุณเชื่อในแนวทาง CQRS ปรากฎว่าการรวมอาจไม่ใช่ทางออกที่ดีที่สุดสำหรับการอ่าน ทุกครั้งที่คุณโหลดมวลรวมไม่ว่าจะแสดงข้อมูลหรือแก้ไขข้อมูลนั้นคุณเพิ่มการทำงานพร้อมกันและการช่วงชิงกับระบบของคุณ นอกจากนี้มวลรวมอาจมีขนาดใหญ่ขึ้นและช้าลงกว่าที่จะโหลดหากคุณใช้ Ad-hoc read รุ่นที่ปรับให้เหมาะกับการแสดงผล

โซลูชัน a) จาก Q ของคุณดูเหมือนจะมีข้อผิดพลาดมากมาย ตัวเลือก b) สามารถใช้ได้ แต่ฉันจะใช้เฉพาะเมื่อInventoryManagementจำเป็นต้องใช้ข้อมูลจากBC เพื่อบังคับให้มีค่าคงที่เมื่อทำการกลายพันธุ์Productรวม มันจะดีกว่าถ้าการรวมมีข้อมูลทั้งหมดที่จำเป็นในการตรวจสอบกฎธุรกิจเมื่อมีการปรับเปลี่ยน แต่ในด้านการอ่านพวกเขาสามารถนั่งได้ทุกที่

เกี่ยวกับข้อมูลคำแนะนำทั่วไปคือให้บริบทฐานข้อมูลของตนเอง (สำหรับการปรับใช้และเหตุผล SoC) คุณอาจต้องใช้ตัวระบุเดียวกันหากคุณต้องการจับคู่ผลิตภัณฑ์ระหว่างสอง BC

เกี่ยวกับการโต้ตอบข้าม BC คุณอาจต้องการดูที่/programming/16713041/communicating-between-two-bounded-contexts-in-ddd


1
ตกลงนั่นช่วยได้ โดยพื้นฐานแล้วเราใช้ Aggregate Roots และ BC เพื่อให้แน่ใจว่าค่าคงที่ของเรามีความสอดคล้องกันและข้อมูลของเรานั้นถูกต้อง เมื่อมันมาถึงการอ่านและการแสดงข้อมูลนั้นเราสามารถจัดการกับมันแยกต่างหากและมีน้ำหนักเบาโดยไม่ต้องรวมมวลรวม / BC ทั้งหมด ท้ายที่สุดแล้วเหตุใดเราจึงต้องโหลดมวลรวมเมื่อสิ่งที่เราทำอยู่นั้นกำลังแสดงข้อมูลทั้งในรายงานหรือบนหน้าจอ ทำให้รู้สึกที่สมบูรณ์แบบ ขอบคุณ
PendorPaul

นี่คือที่ที่ CQRS ส่องแสงจริงๆ คุณสามารถทำแบบสอบถาม SQL เข้าร่วมตารางและส่งกลับแบบสอบถามแบบปรับแต่งสำหรับมุมมองเฉพาะ นอกจากนี้ยังล้าง repo ของคุณจากระเบียบวิธีสืบค้น นอกจากนี้คุณยังสามารถทำซ้ำข้อมูลในการบริการเช่น ElasticSearch และสอบถามกับมัน
doesnotmatter

1

DDD มีไว้สำหรับแอปพลิเคชันที่ตรรกะทางธุรกิจมีความซับซ้อน "พิมพ์บางอย่าง" ไม่ใช่ตรรกะทางธุรกิจที่ซับซ้อน จริงๆแล้วมันไม่ใช่ตรรกะทางธุรกิจเลย

หากตรรกะทางธุรกิจในบริบทเดียวต้องการข้อมูลบางอย่างเพื่อจัดการกับกรณีการใช้งานอย่างถูกต้องข้อมูลนั้นเป็นส่วนหนึ่งของบริบทนั้น ดังนั้นแนวคิดที่ว่าบริบทที่ถูกล้อมรอบหนึ่งอาจต้องการข้อมูลที่มีอยู่ในบริบทที่มีขอบเขตที่แตกต่างกันจึงไม่สมเหตุสมผลเนื่องจากบริบทที่ล้อมรอบนั้นมีข้อมูลทั้งหมดที่ต้องการ


ตกลงเอาบางอย่างเช่น Amazon นั่นเป็นระบบที่ซับซ้อนพร้อมตรรกะทางธุรกิจที่ซับซ้อน พวกเขามีการจัดการแคตตาล็อกและการจัดการสินค้าคงคลัง พวกเขาไม่ต้องการยอดรวมสินค้าคงคลังเพื่อจัดการแคตตาล็อกโดยที่ฉันหมายถึงชื่อผลิตภัณฑ์คำอธิบายประเภทเงื่อนไข ฯลฯ อย่างไรก็ตามพวกเขาจะแสดงจำนวนสินค้าในสต็อกในหน้าแรกของร้านค้า ในสถานการณ์ดังกล่าวที่คุณต้องการแยกโดเมนการจัดการแคตตาล็อกผลิตภัณฑ์และสินค้าคงคลังสินค้า แต่คุณต้องแสดงข้อมูลบางอย่างเกี่ยวกับสินค้าคงคลังในหน้าผลิตภัณฑ์ของคุณคุณจะทำอย่างไร
PendorPaul

ฉันเดาว่าสิ่งที่ฉันพูดคือโดเมนแคตตาล็อกสินค้ามีข้อมูลทั้งหมดที่จำเป็นในการจัดการแคตตาล็อกผลิตภัณฑ์ โดเมนสินค้าคงคลังมีข้อมูลทั้งหมดที่จำเป็นในการจัดการสินค้าคงคลัง อย่างไรก็ตามเมื่อฉันต้องการแสดงข้อมูลบางอย่างแก่ผู้ใช้และข้อมูลนั้นมาจาก 2 โดเมนฉันจะทำอย่างไร ฉันเพิ่งโหลดทั้งสองโดเมนใน UI ของฉันและผูกคุณสมบัติที่ฉันต้องการแสดงหรือไม่ หรือฉันมีกลไกการรายงาน / อ่านที่ฉันส่งคืนชนิดไม่ระบุชื่อหรือ DTO ที่มีข้อมูลที่ฉันต้องการสำหรับ UI ของฉันหรือไม่
PendorPaul

มันเป็นเรื่องตลกที่มองย้อนกลับไปที่ความคิดเห็นเก่า ๆ ของฉันเมื่อ 11 เดือนที่แล้ว แต่ดูเหมือนว่าตลอดชีวิตคุณพูดถูกอย่างร่าเริงเกี่ยวกับการอ่านและการเขียน แอปพลิเคชันที่ฉันกำลังพัฒนามีการพัฒนาไปเล็กน้อยเนื่องจากความเข้าใจของฉันมีวิวัฒนาการ ตอนนี้ฉันใช้วิธีการของ CQRS ผ่าน Jimmy Bogards Mediatr ความยืดหยุ่นที่แท้จริงของการมีคำสั่งที่โต้ตอบกับ Aggregates แต่จากนั้นใช้การสืบค้นและตัวจัดการคิวรีเพื่อนำสิ่งที่ฉันต้องการสำหรับแสดงกลับมาเหลือเชื่อ ตัดคำนี้ออกเป็น Views ที่เรียกเป็น QueryHandlers เหล่านั้นและการแยกดี ๆ กับอันนี้ ขอบคุณ
PendorPaul

@PendorPaul ฉันคิดว่าฉันอยู่ที่ไหนคุณ 11 (ตอนนี้ 13) เดือนที่ผ่านมา คุณไปยังที่ที่คุณอยู่ตอนนี้
เกร็กเบลล์

1
@GregBell คุณต้องบังคับเปลี่ยนความคิด ฉันติดอยู่ในแนวทางของ "การออกแบบฐานข้อมูลสร้างระดับข้อมูลสร้างตรรกะทางธุรกิจ ... ฯลฯ " และฉันก็มุ่งเน้นไปที่การสร้างเอนทิตีที่ครอบคลุมทั้งหมด เช่น "ผลิตภัณฑ์" ในไซต์อีคอมเมิร์ซซึ่งจัดการทุกอย่างตั้งแต่การกำหนดราคาคำอธิบายสินค้าคงคลังที่ตั้งของสต็อค .... แต่นั่นกลายเป็นเรื่องที่ซับซ้อนอย่างยิ่ง วิธีบริบทที่ล้อมรอบหมายถึงในบริบทสินค้าคงคลัง "ผลิตภัณฑ์" มีข้อมูลและพฤติกรรมสำหรับการจัดการสินค้าคงคลังเท่านั้น คำอธิบายและรูปภาพได้รับการจัดการในบริบทเนื้อหาการกำหนดราคาในบริบทการกำหนดราคา
PendorPaul

1

จากมุมมองของฉันมีข้อ จำกัด ที่แตกต่างกันของ "ผลิตภัณฑ์" - บริบททุกขอบเขตมีคำจำกัดความของตัวเองของ "ผลิตภัณฑ์" - โดเมน:

  • ในการจัดการเนื้อหา - ขอบเขต - บริบทผลิตภัณฑ์มีรูปภาพและข้อความคำอธิบาย
  • ในสินค้าคงคลัง - ขอบเขต - บริบทผลิตภัณฑ์มีปริมาณสินค้า, ผู้ขายสินค้า, forcasts เมื่อผลิตภัณฑ์จะเป็น availabile
  • ใน Price-Caculation-Bounding-Context มีกฎว่าสินค้าราคาเท่าไรต่อปริมาณ

ด้านบนของสิ่งเหล่านี้ฉันจะเพิ่มShop-Bounding-Context เพิ่มเติมด้วยการกำหนดผลิตภัณฑ์เอง (การรวมกันที่เกี่ยวข้องของโดเมนผลิตภัณฑ์ของ Bounding-Contexts อื่น ๆ )

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

บริบทร้านค้าเพิ่มเติม - บริบทเพิ่มเติมนี้ขึ้นอยู่กับเนื้อหาของบริบทสินค้าคงคลังราคา


ดังนั้นคุณจะสร้างร้านค้าผลิตภัณฑ์ BC ได้อย่างไร ภายในบริบทนั้นคุณมีการอ้างอิงถึงผลิตภัณฑ์และสินค้าคงคลัง BC และคุณให้ความชุ่มชื่นจากร้านค้าที่มีอยู่ของคุณเมื่อคุณโหลด BC Store-Product แล้วเสนอคุณสมบัติที่คุณต้องการจาก BC เหล่านั้นผ่านคุณสมบัติ StoreProduct ของคุณหรือไม่ ฉันพบบทความนี้จริง ๆ ซึ่งเป็นไปตามแนวของสิ่งที่ฉันคิดเหตุการณ์ข้าม BC แต่ @ guillaume13 ข้างต้นได้ชี้ให้เห็นว่าสำหรับวัตถุประสงค์ในการแสดงผลฉันสามารถหลีกเลี่ยง BC และเพียงดึงข้อมูลที่ฉันต้องการสำหรับมุมมองของฉัน msdn.microsoft.com/en-us/magazine/dn802601.aspx
PendorPaul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.