ความแตกต่างระหว่างที่เก็บและบริการ?


105

ความแตกต่างระหว่างที่เก็บและบริการคืออะไร? ฉันดูเหมือนจะไม่เข้าใจ

ฉันกำลังพูดถึงการเข้าถึงข้อมูลผ่านชั้นการเข้าถึงข้อมูลโดยทั่วไปจะใช้ linq ถึง sql

บ่อยครั้งที่ฉันเห็นที่เก็บข้อมูลด้วยวิธีการ CRUD แบบง่ายและบริการที่มีวิธีการเฉพาะทางธุรกิจมากขึ้น

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

ดังที่ฉันได้กล่าวไปแล้วที่เก็บดูเหมือนจะมีมากขึ้นสำหรับการดำเนินงานและบริการแบบ CRUD ที่มุ่งเน้นธุรกิจมากขึ้น

ขอบคุณ


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

2
หมายเหตุ: ฉันไม่ได้พูดถึงบริการบนเว็บหรืออะไรที่นี่ ฉันกำลังพูดถึงการเข้าถึงข้อมูลผ่านชั้นข้อมูล
เล็กซ์

คำตอบ:


78

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

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


19
ฉันจะบอกว่า Repository คือบริการประเภทหนึ่งที่ใช้สำหรับการเข้าถึงข้อมูล
Ian Ringrose

5
นั่นเป็นคำจำกัดความที่ดีในแง่ที่ว่าเกือบทุกสิ่งที่เราเขียนเป็น "บริการ" ในบางระดับ แต่มันสูญเสียความตั้งใจพื้นฐานที่ว่าที่เก็บควรจะเป็นกลุ่มของวัตถุ
jlembke

4
หากคุณตรวจสอบหน่วยการทดสอบอาจเป็นการชัดเจนกว่าที่จะคิดว่าที่เก็บเป็นนามธรรมที่น้อยที่สุดเพื่อลดการเยาะเย้ยที่จำเป็นเพื่อหลีกเลี่ยงฐานข้อมูล
Henry Heikkinen

repository= collectionจากbackbone.jsหรือrepository= serviceจากangular?
สไลด์โชว์ 2

160

ที่เก็บคือที่เก็บข้อมูล บริการคือสิ่งที่จัดการกับข้อมูล

ในการเปรียบเทียบสถานการณ์ในโลกแห่งความเป็นจริงหากเงินของคุณถูกเก็บไว้ในห้องนิรภัยในธนาคารห้องนิรภัยจะเป็นที่เก็บ ผู้ให้บริการฝากถอน ฯลฯ เป็นผู้ให้บริการ


7
ขอบคุณสำหรับคำตอบนี้! เรียบง่ายและกระชับ
เล็กซ์

1
เห็นด้วยกับความคิดเห็นด้านบน! รักคำอธิบายโลกแห่งความจริงเช่นกัน!
Kleigh

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

1
ฉันสงสัยว่าลูกค้าต้องการทราบเกี่ยวกับการใช้งานนั้น @Dennis
Chucky

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

12

ฉันจะบอกว่าเป็นการลองครั้งแรกในความหมายทั่วไป (จนกว่าคุณจะให้บริบทเพิ่มเติมหากคุณมี):

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

3
จะทำสิ่งต่อไปนี้ได้หรือไม่: ที่เก็บของฉันมีการเรียกฐานข้อมูลที่ซับซ้อนทั้งหมดของฉันจากนั้นในบริการของฉันฉันจะฉีดที่เก็บเป็นการอ้างอิง ตอนนี้ฉันมีโค้ดที่ทดสอบได้อย่างง่ายดายและแยกข้อกังวลของฉันออกไปเนื่องจากบริการของฉันไม่ทราบว่าการเรียก DB นั้นทำอย่างไร แต่เพียงแค่เรียกใช้ฟังก์ชันของที่เก็บเท่านั้น ดังนั้นตรรกะทางธุรกิจและการเข้าถึงข้อมูลจึงแยกจากกัน นี่จะเป็นแนวทางที่ใช้ได้ผลหรือไม่?
darophi

1
หากตรรกะทั้งหมดถูกเขียนในบริการคอนโทรลเลอร์จะเรียกใช้บริการเท่านั้น?
Islomkhodja Hamidullakhodjaev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.