1) คุณจะทำอย่างไรหากคุณต้องการเปลี่ยน ORMs คุณจะมีรหัส ORM เฉพาะในแอปพลิเคชันของคุณหากคุณไม่ได้เก็บไว้ในที่เก็บ
ฉันยังไม่ได้อยู่ในตำแหน่งที่ บริษัท ตัดสินใจเปลี่ยนเทคโนโลยีการเข้าถึงข้อมูลในทันที หากสิ่งนี้เกิดขึ้นต้องมีงานบางอย่าง ฉันมักจะดำเนินการเข้าถึงข้อมูลที่เป็นนามธรรมผ่านอินเทอร์เฟซ พื้นที่เก็บข้อมูลเป็นวิธีหนึ่งในการแก้ปัญหานี้
ฉันจะมีชุดประกอบที่แตกต่างกันสำหรับการใช้งานชั้นการเข้าถึงข้อมูล ตัวอย่างเช่นฉันอาจมี:
Company.Product.Data
และCompany.Product.Data.EntityFramework
ประกอบ การชุมนุมครั้งแรกจะถูกนำมาใช้อย่างหมดจดสำหรับการเชื่อมต่อเมื่ออื่นจะเป็นการใช้งานที่เป็นรูปธรรมของตรรกะการเข้าถึงข้อมูลของ Entity Framework
2) รูปแบบที่เก็บยังคงใช้ได้เมื่อไม่ใช้ ORM และคุณใช้ ADO.net สำหรับการเข้าถึงข้อมูลและการเติมข้อมูลวัตถุด้วยตัวเอง?
ฉันคิดว่ามันขึ้นอยู่กับคุณที่จะตัดสินใจว่ารูปแบบใดที่ใช้ได้หรือไม่ ฉันใช้รูปแบบที่เก็บในเลเยอร์การนำเสนอ สิ่งหนึ่งที่ต้องจำไว้คือคนชอบที่จะโยนความรับผิดชอบลงในที่เก็บ ก่อนที่คุณจะรู้คลาสของที่เก็บของคุณจะเต้นร้องเพลงและทำทุกสิ่ง คุณต้องการหลีกเลี่ยงสิ่งนี้
ฉันเห็นคลาสที่เก็บข้อมูลที่เริ่มต้นด้วยการมีความรับผิดชอบของ GetAll, GetById, Update และ Delete ซึ่งก็ดี เมื่อโครงการเสร็จสมบูรณ์ชั้นเรียนเดียวกันมีหลายวิธี (ความรับผิดชอบ) ซึ่งไม่ควรมี ตัวอย่างเช่น GetByForename, GetBySurname, UpdateWithExclusions และทุกสิ่งที่บ้าคลั่ง
นี่คือที่มาของคำค้นหาและคำสั่ง
3) ถ้าคุณใช้ ORM แต่ไม่ใช่รูปแบบพื้นที่เก็บข้อมูลคุณจะเก็บแบบสอบถามที่ใช้บ่อย จะเป็นการดีไหมถ้าจะแสดงแต่ละแบบสอบถามเป็นคลาสและมีโรงงานแบบสอบถามบางประเภทเพื่อสร้างอินสแตนซ์
ฉันคิดว่าเป็นความคิดที่ดีมากที่จะใช้คิวรีและคำสั่งแทนที่เก็บ ฉันทำต่อไปนี้:
กำหนดอินเทอร์เฟซสำหรับแบบสอบถาม สิ่งนี้จะช่วยให้คุณทดสอบหน่วย เช่นpublic interface IGetProductsByCategoryQuery { ... }
กำหนดการใช้งานที่เป็นรูปธรรมสำหรับแบบสอบถาม คุณจะสามารถฉีดสิ่งเหล่านี้ผ่านกรอบ IoC ที่คุณเลือก เช่นpublic class GetProductsByCategoryQuery : IGetProductsByCategoryQuery
ตอนนี้แทนที่จะสร้างที่เก็บข้อมูลที่มีความรับผิดชอบนับสิบฉันก็จัดกลุ่มข้อความค้นหาของฉันเป็นเนมสเปซ ตัวอย่างเช่นอินเทอร์เฟซสำหรับแบบสอบถามด้านบนอาจอาศัยอยู่: Company.SolutionName.Products.Queries
และการใช้งานอาจอยู่ในCompany.SolutionName.Products.Queries.Implementation
เมื่อพูดถึงการอัพเดทหรือลบข้อมูลฉันใช้รูปแบบคำสั่งในลักษณะเดียวกัน
บางคนอาจไม่เห็นด้วยและพูดว่าก่อนโครงการจะเสร็จสมบูรณ์คุณจะมีคลาสและเนมสเปซหลายสิบ ใช่คุณจะ. ในใจของฉันมันเป็นสิ่งที่ดีที่คุณสามารถเรียกดูวิธีการแก้ปัญหาใน IDE ที่คุณเลือกและดูได้ทันทีว่าองค์ประกอบความรับผิดชอบมีอะไรบ้าง หากคุณตัดสินใจที่จะใช้รูปแบบพื้นที่เก็บข้อมูลแทนคุณจะต้องดูภายในแต่ละพื้นที่เก็บข้อมูลชั้นพยายามที่จะทำงานออกจากความรับผิดชอบของมัน