Vì vậy, tôi đã tạo ra một lớp truy cập dữ liệu thông qua TDD và đã tiếp cận phần nào mối quan tâm. Tôi không muốn bắt đầu đi sai đường, vì vậy tôi nghĩ rằng tôi sẽ hỏi các bạn xem liệu suy nghĩ của tôi có phù hợp với một kiến trúc sạch sẽ không.
Các phương thức trong Lớp truy cập dữ liệu của tôi (viết tắt là DAL), khá đơn giản. Chúng phù hợp với các thủ tục được lưu trữ trong cơ sở dữ liệu (không có cách nào khác để gọi vào đó để giữ mọi thứ sạch sẽ) và chúng chứa các tham số tương tự mà các thủ tục thực hiện. Sau đó, họ chỉ cần kết nối với cơ sở dữ liệu và trả về kết quả truy vấn. Đây là một ví dụ:
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());
}
Điều này hoạt động hoàn hảo cho loại phương pháp này bởi vì tôi không làm bất cứ điều gì có ý nghĩa với tập kết quả. Tôi chỉ muốn đảm bảo lệnh hoạt động, vì vậy tôi sẽ trả về kết quả của truy vấn không, đó chỉ là các hàng bị ảnh hưởng và tôi có thể xác minh logic bằng cách sử dụng số đó.
Tuy nhiên, nói trong một phương pháp DAL khác, tôi muốn tải một bản ghi. Quy trình tải của tôi sẽ được thực hiện selects
đối với một loạt các bảng và trả về một bảng DataSet
, nhưng tôi đang đấu tranh với việc liệu DAL của tôi có nên tạo Đối tượng kinh doanh trong phương thức hay khôngDataSet
, hoặc nếu chính Đối tượng kinh doanh của tôi chỉ nên có một Load()
phương thức có được DataSet
từ DAL, và sau đó về cơ bản tự điền vào.
Việc thực hiện thông qua DAL sẽ dẫn đến ít logic hơn trong các Đối tượng kinh doanh (mặc dù đây chỉ là logic chọn, nó vẫn logic), nhưng sẽ làm cho DAL chùn bước một chút và khiến nó cảm thấy như nó thực sự đang làm điều gì đó mà nó không nên ' đang làm
các bạn nghĩ sao?