ดังนั้นฉันจึงสร้าง data access layer ผ่านทาง TDD และได้เข้าหาข้อกังวลเล็กน้อย ฉันไม่ควรเริ่มต้นเส้นทางที่ผิดดังนั้นฉันคิดว่าฉันขอให้พวกคุณดูว่าความคิดของฉันสอดคล้องกับสถาปัตยกรรมที่สะอาดหรือไม่
วิธีการภายใน Data Access Layer ของฉัน (สั้นสำหรับ DAL) จะค่อนข้างง่าย พวกเขาเป็นไปตามขั้นตอนการจัดเก็บในฐานข้อมูล (ไม่มีวิธีอื่นในการโทรเข้าเพื่อรักษาความสะอาด) และพวกเขามีพารามิเตอร์เดียวกันกับที่ทำ พวกเขาเพียงแค่เชื่อมต่อกับฐานข้อมูลและส่งคืนผลลัพธ์แบบสอบถาม นี่คือตัวอย่างหนึ่ง:
public int DeleteRecord(int recordId)
{
recordId.RequireThat("recordId").NotZeroOrLess();
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId});
return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray());
}
มันทำงานได้อย่างสมบูรณ์แบบสำหรับวิธีการนี้เพราะฉันไม่ได้ทำอะไรที่มีความหมายกับชุดผลลัพธ์ ฉันแค่ต้องการตรวจสอบให้แน่ใจว่าคำสั่งทำงานได้ดังนั้นฉันจะส่งคืนผลลัพธ์ของการไม่ค้นหาซึ่งเป็นเพียงแถวที่ได้รับผลกระทบและฉันสามารถตรวจสอบตรรกะโดยใช้หมายเลขนั้นได้
อย่างไรก็ตามพูดในวิธีอื่น DAL ฉันต้องการโหลดบันทึก ขั้นตอนการโหลดของฉันกำลังจะถูกดำเนินการselects
กับพวงของตารางและกลับมาได้DataSet
แต่ฉันกำลังต่อสู้กับว่า DAL ฉันควรสร้าง Business Objects ภายในวิธีใช้DataSet
, หรือถ้าธุรกิจของฉันวัตถุตัวเองก็ควรจะมีLoad()
วิธีการที่ได้รับDataSet
จาก DAL และจากนั้นจะเติมตัวเองโดยทั่วไป
การทำผ่าน DAL จะส่งผลให้เกิดตรรกะน้อยลงใน Business Objects (แม้ว่านี่จะเป็นเพียงการเลือกตรรกะมันยังคงเป็นตรรกะ) แต่จะทำให้ DAL ดูเล็กน้อยและทำให้รู้สึกว่ามันกำลังทำสิ่งที่ควรทำ ' ไม่ต้องทำ
พวกคุณคิดอย่างไร