วิธีที่มันเป็น
เป็นเวลาหลายปีที่ฉันจัดระเบียบโซลูชันซอฟต์แวร์ของฉันเช่น:
- Data Access Layer (DAL) เป็นนามธรรมธุรกิจของการเข้าถึงข้อมูล
- Business Logic Layer (BLL) เพื่อใช้กฎธุรกิจกับชุดข้อมูลจัดการการตรวจสอบความถูกต้อง ฯลฯ
- Utilities (Util) ซึ่งเป็นเพียงไลบรารีของวิธีการใช้งานทั่วไปที่ฉันสร้างขึ้นเมื่อเวลาผ่านไป
- Presentation Layer ซึ่งแน่นอนว่าอาจเป็นเว็บเดสก์ท็อปมือถือหรืออะไรก็ตาม
วิธีที่มันเป็นตอนนี้
สำหรับสี่ปีที่ผ่านมาหรือดังนั้นฉันใช้ Entity Framework ของ Microsoft (ฉันมีอำนาจเหนือกว่า. dev dev) และฉันพบว่าการมี DAL กลายเป็นเรื่องยุ่งยากมากกว่าการทำความสะอาดเพราะบัญชี Entity Framework ได้ทำไปแล้ว งานที่ DAL ของฉันเคยทำ: มันสรุปธุรกิจของการรัน CRUDs กับฐานข้อมูล
ดังนั้นฉันมักจะจบลงด้วย DAL ที่มีคอลเลกชันของวิธีการเช่นนี้:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
จากนั้นใน BLL วิธีนี้จะใช้เช่น:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
นี่เป็นตัวอย่างที่ง่ายอย่างแน่นอนเนื่องจากโดยทั่วไปแล้ว BLL จะมีการใช้ตรรกะอีกหลายบรรทัด แต่ดูเหมือนว่าจะมากเกินไปเล็กน้อยในการรักษา DAL สำหรับขอบเขตที่ จำกัด
จะเป็นการดีกว่าหรือไม่ที่จะละทิ้ง DAL และเพียงเขียนวิธี BLL ของฉันเช่น:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
ฉันกำลังพิจารณาที่จะทิ้ง DAL จากโครงการในอนาคตด้วยเหตุผลที่กล่าวข้างต้น แต่ก่อนที่จะทำเช่นนั้นฉันต้องการสำรวจความคิดเห็นของชุมชนที่นี่เพื่อย้อนหลัง / มองการณ์ไกล / ความคิดเห็นของคุณก่อนที่ฉันจะลงบนถนนในโครงการและค้นพบปัญหา ไม่คาดหวัง
ความคิดใด ๆ ที่ชื่นชม
ปรับปรุง
ฉันทามติดูเหมือนว่า DAL แยกต่างหากไม่จำเป็น แต่ (ทำให้การอนุมานของฉันเองที่นี่) เป็นความคิดที่ดีที่จะหลีกเลี่ยงการล็อคผู้ขายตัวอย่างเช่นถ้าฉันมี DAL ที่ทำให้นามธรรมเรียก EF ดังที่แสดงไว้ด้านบนถ้าฉัน เคยเปลี่ยนไปใช้ผู้ขายรายอื่นฉันไม่จำเป็นต้องเขียน BLL ใหม่ เฉพาะแบบสอบถามพื้นฐานเหล่านั้นใน DAL เท่านั้นที่จะต้องมีการเขียนใหม่ ต้องบอกว่าฉันพบว่ามันยากที่จะจินตนาการสถานการณ์ที่จะเกิดขึ้น ฉันสามารถสร้างรูปแบบ Oracle ของฐานข้อมูล Oracle, MSSQL ได้แล้วฉันค่อนข้างแน่ใจว่า MySql นั้นเป็นไปได้เช่นกัน (??) ดังนั้นฉันไม่แน่ใจว่ารหัสพิเศษจะให้ ROI ที่คุ้มค่าหรือไม่
GetMyObjects(int myId)
ง่ายกว่าเยาะเย้ย / stubbing / GetObjects.Where(ob => op.accountId == myId).ToList()
แกล้งทำของ