ฉันเห็นคำนี้มากในบริบทของสถาปัตยกรรมซอฟต์แวร์ ("แบบจำลองโดเมน", "การออกแบบโดยใช้โดเมน" เป็นต้น) ฉันทำไปแล้ว แต่ได้คำจำกัดความที่แตกต่างกันมากมาย แล้วมันคืออะไร
ฉันเห็นคำนี้มากในบริบทของสถาปัตยกรรมซอฟต์แวร์ ("แบบจำลองโดเมน", "การออกแบบโดยใช้โดเมน" เป็นต้น) ฉันทำไปแล้ว แต่ได้คำจำกัดความที่แตกต่างกันมากมาย แล้วมันคืออะไร
คำตอบ:
คำว่า "domain" ในหนังสือ Domain Driven Design โดย Eric Evans มีความหมายเฉพาะ มันเป็นสิ่งที่ซอฟต์แวร์เกี่ยวกับ
อีแวนส์เดินหน้าต่อไป ในมุมมองของเขามีโดเมนย่อยแม้จะมีซอฟต์แวร์เดียวกัน และนี่คือส่วนหนึ่งของหนังสือที่เกี่ยวข้องกับ“ การออกแบบเชิงกลยุทธ์”
มี "โดเมน" สามรายการ: โดเมนหลักโดเมนสนับสนุนและโดเมนทั่วไป บางครั้งเขาจะอ้างถึงสิ่งเหล่านี้ว่าเป็นโดเมนย่อย
อีแวนส์ยังให้ความสำคัญกับธุรกิจที่แท้จริงของซอฟต์แวร์และหนังสือเล่มนี้ไม่ได้มุ่งเน้นเฉพาะนักพัฒนาเท่านั้น แต่ยังรวมถึงสถาปนิกและผู้จัดการที่ต้องการดูว่าซอฟต์แวร์และธุรกิจสามารถทำงานร่วมกันได้อย่างไรและนั่นคือสิ่งที่เขากังวล และโดเมนย่อยเหล่านี้
ดังนั้นโดเมนหลักเป็นส่วนหนึ่งของซอฟต์แวร์ที่แสดงถึงความได้เปรียบในการแข่งขันและ "raison d'etre" ของซอฟต์แวร์ เป็นส่วนหนึ่งของซอฟต์แวร์ที่เป็นสาเหตุให้ลูกค้าซื้อซอฟต์แวร์กับซอฟต์แวร์อื่น ๆ โดยปกติแล้ว Evans เห็นว่าเป็นโดเมนที่มีรหัสน้อยที่สุด คุณคิดว่ามันสำคัญที่สุด 20% เป็นส่วนที่คุณไม่สามารถซื้อจากชั้นวางได้จริงและอาจเป็นเพียงโมดูลเดียวหรือส่วนประกอบของซอฟต์แวร์โดยรวม
โดเมนการสนับสนุนยังคงมีความสำคัญและอาจไม่ซ้ำกับองค์กร แต่ไม่สำคัญเท่ากับโดเมนหลัก ไม่ว่าซอฟต์แวร์จะไม่มีค่าและหลักจะอาศัย อาจเป็นโมดูลหลายตัวในซอฟต์แวร์ที่คุณเขียนด้วยตัวเองและทำหน้าที่สำคัญ แต่สนับสนุนฟังก์ชั่นหลัก
โดเมนทั่วไปเป็นแบบกำหนดเองได้น้อยที่สุดและในบางแง่ก็เป็นส่วนที่สำคัญที่สุดของซอฟต์แวร์ คุณอาจเขียนมันเอง แต่อาจจะมีประสิทธิภาพมากกว่าที่จะซื้อมันออกมาจากชั้นวางหรือใช้ซอฟต์แวร์โอเพ่นซอร์สที่รู้จักกันดี ส่วนนี้ของระบบอาจไม่เฉพาะเจาะจงกับโดเมนโดยรวมของคุณดังนั้นตัวอย่างเช่นคุณมีระบบการจัดส่งที่กำหนดเส้นทางพัสดุหรือระบบบันทึกสุขภาพที่จัดการผู้ป่วยโดเมนทั่วไปเป็นส่วนหนึ่งของระบบเหล่านี้ที่ใช้กันทั่วไปและเพียงแค่ เพียงแค่ต้องอยู่ที่นั่นเพื่อทำงานทั้งหมด สิ่งนี้อาจทำให้ภาพรวมของระบบเป็นจำนวนมาก แต่ก็ไม่จำเป็น
จากมุมมองทางธุรกิจสิ่งสำคัญคือการตัดสินใจว่าโดเมนหลักของคุณคืออะไรและเพื่อมุ่งเน้นทรัพยากรการพัฒนาของคุณที่นั่น Evans มีวิดีโอมากมายโดยเฉพาะบนไซต์ InfoQ ซึ่งเขาอธิบายแนวคิดเหล่านี้อย่างละเอียดมากขึ้น
ดังนั้นในขณะที่เรามักพูดถึง "โดเมน" ในซอฟต์แวร์ในกรณีของ DDD มันไม่ง่ายอย่างที่คิด
ฉันควรทราบว่าแนวคิดของ DDD ไม่จำเป็นต้องมีอยู่ในชุมชนซอฟต์แวร์ที่กว้างขึ้น นักพัฒนาผู้เขียนและคนผลิตภัณฑ์อื่น ๆ อาจมีแนวคิดและคำจำกัดความที่ต่างกันบ้างก็มีความละเอียดอ่อนและมีความแตกต่างกันบ้างเล็กน้อย แม้แต่ผู้แต่งคนอื่น ๆ ที่เขียนเกี่ยวกับ DDD อาจปัดความคิดเหล่านี้ในหนังสือของ Evans แต่ฉันรู้สึกว่าแนวคิดยังคงมีประโยชน์เมื่อเขียนและวางแผนโครงการซอฟต์แวร์
โดเมนเป็นบริบทโลกแห่งความจริงในที่ที่คุณกำลังพยายามที่จะแก้ปัญหาในการใช้ซอฟแวร์ แต่ละโดเมนมาพร้อมกับความเชี่ยวชาญคำศัพท์และเครื่องมือที่เป็นส่วนหนึ่งของโดเมนนั้น
ตัวอย่างที่เฉพาะเจาะจงของโดเมนอาจเป็นเช่น "การตัดเฉือนอัตโนมัติของชิ้นส่วนที่ซับซ้อนโดยใช้คัตเตอร์หมุนความเร็วสูง" ซอฟแวร์และฮาร์ดแวร์ระบบที่สำเร็จนี้จะเรียกว่าซีเอ็นซี โรงงาน
อีกตัวอย่างของโดเมนคือแผนกบัญชีที่ บริษัท
อ่านเพิ่มเติม
บริบท จำกัด โดย Martin Fowler
มันหมายถึงพื้นที่ปัญหาที่คุณกำลังทำงานตัวอย่างเช่นถ้าคุณกำลังสร้างเว็บไซต์อีคอมเมิร์ซโดเมนของคุณจะเป็น "e-commerce" และจะเกี่ยวข้องกับกระบวนการที่เกี่ยวข้องกับแนวทางปฏิบัติด้านการขายของลูกค้า / บริษัท ของคุณ ดังนั้นรูปแบบโดเมนจะเป็นสิ่งที่แสดงถึงผลิตภัณฑ์หรือใบแจ้งหนี้หรือบันทึกการจัดส่ง
domain names
รู้จักกันว่าโดเมนฉันคิดว่าคุณควรอธิบายให้ชัดเจนว่าคุณใช้คำว่าโดเมนได้อย่างไร
โดเมนเป็นพื้นที่ของความรู้ อาจเป็นกิจกรรมที่ซอฟต์แวร์ของคุณมีปัญหาแก้ไขได้ ( Wiki , ชุมชน DDD )
Eric Evans ในหนังสือของเขาใช้การขนส่งสินค้าเพื่ออธิบายว่า DDD คืออะไร ในตัวอย่างของโดเมนคือทุกอย่างเกี่ยวกับการจัดส่งสินค้า วิธีการเคลื่อนย้ายการจัดการการขนส่งการจัดส่งและการติดตามสินค้าเป็นต้นมาพร้อมกับกฎเฉพาะภาษาและกระบวนการของตัวเอง สิ่งเหล่านั้นจะสร้างโมเดลโดเมนวัตถุบริการและอื่น ๆ
เมื่อคุณสร้างแอปพลิเคชั่นคุณจะได้รับอนุญาตเช่นเดียวกับโลกแห่งการจัดส่งจริง ๆ ทุกคนไม่สามารถเข้าถึงคลังสินค้าได้ วิธีการที่ผู้ใช้ได้รับอนุญาตและวิธีการให้สิทธิ์สามารถอยู่นอก โดเมนได้เนื่องจากข้อมูลอาจไม่เกี่ยวข้องกับการขนส่งสินค้า
เพียงแค่ใส่ที่: โดเมนคือที่ที่คุณทำธุรกิจ หากธุรกิจของคุณคือการขนส่งสินค้า - การจัดส่งสินค้าจะเป็นโดเมนของคุณ หากธุรกิจของคุณอยู่ในการรับรองความถูกต้องและอนุญาตบุคลากรนี่จะเป็นโดเมนของคุณ
จากการออกแบบที่ขับเคลื่อนด้วยโดเมน: การแก้ปัญหาความซับซ้อนในใจกลางของซอฟต์แวร์ Eric Evans:
ทุกโปรแกรมซอฟต์แวร์เกี่ยวข้องกับกิจกรรมหรือความสนใจของผู้ใช้ หัวข้อที่ผู้ใช้ใช้โปรแกรมนั้นเป็นโดเมนของซอฟต์แวร์
โดเมนของโปรแกรมการจองสายการบินเกี่ยวข้องกับคนจริงที่ได้รับบนเครื่องบินจริง
โดเมนของโปรแกรมบัญชีคือเงินและการเงิน
โดเมนของระบบควบคุมซอร์สโค้ดคือการพัฒนาซอฟต์แวร์เอง
รูปแบบโดเมนนั้นคือ "การจัดระเบียบอย่างเข้มงวดและการเลือกเฉพาะของ" ความรู้ในหัวของผู้เชี่ยวชาญด้านโดเมน
ปาแลร์โมในการอธิบายสถาปัตยกรรมหัวหอมเสนอสรุปนี้
ในศูนย์เราจะเห็นรูปแบบโดเมนซึ่งแสดงถึงการรวมกันของรัฐและพฤติกรรมที่เป็นแบบจำลองความจริงสำหรับองค์กร
ฟาวเลอร์ก็หันมาเสนอ
โมเดลวัตถุของโดเมนที่รวมทั้งพฤติกรรมและข้อมูล
หากคุณกำลังมองหาที่คำจำกัดความเมื่อเร็ว ๆ นี้คุณมีแนวโน้มที่จะใช้เป็นข้อมูลอ้างอิงว่ารูปแบบโดเมนและรูปแบบข้อมูลที่แตกต่างกัน ฉันไม่คิดว่าการเปลี่ยนแปลงความหมายมากเท่ากับการเปลี่ยนการเน้น - การทำแบบจำลองพฤติกรรม (วิธีการที่ข้อมูลเปลี่ยนแปลงในการตอบสนองต่อข้อมูลจากโมเดลภายนอก) มีความซับซ้อนและการเปลี่ยนแปลงที่หลากหลายยิ่งกว่าวิธีการเขียนสิ่งต่าง ๆ .
เนื่องจากคุณอาจมีความคิดว่าโดเมนคืออะไรฉันเดาว่าขั้นตอนต่อไปที่คุณจะทำคือพยายามกำหนดโดเมนย่อยแบบจำลองโดเมนและที่สำคัญกว่านั้นคือบริบทที่มีขอบเขต
ฉันเริ่มต้นด้วยการวางมุมมองของโดเมนแม้ว่า
โดเมนคือความจริงที่เราอาศัย: เอนทิตี้ของมันพฤติกรรมของพวกเขากฎหมายที่พวกเขาเชื่อฟัง มันมีอยู่ก่อนเราและจะมีอยู่หลังจากเราในรูปแบบเดียวหรืออื่น การดำรงอยู่ของมันไม่ได้ขึ้นอยู่กับการรับรู้ของเรา นักการตลาดมาพร้อมกับคุณสมบัติใหม่และดำเนินการวิเคราะห์ตลาดผู้จัดการบัญชีหลักสื่อสารกับลูกค้านักพัฒนาซอฟต์แวร์อัตโนมัติกระบวนการทางธุรกิจ นั่นเป็นสาเหตุที่โดเมนถูกเรียกว่าพื้นที่ปัญหา
DDD หมายถึงการย่อยสลายโดเมนในโดเมนย่อยเพื่อความสะดวกในการสร้างแบบจำลองและความเข้าใจ ข้อเท็จจริงที่ว่าคุณดำเนินธุรกิจ infers ว่ามีมูลค่าทางธุรกิจอย่างน้อยหนึ่งค่า คนที่คุณหารายได้ด้วย คนที่เราเริ่มต้นธุรกิจของเรา ดังนั้นแม้ว่าคุณจะไม่รู้จักคำเช่น“ โดเมนหลัก” แต่ก็ยังมีอยู่ เช่นเดียวกับโดเมนย่อย: อาจเป็นไปได้ว่าคุณต้องมีการทำบัญชีทรัพยากรมนุษย์การสนับสนุนด้านเทคนิค - แต่มันก็เป็นเรื่องรอง
ไม่จำเป็นต้องมีการสร้างแบบจำลองการแยกโดเมนย่อยทั้งหมด มีกฎบางชุดในแต่ละโดเมนย่อยที่เราสนใจกฎที่กำหนดในโดเมนย่อยบางอย่างที่จำเป็นเพื่อให้บรรลุผลทางธุรกิจบางอย่างเรียกว่าแบบจำลอง
สิ่งที่สำคัญที่สุดคือบริบทที่มีขอบเขตเป็นขอบเขตตรรกะ
เมื่อกำหนดทั้งโดเมนย่อยและโดเมนหลักแล้วก็ถึงเวลาที่ต้องใช้รหัส บริบทที่ถูกกำหนดจะกำหนดขอบเขตที่เป็นรูปธรรมของการบังคับใช้ของบางโดเมนย่อย เป็นพื้นที่ที่โดเมนย่อยบางแห่งมีเหตุผลในขณะที่บางโดเมนไม่เหมาะสม มันสามารถพูดคุยนำเสนอโครงการรหัสที่มีขอบเขตทางกายภาพที่กำหนดโดยสิ่งประดิษฐ์
หากคุณสนใจว่าแนวคิดบริบทที่มีขอบเขตสัมพันธ์กับแนวคิดโดเมนย่อยอย่างไรวิธีกำหนดโดเมนย่อยและบริบทที่ล้อมรอบวิธีแสดงการสื่อสารกับแต่ละอื่น ๆ และวิธีจัดระเบียบทีมด้วยแนวคิดเหล่านี้คุณอาจสนใจสิ่งนี้อ่านเพิ่มเติม