2010-03-26 8 views
10

Xin chào, tôi tạo các lớp Dao cho một số hoạt động DBSử dụng phương pháp tĩnh hoặc không có phương pháp tĩnh nào trong lớp học nghề?

theo cách này, việc tạo các phương thức dạy lớp tĩnh hay tĩnh không tốt hơn?

Sử dụng lớp dao mẫu bên dưới, Nhiều hơn một khách hàng đã sử dụng phương pháp AddSampleItem trong cùng một thời điểm?

public class SampleDao 
{ 
    static DataAcessor dataAcessor 

    public static void AddSampleItem(object[] params) 
    { 
     dataAcessor =new DataAcessor(); 
     //generate query here 
     string query="..." 
     dataAcessor.ExecuteQery(query); 
     dataAcessor.Close(); 
    } 

    public static void UpdateSampleItem(object[] params) 
    { 
     dataAcessor =new DataAcessor(); 
     //generate query here 
     string query="..." 
     dataAcessor.ExecuteQery(query); 
     dataAcessor.Close(); 
    } 
} 

Trả lời

9

Nó sẽ dẫn đến một mớ hỗn độn lớn. Nếu bạn đang thêm 2 mục cùng một lúc từ các chủ đề khác nhau, bạn chắc chắn sẽ kết thúc với các kết quả rất lạ, hoặc thậm chí là lỗi nếu một chuỗi đóng DataAcessor trước khi kết thúc khác.

Tôi sẽ sử dụng một địa phương DataAcessor hoặc tạo mới và sử dụng nó trong tất cả các phương pháp tùy thuộc vào cách bạn muốn quản lý tuổi thọ của DataAcessor.

public class SampleDao 
{ 
    public void AddSampleItem(object[] params) 
    { 
     DataAcessor dataAcessor =new DataAcessor(); 
     // ... 
    } 

    public void UpdateSampleItem(object[] params) 
    { 
     DataAcessor dataAcessor =new DataAcessor(); 
     // ... 
    } 
} 
2

mã này không an toàn theo cách bạn viết.

nếu bạn có trường DataAccessor và các phương thức tĩnh như thế này, bạn sẽ gặp phải sự cố đồng thời với nhiều khách hàng đánh mã này cùng một lúc. có khả năng bạn sẽ có ngoại lệ rất lạ xảy ra và thậm chí có thể một khách hàng có thể thấy dữ liệu của khách hàng khác.

loại bỏ tĩnh trên các phương pháp này và trường này và khởi tạo phiên bản mẫu mới của SampleDao cho từng khách hàng.

0

Gán đối tượng DataAccessor mới để tham khảo DataAccessor tĩnh trong mọi phương pháp sẽ dẫn đến vấn đề đồng thời. Bạn vẫn có thể có các phương thức tĩnh trong lớp SampleDao nhưng chắc chắn rằng bạn loại bỏ tham chiếu tĩnh tới DataAccessor. Để sử dụng DataAccessor, hãy tạo một cá thể cục bộ. Bằng cách này bạn có thể tránh các vấn đề tương tranh. Điểm bất lợi ở đây là mỗi khi bạn gọi phương thức tĩnh, một cá thể cho DataAccessor được tạo ra.

Daos trong hầu hết các trường hợp là không trạng thái. Trong những trường hợp này, tôi không thấy có phương pháp không tĩnh trong Daos, vì chúng ta cần tạo một thể hiện dao đó để truy cập phương thức của nó.

0

Bruno là chính xác. Tuy nhiên, bạn cũng có thể thêm một singleton và sử dụng "khóa" vào chuỗi đơn là một phần của ứng dụng của bạn. Tuy nhiên, hãy nhớ rằng các yêu cầu sẽ xếp hàng và nếu truy vấn của bạn mất thời gian, hiệu suất của ứng dụng sẽ giảm. Điều này đặc biệt đáng chú ý trong một ứng dụng web. Đối với ứng dụng dành cho thiết bị di động hoặc máy tính để bàn, "khóa" chắc chắn là phù hợp.