ฉันอยากรู้ว่าอะไรคือข้อเสียของการใช้รูปแบบ ActiveRecord สำหรับการเข้าถึงข้อมูล / วัตถุทางธุรกิจ คนเดียวที่ฉันสามารถนึกได้ว่าอยู่เหนือหัวของฉันคือมันละเมิดหลักการความรับผิดชอบเดียว แต่รูปแบบ AR เป็นเรื่องธรรมดาพอที่เหตุผลนี้เพียงอย่างเดียวดูเหมือนจะไม่ "ดีพอ" ที่จะพิสูจน์ว่าไม่ได้ใช้ (แน่นอน มุมมองอาจเบ้เพราะบ่อยครั้งที่ไม่มีรหัสที่ฉันทำงานด้วยตามหลักการ SOLID ใด ๆ )
โดยส่วนตัวฉันไม่ใช่แฟนของ ActiveRecord (ยกเว้นการเขียนแอพพลิเคชั่น Ruby on Rails ที่ AR ให้ความรู้สึก "เป็นธรรมชาติ") เพราะมันรู้สึกว่าคลาสทำมากเกินไปและการเข้าถึงข้อมูลไม่ควรขึ้นอยู่กับชั้นเรียน เพื่อจัดการ ฉันชอบใช้ที่เก็บที่ส่งคืนออบเจคทางธุรกิจ ส่วนใหญ่ของรหัสที่ฉันทำงานด้วยมีแนวโน้มที่จะใช้รูปแบบของ ActiveRecord ในรูปแบบของ (ฉันไม่ทราบว่าทำไมวิธีการเป็นบูลีน):
public class Foo
{
// properties...
public Foo(int fooID)
{
this.fooID = fooID;
}
public bool Load()
{
// DB stuff here...
// map DataReader to properties...
bool returnCode = false;
if (dr.HasRows)
returnCode = true;
return returnCode;
}
}
หรือบางครั้งวิธี "ดั้งเดิม" ที่มากขึ้นของการมีpublic static Foo FindFooByID(int fooID)
วิธีการสำหรับผู้ค้นหาและบางสิ่งบางอย่างตามสายของpublic void Save()
การบันทึก / ปรับปรุง
ฉันเข้าใจว่า ActiveRecord นั้นง่ายกว่าในการติดตั้งและใช้งาน แต่ดูเหมือนว่าจะง่ายเกินไปสำหรับแอพพลิเคชั่นที่ซับซ้อนและคุณอาจมีสถาปัตยกรรมที่แข็งแกร่งกว่าโดยการห่อหุ้มตรรกะการเข้าถึงข้อมูลของคุณใน Repository กลยุทธ์การเข้าถึงข้อมูลเช่นคุณใช้ Stored Procs + DataSets และต้องการเปลี่ยนเป็น LINQ หรือบางสิ่ง)
ดังนั้นข้อเสียอื่น ๆ ของรูปแบบนี้ที่ควรพิจารณาเมื่อตัดสินใจว่า ActiveRecord เป็นตัวเลือกที่ดีที่สุดสำหรับงานหรือไม่