แท้จริงแล้วความไม่รู้ความพากเพียรคืออะไร?

โดยทั่วไปแล้วความไม่รู้ที่คงอยู่นั้นถูกกำหนดให้เป็นความสามารถในการคงอยู่และดึงออบเจ็กต์ .NET มาตรฐาน (หรือ POCO หากคุณยืนกรานที่จะตั้งชื่อให้พวกเขาจริงๆ) และคำจำกัดความที่ดูเหมือนจะเป็นที่ยอมรับของวัตถุ .NET มาตรฐานก็คือ : :

"...ชั้นเรียนปกติที่คุณมุ่งเน้นไปที่ปัญหาทางธุรกิจที่มีอยู่โดยไม่ต้องเพิ่มเนื้อหาด้วยเหตุผลที่เกี่ยวข้องกับโครงสร้างพื้นฐาน..."

อย่างไรก็ตาม ฉันเห็นผู้คนอธิบายว่า NHibernate เป็นเฟรมเวิร์กที่ทำให้เกิดความเพิกเฉยได้ แต่ก็ยังเป็นเฟรมเวิร์กที่ไม่สามารถทำงานได้บนออบเจ็กต์ .NET มาตรฐาน ใดๆ เฉพาะออบเจ็กต์ .NET มาตรฐานที่เป็นไปตามข้อกำหนดการออกแบบเฉพาะเท่านั้น ตัวอย่างเช่น (แหล่งที่มา):

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

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

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

ที่ฉันมีปัญหากับคำจำกัดความของ "ความไม่รู้แบบคงอยู่"/"POCO" คือฉันไม่เห็นว่าตามแนวคิดแล้ว สิ่งนี้แตกต่างไปจากการเพิ่มแอตทริบิวต์เช่น [Serializable] หรือ [DataContract] หรือ [XmlType] หรือกรอบการคงอยู่อื่น ๆ อย่างไร -คำอธิบายประกอบเฉพาะที่ อำนวยความสะดวก การคงอยู่และการดึงข้อมูลของเอนทิตีโดยใช้กรอบงานนั้น

แล้ว "ความไม่รู้ที่คงอยู่" คืออะไรกันแน่?

คำจำกัดความที่ชัดเจนของมันว่าสามารถคงอยู่ "คลาสธรรมดา" นั้นเป็นความผิดพลาดเพราะคลาส NHibernate เป็นเพียงคลาสธรรมดาตราบเท่าที่ไม่ได้อ้างอิงคลาสเฉพาะของเฟรมเวิร์ก ในขณะที่พวกมันมีความพิเศษมากเนื่องจากพวกมันต้องการตัวเลือกการออกแบบที่ผิดปกติ เช่น ตัวสร้างเริ่มต้นและทั้งหมด - สมาชิกเสมือนและการใช้งาน Equals/GetHashCode ในประเภทที่ไม่แน่นอน

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


person Greg Beech    schedule 29.12.2009    source แหล่งที่มา
comment
อย่าสับสนกับ Persistant Ignorance - ซึ่งตรงกับบางคนที่ฉันรู้จัก ;)   -  person Amadiere    schedule 29.12.2009
comment
ข้อมูลประจำตัวของวัตถุควรทำงานอย่างไรโดยไม่ต้องเท่ากับ / gethashcode คุณช่วยยกตัวอย่างเป็นรหัสหลอกได้ไหม?   -  person Paco    schedule 29.12.2009
comment
มีใครคิดจริงๆ ว่า NHibernate (หรือ ORM อื่นๆ) เป็นโซลูชัน PI 100% หรือไม่ หัวใจของคำถาม (น่าสนใจ) คือจริงๆ แล้ว PI ตัวใดที่รบกวนการพัฒนาโมเดลโดเมนมากที่สุด   -  person Jeff Sternal    schedule 29.12.2009
comment
@Jeff - นั่นเป็นคำถามที่น่าสนใจกว่า - คุณควรถามมัน ;-) ตัวอย่างเช่น ฉันอาจโต้แย้งว่าการเพิ่มคุณลักษณะให้กับคลาสโดเมนนั้นกระทบต่อ PI น้อยกว่าการเพิ่มคลาสเพียงอย่างเดียวเพื่อทำให้ ORM มีความสุข (ซึ่งฉันต้องทำกับ FNH)   -  person Tom Bushell    schedule 29.12.2009
comment
Aee ยัง: stackoverflow.com/ คำถาม/905498/   -  person Stefan Steinegger    schedule 06.12.2017


คำตอบ (8)


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

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

person Mikeb    schedule 29.12.2009

ฉันไม่เชื่อว่าความเข้าใจ (หรือคำจำกัดความ) ของคุณเกี่ยวกับ "ความไม่คงอยู่ถาวร" ของคุณนั้นผิด

ปัญหา ของจริง คือ นามธรรมที่รั่วไหล . พูดง่ายๆ ก็คือ เทคโนโลยีที่มีอยู่ทำให้การนำ PI ที่แท้จริงไปใช้มาก

person Vijay Patel    schedule 29.12.2009

ฉันเห็นด้วยกับ Mikeb - "ความไม่รู้ที่คงอยู่" เป็นการเลื่อนระดับ ไม่ใช่คุณสมบัติจริง/เท็จของ ORM ที่กำหนด

คำจำกัดความของ PI ที่แท้จริง 100% ของฉันคือคุณสามารถคงคลาส POCO ใด ๆ ที่เป็นไปได้ได้ ไม่ว่าจะซับซ้อนและเชื่อมโยงกับคลาสอื่นเพียงใดก็ตาม โดยไม่ต้องเปลี่ยนคลาส แต่อย่างใด

การเพิ่มฟิลด์ ID, การตกแต่งด้วยแอตทริบิวต์, สืบทอดมาจากคลาส ORM, ต้องออกแบบคลาสของคุณเพื่อให้แมปกับตารางพื้นฐานใน RDB ได้ดี - ทั้งหมดนี้ลด "คะแนน PI" ให้ต่ำกว่า 100%

ตามที่กล่าวมา ฉันเลือกใช้ Fluent NHibernate Automapping เนื่องจากดูเหมือนว่าจะมีคะแนน PI สูงสุดในบรรดาตัวเลือก ORM ใดๆ ที่ฉันเคยดู

person Tom Bushell    schedule 29.12.2009
comment
ตกลง +1 - ไม่มีวิธีแก้ปัญหา PI 100% ดังนั้นคุณต้องถามตัวเองด้วยคำถามที่ Jeremy Miller โพสต์ในบทความของเขา (อ้างถึงในคำถาม): ตรรกะทางธุรกิจสามารถทำงานได้อย่างอิสระจากฐานข้อมูลหรือไม่ ฉันสามารถออกแบบโดเมนของฉันได้หรือไม่ สร้างแบบจำลองโดยแยกจากโมเดลฐานข้อมูล และกลยุทธ์การคงอยู่ของฉันส่งผลต่อตรรกะทางธุรกิจของฉันอย่างไร - person Jeff Sternal; 29.12.2009

คลาสที่ไม่รู้แบบถาวรคือคลาสที่ไม่เชื่อมโยงกับกรอบการคงอยู่

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

person Frederik Gheysels    schedule 29.12.2009
comment
@Frederik - ตามคำจำกัดความนั้นคุณกำลังบอกว่า NHibernate ไม่สนับสนุนความไม่รู้ที่คงอยู่ใช่ไหม ราวกับว่าคลาสไม่ต้องการคอนสตรัคเตอร์เริ่มต้นสำหรับการใช้งานปกติ คลาสนั้นจะต้องยังคงมีคลาสเพียงอันเดียวเนื่องจากความรู้เกี่ยวกับข้อกำหนดของเฟรมเวิร์กการคงอยู่ - person Greg Beech; 29.12.2009
comment
NHib ยังต้องการให้คุณสมบัติ ฯลฯ ได้รับการประกาศเป็นเสมือน แต่ฉันจะไม่พูดว่าสิ่งนี้ส่งผลกระทบต่อความไม่รู้จริงๆ เนื่องจากข้อกำหนดนั้นน้อยมากและไม่ส่งผลกระทบต่อการออกแบบของคุณเลย - person UpTheCreek; 29.12.2009
comment
@Greg: ไม่ ฉันไม่ได้พูดอย่างนั้น ฉันกำลังบอกว่าความไม่รู้ของการคงอยู่คือ ถ้าชั้นเรียนของคุณไม่จำเป็นต้องมี 'การอ้างอิง' ไปยังกรอบการคงอยู่นั้น ที่จริงแล้ว ความจริงที่ว่าคุณต้องการคอนสตรัคเตอร์เริ่มต้น (ซึ่งสามารถเป็นแบบส่วนตัวได้) นั้นเป็นความผิดพลาด แต่นั่นไม่ได้หมายความว่ามันไม่คงอยู่โดยไม่รู้ - person Frederik Gheysels; 29.12.2009
comment
@Sosh: ผิด NH ไม่ต้องการให้ประกาศคุณสมบัติเป็นเสมือน ฉันใช้ NH ทุกวัน และฉันเกลียดความจริงที่ว่าฉันต้องการคุณสมบัติเสมือนหากซีแมนทิกส์ไม่ต้องการสิ่งนั้น ดังนั้นฉันจึงสร้างคุณสมบัติเสมือนหากจำเป็นเท่านั้น เมื่อคุณระบุว่า NH ไม่ควรใช้พร็อกซีแบบไดนามิก คุณไม่จำเป็นต้องมีอุปกรณ์ประกอบฉากเสมือน - person Frederik Gheysels; 29.12.2009
comment
@Frederik - ฉันจะพูดถูกไหมว่าคุณเชื่อว่าคลาสนั้นไม่มีความรู้อย่างต่อเนื่องหากไม่มี 'การอ้างอิง' ไปยังกรอบงานการคงอยู่เฉพาะแม้ว่าจะมีการเปลี่ยนแปลงการออกแบบที่สำคัญซึ่งได้รับผลกระทบจากความจำเป็นในการทำงานกับ กรอบงานเฉพาะ (เช่น ตัวสร้างเริ่มต้นที่บังคับ สมาชิกเสมือนสำหรับการโหลดแบบขี้เกียจ ล้มล้าง Equals/GetHashCode เพื่อความเท่าเทียมกันของข้อมูลประจำตัว) จะเกิดอะไรขึ้นหากเฟรมเวิร์กอื่นจำเป็นต้องใช้ Equals/GetHashCode ที่แตกต่างกัน (เช่น เพื่อความเท่าเทียมกันของสมาชิกทั้งหมด) ดังนั้นอ็อบเจ็กต์ของคุณจึงไม่สามารถทำงานได้ตามที่เขียนไว้สำหรับ NHibernate ความพากเพียรนั้นยังไม่รู้ตัวอีกหรือ? - person Greg Beech; 30.12.2009
comment
สำหรับฉัน NH เป็นคนไม่มีความรู้เนื่องจาก NH ไม่ต้องการให้สมาชิกของคุณเป็นเสมือน (คุณเพียงแค่ต้องอยู่กับ 'ข้อเสีย' ของการไม่มีพรอกซีแบบไดนามิก แต่ฉันให้ความสำคัญกับซีแมนทิกส์สูงกว่าประสิทธิภาพที่คุณได้รับจาก dyn ผู้รับมอบฉันทะ) นอกจากนั้น ตัวสร้างเริ่มต้นที่บังคับนั้นเป็นอาร์กิวเมนต์ที่คุณสามารถใช้ว่า NH ไม่ใช่ PI ได้ แต่คุณสามารถแก้ไขได้โดยการจัดเตรียมตัวสร้างเริ่มต้นส่วนตัว (หรือป้องกัน) เมื่อเปรียบเทียบกับกรอบความคงทนอื่น ๆ ที่ต้องการ ฉันคิดว่า NH ค่อนข้างไม่ใส่ใจใช่ - person Frederik Gheysels; 30.12.2009

ฉันเห็นด้วยกับคำจำกัดความของคุณ:

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

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

person djna    schedule 29.12.2009
comment
@djna - ฉันได้อัปเดตคำจำกัดความของฉันเพื่อให้ชัดเจนยิ่งขึ้นว่าฉันเชื่อว่าคลาสที่ตกแต่งด้วยคำอธิบายประกอบเฉพาะเฟรมเวิร์กจะยังถือว่าเพิกเฉยต่อความคงอยู่ เนื่องจากฉันรู้ว่าการอ่านคำตอบของคุณนั้นอาจไม่ชัดเจน ดูเหมือนว่าคุณจะยังคงเห็นด้วยกับคำจำกัดความนั้น แม้ว่าคุณกำลังพิจารณาเฉพาะโค้ดที่ปฏิบัติการได้ ไม่ใช่เมตาดาต้า - person Greg Beech; 29.12.2009
comment
ฉันเห็นด้วย โดยสมมติว่าเราสามารถเรียกใช้โค้ดได้โดยไม่รบกวนข้อมูลเมตา - person djna; 29.12.2009

แม้ว่าอาจมีข้อจำกัดเล็กๆ น้อยๆ บางประการที่กรอบการทำงานเกี่ยวกับการคงอยู่-ความไม่รู้ใดๆ กำหนดไว้ แต่การคงอยู่-ความไม่รู้นั้นยังคงมีอยู่

ในขณะที่คลาสในรูปแบบโดเมนของคุณ (คงอยู่อย่างโปร่งใสด้วย NHibernate) จะต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์เพื่อที่จะสามารถสร้าง "ไดนามิก" ได้ แต่ก็ไม่จำเป็นต้องมีคลาสพื้นฐานบางอย่างที่กำหนดโดยเฟรมเวิร์กและไม่จำเป็นต้องมี หรือแทนที่วิธีการระบุกรอบงานบางอย่าง

person yfeldblum    schedule 29.12.2009
comment
@Justice - ดูเหมือนว่าคุณเพิ่งระบุคำถามของฉันอีกครั้ง คุณเห็นข้อจำกัดในโครงสร้างและการออกแบบออบเจ็กต์เพื่ออำนวยความสะดวกในการใช้เฟรมเวิร์กอย่างไร โดยมีความแตกต่างทางแนวคิดกับการใช้คำอธิบายประกอบเพื่ออำนวยความสะดวกในการใช้เฟรมเวิร์กอย่างไร - person Greg Beech; 29.12.2009
comment
ข้อจำกัดที่กำหนดโดย ORM ที่ไม่คงอยู่อย่างไม่ใส่ใจ เช่น NHibernate มีจำนวนมากกว่าข้อจำกัดที่กำหนดโดยการทำให้เป็นอนุกรมบวกกับการเขียนโปรแกรมเชิงแง่มุมเล็กน้อย (โดยที่เราถือว่าการคงอยู่เป็นเพียงอีกแง่มุมหนึ่งที่ใช้การทำให้เป็นอนุกรม) - person yfeldblum; 29.12.2009
comment
@Justice - ฉันไม่ชัดเจนว่าคุณกำลังบอกว่าแนวคิดนั้นแตกต่างไปจากการพูด การทำให้อนุกรมรันไทม์ต้องใช้แอตทริบิวต์ [Serializable] หรือการทำให้เป็นอนุกรมสัญญาข้อมูลที่ต้องใช้แอตทริบิวต์ [DataContract] หรือไม่ เป็นข้อจำกัดในทำนองเดียวกันที่เอื้อต่อกรอบงานการทำให้เป็นอนุกรมประเภทหนึ่ง - person Greg Beech; 29.12.2009
comment
ทั้ง [Serializable] และ [DataContract] ทำให้กลไกการทำให้ซีเรียลไลซ์ทั่วไปทำงานได้ สิ่งเหล่านี้เป็นคลาสเฉพาะจากกรอบงานเฉพาะ คลาสที่ไม่มีตัวสร้างอาร์กิวเมนต์เนื่องจากการทำให้เป็นอนุกรม เลย ต้องการตัวสร้างที่ไม่มีอาร์กิวเมนต์ยังคงสามารถเพิกเฉยต่อการทำให้เป็นอนุกรมได้ แต่คลาสที่มีแอ็ตทริบิวต์ [Serializable] จะไม่ถูกเพิกเฉยต่อซีเรียลไลเซชันอีกต่อไป และคลาสต่างๆ ก็ไม่ใช้งาน ISerializable - person yfeldblum; 29.12.2009
comment
@Justice - [Serializable] อำนวยความสะดวกให้กับกลไกการทำให้เป็นอนุกรมทั่วไปอย่างแน่นอน มันไม่มีอะไรมากไปกว่าแบบแผนในการระบุว่าคุณกำลังอนุญาตให้ซีเรียลไลซ์ของคลาส คุณจะสังเกตเห็นว่ากรอบงาน .NET มีการใช้งานฟอร์แมตเตอร์ที่แตกต่างกันซึ่งใช้แอตทริบิวต์นี้ (ไบนารีสองตัวและ XML หนึ่งตัว) สำหรับฉันแล้ว การเปลี่ยนแปลงพฤติกรรมของคลาสน้อยกว่าการเพิ่มตัวสร้างเนื่องจากเป็นเมตาดาต้า ไม่ใช่โค้ดที่ปฏิบัติการได้ - person Greg Beech; 30.12.2009
comment
(นอกจากนี้ การทำให้เป็นอนุกรม เลย ไม่จำเป็นต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ คุณสามารถเรียก FormatterServices.GetUninitializedObject จากแอสเซมบลีที่เชื่อถือได้อย่างสมบูรณ์ ซึ่งเป็นสิ่งที่คลาส IFormatter ทำ ดังนั้นการมีตัวสร้างเริ่มต้นสำหรับการทำให้เป็นอนุกรม วัตถุประสงค์เพียงอย่างน้อยก็ในระดับหนึ่งเท่านั้นที่เป็นการรับทราบถึงการมีอยู่ของการทำให้เป็นอนุกรมบางประเภทที่จำเป็นต้องใช้ เพราะไม่ใช่ทั้งหมดทำ และด้วยเหตุนี้จึงไม่สามารถพูดได้ว่าคลาสนั้นเพิกเฉยต่อการทำให้เป็นอนุกรมอย่างแท้จริง IMHO) - person Greg Beech; 30.12.2009

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

person Klaus Byskov Pedersen    schedule 29.12.2009
comment
ฉันไม่เห็นด้วยทั้งหมด คุณสามารถมีคลาสโดเมนที่ดึงข้อมูลผ่านนามธรรมเช่นพื้นที่เก็บข้อมูล แต่นั่นไม่ใช่ PI เป็นไปได้ว่าเฟรมเวิร์กการคงอยู่ที่คุณใช้เช่น ต้องการให้คลาสโดเมนของคุณสืบทอดมาจากคลาสพื้นฐานบางตัวที่กำหนดโดยเฟรมเวิร์กการคงอยู่ - person Frederik Gheysels; 29.12.2009

คุณสามารถใช้คลาสสำหรับโดเมนหรือแอปพลิเคชันของคุณและคลาส POCO ในการคงอยู่ เมื่อคุณจะคงอยู่วัตถุโดเมนจะแมปมันลงในคลาสการคงอยู่ของคุณและใช้วัตถุการคงอยู่เพื่อจัดเก็บด้วย nhibernate หรือกรอบงานอื่น ๆ

คลาสโดเมนของคุณจะต้องเพิกเฉยต่อวิธีการคงข้อมูล ดังนั้นคุณจะต้องไม่รวมกฎใด ๆ ของเฟรมเวิร์กการคงอยู่เช่น (ตัวสร้างว่าง คุณสมบัติเสมือน ฯลฯ )

กฎกรอบการคงอยู่เหล่านี้สามารถอยู่ในคลาสการคงอยู่ของคุณ

person Miguel Caravantes    schedule 04.07.2018