คำถามติดแท็ก repository-pattern

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

10
รูทรวมคืออะไร
ฉันพยายามเข้าใจวิธีการใช้รูปแบบที่เก็บอย่างถูกต้อง แนวคิดหลักของ Aggregate Root นั้นกำลังจะเกิดขึ้น เมื่อค้นหาทั้งเว็บและ Stack Overflow เพื่อขอความช่วยเหลือในสิ่งที่รูทรวมคือฉันจะค้นหาการสนทนาเกี่ยวกับพวกเขาและลิงก์ที่เชื่อมโยงไปยังเพจที่ควรจะมีคำจำกัดความพื้นฐาน ในบริบทของรูปแบบที่เก็บรูทรวมคืออะไร

11
รูปแบบ DAO และ Repository แตกต่างกันอย่างไร
อะไรคือความแตกต่างระหว่าง Data Access Objects (DAO) และรูปแบบ Repository ฉันกำลังพัฒนาแอปพลิเคชันที่ใช้ Enterprise Java Beans (EJB3), Hibernate ORM เป็นโครงสร้างพื้นฐานและ Domain-Driven Design (DDD) และ Test-Driven Development (TDD) เป็นเทคนิคการออกแบบ

10
ออกแบบพื้นที่เก็บข้อมูลที่เหมาะสมใน PHP?
คำนำ: ฉันกำลังพยายามใช้รูปแบบที่เก็บในสถาปัตยกรรม MVC กับฐานข้อมูลเชิงสัมพันธ์ ฉันเพิ่งเริ่มเรียนรู้ TDD ใน PHP และฉันรู้ว่าฐานข้อมูลของฉันอยู่ใกล้มากเกินไปกับส่วนที่เหลือของแอปพลิเคชันของฉัน ฉันอ่านเกี่ยวกับที่เก็บและใช้คอนเทนเนอร์ IoCเพื่อ "ฉีด" ลงในคอนโทรลเลอร์ของฉัน สิ่งที่เจ๋งมาก แต่ตอนนี้มีคำถามเชิงปฏิบัติเกี่ยวกับการออกแบบพื้นที่เก็บข้อมูล พิจารณาตัวอย่างต่อไปนี้ <?php class DbUserRepository implements UserRepositoryInterface { protected $db; public function __construct($db) { $this->db = $db; } public function findAll() { } public function findById($id) { } public function findByName($name) { } public function create($user) …

5
ความแตกต่างระหว่างพื้นที่เก็บข้อมูลและชั้นบริการ?
ในรูปแบบการออกแบบ OOP ความแตกต่างระหว่างรูปแบบพื้นที่เก็บข้อมูลและชั้นบริการคืออะไร ฉันกำลังทำงานกับแอพ ASP.NET MVC 3 และพยายามที่จะเข้าใจรูปแบบการออกแบบเหล่านี้ แต่สมองของฉันไม่เข้าใจเลย ... ยัง !!

12
DDD - กฎที่เอนทิตีไม่สามารถเข้าถึงที่เก็บโดยตรง
ในการขับเคลื่อนโดเมนออกแบบดูเหมือนว่าจะมีจำนวนมากของข้อตกลงที่หน่วยงานที่เก็บไม่ควรเข้าถึงโดยตรง สิ่งนี้มาจากหนังสือของ Eric Evans Domain Driven Designหรือมาจากที่อื่นหรือไม่ มีคำอธิบายที่ดีสำหรับเหตุผลอยู่เบื้องหลังที่ไหน? แก้ไข: เพื่อชี้แจง: ฉันไม่ได้พูดถึงวิธีปฏิบัติแบบ OO แบบคลาสสิกของการแยกการเข้าถึงข้อมูลออกเป็นเลเยอร์แยกต่างหากจากตรรกะทางธุรกิจ - ฉันกำลังพูดถึงการจัดเรียงเฉพาะโดยที่ DDD หน่วยงานไม่ควรพูดคุยกับข้อมูล access layer เลย (เช่นพวกเขาไม่ควรจะเก็บการอ้างอิงไปยังวัตถุ Repository) อัปเดต: ฉันให้รางวัลแก่ BacceSR เพราะคำตอบของเขาดูใกล้เคียงที่สุด แต่ฉันก็ยังค่อนข้างมืดอยู่กับเรื่องนี้ หากเป็นหลักการสำคัญเช่นนั้นควรมีบทความดีๆเกี่ยวกับเรื่องนี้ออนไลน์ที่ไหนสักแห่งใช่ไหม? อัปเดต: มีนาคม 2556 จำนวนผู้โหวตในคำถามบ่งบอกว่ามีความสนใจในเรื่องนี้มากมายและถึงแม้ว่าจะมีคำตอบมากมาย แต่ฉันก็ยังคิดว่าจะมีช่องว่างมากขึ้นถ้าผู้คนมีความคิดเกี่ยวกับเรื่องนี้

3
แหล่งเก็บข้อมูลทั่วไปด้วย EF 4.1 ประเด็นคืออะไร
เมื่อฉันขุดลึกลงไปใน DbContext, DbSet และอินเทอร์เฟซที่เกี่ยวข้องฉันสงสัยว่าทำไมคุณต้องใช้พื้นที่เก็บข้อมูล "Generic" แยกต่างหากรอบ ๆ การใช้งานเหล่านี้? ดูเหมือนว่า DbContext และ IDbSet จะทำทุกสิ่งที่คุณต้องการและรวมถึง "หน่วยงาน" ใน DbContext ฉันขาดอะไรบางอย่างที่นี่หรือดูเหมือนว่าผู้คนจะเพลิดเพลินกับการเพิ่มการพึ่งพาอีกชั้นหนึ่งโดยไม่มีเหตุผล

4
การจัดการความสัมพันธ์ใน Laravel โดยยึดตามรูปแบบพื้นที่เก็บข้อมูล
ขณะสร้างแอปใน Laravel 4 หลังจากอ่านหนังสือของ T. Otwell เกี่ยวกับรูปแบบการออกแบบที่ดีใน Laravel ฉันพบว่าตัวเองกำลังสร้างที่เก็บสำหรับทุกตารางบนแอปพลิเคชัน ฉันลงเอยด้วยโครงสร้างตารางต่อไปนี้: นักเรียน: id, name หลักสูตร: id, name, teacher_id ครู: id, name Assignments: id, name, course_id คะแนน (ทำหน้าที่เป็นตัวหมุนระหว่างนักเรียนและงาน): student_id, assignment_id, คะแนน ฉันมีคลาสที่เก็บที่มีวิธีการค้นหาสร้างอัปเดตและลบสำหรับตารางเหล่านี้ทั้งหมด แต่ละที่เก็บมีแบบจำลองที่มีประสิทธิภาพซึ่งโต้ตอบกับฐานข้อมูล ความสัมพันธ์ที่กำหนดไว้ในรูปแบบเอกสารต่อ Laravel ของ: http://laravel.com/docs/eloquent#relationships เมื่อสร้างหลักสูตรใหม่สิ่งที่ฉันทำคือเรียกใช้เมธอด create บน Course Repository หลักสูตรนั้นมีงานมอบหมายดังนั้นเมื่อสร้างหลักสูตรฉันจึงต้องการสร้างรายการในตารางคะแนนสำหรับนักเรียนแต่ละคนในหลักสูตรด้วย ฉันทำสิ่งนี้ผ่าน Assignment Repository ซึ่งหมายความว่าที่เก็บงานมอบหมายจะสื่อสารกับโมเดล Eloquent สองแบบโดยใช้โมเดล Assignment และ Student …

1
ความแตกต่างระหว่างโรงงานผู้ให้บริการและบริการ?
อะไรคือความแตกต่างระหว่างเงื่อนไขโรงงานผู้ให้บริการและบริการ? เพียงแค่เข้าสู่ NHibernate และรูปแบบพื้นที่เก็บข้อมูล (คลาส POCO ฯลฯ )

1
ที่เก็บข้อมูล Spring ถูกนำไปใช้จริงอย่างไร?
ฉันทำงานกับที่เก็บ Spring Data JPA ในโครงการของฉันมาระยะหนึ่งแล้วและฉันรู้ประเด็นด้านล่าง: ในอินเทอร์เฟซที่เก็บเราสามารถเพิ่มเมธอดเช่นfindByCustomerNameAndPhone()(สมมติว่าcustomerNameและphoneเป็นฟิลด์ในอ็อบเจ็กต์โดเมน) จากนั้น Spring จัดเตรียมการนำไปใช้โดยการนำเมธอดอินเทอร์เฟซที่เก็บข้อมูลข้างต้นไปใช้ที่รันไทม์ (ระหว่างการรันแอปพลิเคชัน) ฉันสนใจว่ารหัสนี้ถูกเข้ารหัสอย่างไรและฉันได้ดูซอร์สโค้ดและ API ของ Spring JPA แล้ว แต่ฉันไม่พบคำตอบสำหรับคำถามด้านล่าง: คลาสการใช้งานที่เก็บถูกสร้างขึ้นที่รันไทม์ & วิธีการที่ถูกนำไปใช้และฉีดอย่างไร? Spring Data JPA ใช้ CGlib หรือไลบรารีการจัดการ bytecode เพื่อใช้วิธีการและฉีดแบบไดนามิกหรือไม่ คุณช่วยกรุณาตอบคำถามข้างต้นและให้เอกสารที่รองรับได้หรือไม่?

9
ไม่ใช้รูปแบบพื้นที่เก็บข้อมูลให้ใช้ ORM ตามที่เป็น (EF)
ฉันใช้รูปแบบพื้นที่เก็บข้อมูลเสมอ แต่สำหรับโปรเจ็กต์ล่าสุดของฉันฉันต้องการดูว่าฉันสามารถใช้มันได้อย่างสมบูรณ์แบบหรือไม่และการนำ "หน่วยงาน" ไปใช้หรือไม่ ยิ่งฉันเริ่มขุดมากขึ้นฉันก็เริ่มถามตัวเองว่า"ฉันต้องการมันจริงๆหรือ" ตอนนี้ทั้งหมดนี้เริ่มต้นด้วยความคิดเห็นสองสามรายการใน Stackoverflow พร้อมติดตามโพสต์ของ Ayende Rahien ในบล็อกของเขาโดยมี 2 ข้อความที่เจาะจง ที่เก็บคือสิ่งใหม่ - ซิงเกิลตัน ask-ayende-life-without-repositories-are-they-worth-living สิ่งนี้อาจถูกพูดถึงตลอดไปและตลอดไปและขึ้นอยู่กับการใช้งานที่แตกต่างกัน ฉันอยากรู้อะไร แนวทางนี้จะเหมาะกับโครงการ Entity Framework หรือไม่ การใช้วิธีนี้เป็นตรรกะทางธุรกิจที่ยังคงอยู่ในชั้นบริการหรือวิธีการขยาย (ตามที่อธิบายไว้ด้านล่างฉันรู้วิธีการขยายกำลังใช้เซสชัน NHib) ทำได้อย่างง่ายดายโดยใช้วิธีการขยาย สะอาดเรียบง่ายและใช้ซ้ำได้ public static IEnumerable GetAll( this ISession instance, Expression<Func<T, bool>> where) where T : class { return instance.QueryOver().Where(where).List(); } การใช้แนวทางนี้และNinjectในฐานะ DI ฉันจำเป็นต้องสร้างContextอินเทอร์เฟซและฉีดเข้าไปในคอนโทรลเลอร์ของฉันหรือไม่

4
คำสั่งและ / หรือข้อกำหนดการสืบค้นที่ออกแบบมาอย่างดี
ฉันได้ค้นหาวิธีแก้ปัญหาที่ดีสำหรับปัญหาที่นำเสนอโดยรูปแบบพื้นที่เก็บข้อมูลทั่วไปมาระยะหนึ่งแล้ว (รายการวิธีการเพิ่มขึ้นสำหรับการสืบค้นเฉพาะทาง ฯลฯ ดู: http://ayende.com/blog/3955/repository- is-the-new-singleton ) ฉันชอบแนวคิดในการใช้การสืบค้นคำสั่งโดยเฉพาะอย่างยิ่งการใช้รูปแบบข้อมูลจำเพาะ อย่างไรก็ตามปัญหาของฉันเกี่ยวกับข้อกำหนดคือมันเกี่ยวข้องกับเกณฑ์ของการเลือกอย่างง่ายเท่านั้น (โดยทั่วไปคือ where clause) และไม่ได้จัดการกับปัญหาอื่น ๆ ของการสืบค้นเช่นการเข้าร่วมการจัดกลุ่มการเลือกส่วนย่อยหรือการฉายภาพเป็นต้น โดยพื้นฐานแล้วการค้นหาเพิ่มเติมทั้งหมดจะต้องผ่านการค้นหาจำนวนมากเพื่อให้ได้ชุดข้อมูลที่ถูกต้อง (หมายเหตุ: ฉันใช้คำว่า "คำสั่ง" ในรูปแบบคำสั่งหรือที่เรียกว่าวัตถุแบบสอบถามฉันไม่ได้พูดถึงคำสั่งเช่นเดียวกับในการแยกคำสั่ง / คิวรีที่มีความแตกต่างระหว่างแบบสอบถามและคำสั่ง (อัปเดตลบ แทรก)) ดังนั้นฉันกำลังมองหาทางเลือกอื่นที่ห่อหุ้มข้อความค้นหาทั้งหมด แต่ก็ยังมีความยืดหยุ่นเพียงพอที่คุณจะไม่เพียง แต่แลกเปลี่ยนที่เก็บสปาเก็ตตี้เพื่อเพิ่มคลาสคำสั่ง ฉันเคยใช้เช่น Linqspecs และในขณะที่ฉันพบคุณค่าบางอย่างในการกำหนดชื่อที่มีความหมายให้กับเกณฑ์การคัดเลือก แต่ก็ไม่เพียงพอ บางทีฉันอาจกำลังมองหาวิธีการแก้ปัญหาแบบผสมผสานที่ผสมผสานหลายวิธีเข้าด้วยกัน ฉันกำลังมองหาวิธีแก้ปัญหาที่ผู้อื่นอาจพัฒนาขึ้นเพื่อแก้ไขปัญหานี้หรือแก้ไขปัญหาอื่น แต่ยังคงเป็นไปตามข้อกำหนดเหล่านี้ ในบทความที่เชื่อมโยง Ayende แนะนำให้ใช้บริบท nHibernate โดยตรง แต่ฉันรู้สึกว่าส่วนใหญ่ทำให้ชั้นธุรกิจของคุณซับซ้อนเพราะตอนนี้ต้องมีข้อมูลการสืบค้นด้วย ฉันจะมอบรางวัลให้กับสิ่งนี้ทันทีที่ระยะเวลารอผ่านพ้นไป ดังนั้นโปรดทำให้โซลูชันของคุณมีค่าพร้อมคำอธิบายที่ดีและฉันจะเลือกทางออกที่ดีที่สุดและเพิ่มคะแนนให้กับนักวิ่ง หมายเหตุ: ฉันกำลังมองหาสิ่งที่เป็นไปตาม ORM ไม่จำเป็นต้องเป็น EF หรือ nHibernate อย่างชัดเจน …

1
ไม่สามารถแปลวิธีการเป็นนิพจน์ร้านค้า
ฉันเห็นรหัสนี้ทำงานกับ LINQ ถึง SQL แต่เมื่อฉันใช้ Entity Framework มันแสดงข้อผิดพลาดนี้: LINQ เป็นเอนทิตีไม่รู้จักเมธอด 'System.Linq.IQueryable'1 [MyProject.Models.CommunityFeatures] GetCommunityFeatures ()' เมธอดและเมธอดนี้ไม่สามารถแปลเป็นนิพจน์ร้านค้าได้ รหัสที่เก็บคือ: public IQueryable<Models.Estate> GetEstates() { return from e in entity.Estates let AllCommFeat = GetCommunityFeatures() let AllHomeFeat = GetHomeFeatures() select new Models.Estate { EstateId = e.EstateId, AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat), AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat) }; } …

7
วิธีการใช้รูปแบบพื้นที่เก็บข้อมูลอย่างถูกต้อง?
ฉันสงสัยว่าฉันควรจัดกลุ่มที่เก็บของฉันอย่างไร เช่นเดียวกับตัวอย่างที่ฉันเห็นใน asp.net mvc และในหนังสือของฉันโดยทั่วไปพวกเขาใช้ที่เก็บเดียวต่อตารางฐานข้อมูล แต่ดูเหมือนว่าจะมีที่เก็บมากมายที่ทำให้คุณต้องเรียกใช้ที่เก็บข้อมูลมากมายในภายหลังเพื่อล้อเลียนและสิ่งของต่างๆ ดังนั้นฉันเดาว่าฉันควรจัดกลุ่ม อย่างไรก็ตามฉันไม่แน่ใจว่าจะจัดกลุ่มอย่างไร ตอนนี้ฉันได้ทำการลงทะเบียน Repository เพื่อจัดการข้อมูลการลงทะเบียนทั้งหมดของฉัน อย่างไรก็ตามมี 4 ตารางที่ฉันต้องอัปเดตและก่อนที่ฉันจะมีที่เก็บ 3 แห่งเพื่อทำสิ่งนี้ ตัวอย่างเช่นหนึ่งในตารางคือตารางใบอนุญาต เมื่อพวกเขาลงทะเบียนฉันดูที่คีย์และตรวจสอบเพื่อดูว่ามีอยู่ในฐานข้อมูลหรือไม่ จะเกิดอะไรขึ้นถ้าฉันต้องการตรวจสอบรหัสใบอนุญาตนี้หรืออย่างอื่นจากตารางนั้นที่จุดอื่น ๆ จากนั้นลงทะเบียน จุดหนึ่งสามารถล็อกอินได้ (ตรวจสอบว่าคีย์ยังไม่หมดอายุหรือไม่) แล้วฉันจะทำอย่างไรในสถานการณ์นี้? เขียนโค้ดใหม่อีกครั้ง (แตก DRY)? พยายามรวม 2 ที่เก็บเหล่านี้เข้าด้วยกันและหวังว่าจะไม่มีวิธีใดที่จำเป็นในช่วงเวลาอื่น (เช่นบางทีฉันอาจมีวิธีที่ตรวจสอบว่ามีการใช้ userName หรือไม่ - บางทีฉันอาจจะต้องใช้ที่อื่น) นอกจากนี้ถ้าฉันรวมเข้าด้วยกันฉันจะต้องใช้ชั้นบริการ 2 ชั้นที่ไปที่ที่เก็บเดียวกันเนื่องจากฉันคิดว่าการมีตรรกะทั้งหมดสำหรับ 2 ส่วนที่แตกต่างกันของไซต์จะยาวและฉันจะต้องมีชื่อเช่น ValidateLogin (), ValdiateRegistrationForm () , ValdiateLoginRetrievePassword () และอื่น ๆ หรือเรียก …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.