LINQ กับ Data Access Layer


10

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

สำหรับโครงการบ้านส่วนใหญ่ของฉันฉันจะใช้ ORM ของฉันเองที่ฉันสร้างขึ้นซึ่งฉันตั้งใจจะทำโอเพ่นซอร์สเสมอ อย่างไรก็ตามตั้งแต่นั้นมา LINQ ก็พร้อมใช้งานซึ่งคล้ายกับวิธีการออมของฉัน (แต่ .. ดีกว่า)

ก่อนหน้านี้ฉันไม่สามารถทำอะไรกับ ORM ของฉันที่ฉันไม่สามารถทำได้กับ LINQ (ยกเว้นบิตของการรวม REST) ดังนั้นคำถามของฉันคือ LINQ เป็น Data Access Layer ใหม่ของฉันหรือไม่ ฉันต้องการเลเยอร์นี้อีกเลยหรือไม่ BLL ของฉันควรคุยกับ LINQ โดยตรงหรือไม่ หรือการปฏิบัติที่ไม่ดีนี้ยังคง?

แก้ไข:

คำถามเดิมหมายถึง LINQ to Entities แต่มีคำตอบที่น่าสนใจมากมายเกี่ยวกับ LINQ กับ SQL ประชาชนคิดอะไรกับทั้งคู่? ฉันรวบรวมกว่า LINQ ไปเป็น SQL ไม่สามารถแทนที่ DAL ได้จริง แต่ Entity Framework สามารถทำได้หรือไม่

คำตอบ:


7

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

นอกจากนี้ยังจะช่วยในการทดสอบหน่วยเนื่องจากที่เก็บสามารถจำลองได้ง่าย


6

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


ฉันเห็นด้วย LINQ กับ SQL เป็นเพียงภาษาแบบสอบถามที่สามารถป้องกันคุณจากการเขียนรหัสการประปาจำนวนมาก มันไม่ได้ห่อหุ้มการเข้าถึงข้อมูลในแอปพลิเคชันของคุณอย่างที่ควรจะเป็น DAL
neontapir

ฉันหมายถึง LINQ กับหน่วยงานจริงๆ ฉันยังใช้ LINQ กับ Objects มากมาย แต่ฉันคิดว่านั่นเป็นตรรกะทางธุรกิจ ฉันเข้าใจความแตกต่างเบื้องหลังของเอนทิตีและ LINQ กับ SQL แต่ฉันไม่เคยใช้ LINQ กับ SQL มีความแตกต่างในไวยากรณ์หรือไม่
คอนเนล

2

Linq ไม่ได้เกี่ยวกับการเข้าถึงข้อมูลที่คุณสามารถใช้ LINQ IEnumerableต่อใด ๆ

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

ในชั้นการเข้าถึงข้อมูลนั้นคุณสามารถใช้ ORM ของคุณเองหรือคุณสามารถใช้ Linq กับ sql มันไม่สำคัญว่าตราบใดที่ data access layer ใช้ที่เก็บที่คุณกำหนดไว้


1

หากคุณไม่ต้องการ "เลเยอร์ตรรกะทางธุรกิจ" ของคุณเพื่อจัดการธุรกรรมและประสิทธิภาพการสืบค้นยังคงมีความต้องการ DAL อยู่

LINQ ทำให้การประกาศแบบสอบถามเป็นกระบวนการออกแบบ (aka ตรวจสอบคอมไพเลอร์) ขณะออกแบบ

ผู้ให้บริการสืบค้น LINQ (เช่น LinqToSql และ LinqToEntities) ยังคงทำการแปลงแบบรันไทม์ของแบบสอบถามที่ประกาศไปเป็นข้อความ sql จากนั้น DBMS ยังคงทำการตีความแบบสอบถามแบบรันไทม์, การสร้างแผนแบบสอบถามแบบรันไทม์เป็นต้น

นี่เป็นเพียงส่วนเล็ก ๆ ของ DAL

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