2008-09-30 32 views
5

Ban đầu có đối tượng DAL mà BO của tôi gọi để biết thông tin và sau đó được chuyển đến giao diện người dùng. Sau đó, tôi bắt đầu nhận thấy mã giảm trong giao diện người dùng và có các lớp Bộ điều khiển. Đề xuất phong nha là gì.Cách phổ biến cho thiết kế mẫu OOP (Truy cập dữ liệu)

Tôi hiện mỏ cấu trúc

Public Class OrderDAL 

    Private _id Integer 
    Private _order as Order 

    Public Function GetOrder(id as Integer) as Order 

     ...return Order 

    End Function 

End Class 

sau đó tôi có các lớp điều khiển (thực hiện thời gian gần đây phong cách này)

Public Class OrderController 

    Private Shared _orderDAL as new OrderDAL 

    Public Shared Function GetOrder(id) As Order 

     Return _orderDAL.GetOrder(id) 

    End Function 

End Class 

Sau đó, trong ứng dụng của tôi

My app Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

     msgbox(OrderController.GetOrder(12345).Customer.Name) 

    End Sub 


End app 

tôi ban đầu thấy rằng với Lớp được chia sẻ Tôi không phải tiếp tục tạo một bản sao DAL mới bất cứ khi nào tôi n eed để tìm nạp dữ liệu

Dim _orderDAL as New OrderDal 

_orderDAL.GetOrder(1234) 

..... 

Bạn có gì?

Cảm ơn

+0

Xin lỗi về mã hóa. Có, ứng dụng của tôi dựa trên việc mua và báo cáo đơn đặt hàng. Tất cả truy cập dữ liệu của tôi Chèn, Cập nhật, Xóa, Tìm nạp đều có trong DALS. Từ các ứng dụng giao diện người dùng của tôi (Winforms), tôi truy cập các DAL thông qua các lớp Controller, các lớp này cũng thực hiện một vài thứ khác, nếu một sản phẩm không được trả về, nó sẽ gửi một thông điệp đến một biểu mẫu cụ thể. Vấn đề là, các lớp điều khiển có thực sự cần thiết không? Ban đầu, tôi đã gộp tất cả các mã công nhân của tôi vào mỗi biểu mẫu, tuy nhiên, một số dạng khác có các cuộc gọi lặp lại, vì vậy với các lớp Controller và các chức năng chia sẻ và subs, I w –

Trả lời

0

Tôi đã sử dụng giải pháp của bạn trong quá khứ và vấn đề duy nhất tôi gặp phải là phương thức "Được chia sẻ" hoặc "tĩnh" không hỗ trợ kế thừa. Khi ứng dụng của bạn phát triển, bạn có thể rất cần hỗ trợ các loại "OrderControllers" khác nhau.

Cách estabilished hỗ trợ OrderControllers khác nhau sẽ là, về mặt lý thuyết, để tạo ra một nhà máy:

OrderControllerFactory.ConfiguredOrderController().GetOrder(42); 

Vấn đề ở đây là: loại được trả về bởi "ConfiguredOrderController()"? Vì nó phải có phương thức "GetOrder (int id)" tĩnh - và các phương thức tĩnh không được hỗ trợ bởi kế thừa hoặc giao diện. Cách xung quanh điều này là không sử dụng các phương thức tĩnh trong lớp OrderController.

public interface IOrderController 
{ 
    Order GetOrder(int Id) 
} 

public class OrderController: IOrderController 
{ 
    public Order GetOrder(int Id) 
    {} 
} 

public class OrderControllerFactory() 
{ 
    public IOrderController ConfiguredOrderController() 
    {} 
} 

Do đó, bạn có thể sẽ được tốt hơn bằng cách sử dụng các phương pháp không tĩnh cho bộ điều khiển.

0

Ứng dụng của bạn không nên khởi tạo phiên bản riêng biệt của lớp dữ liệu, do đó bạn có quyền kiểm soát. Mã Psuedo mà bạn đăng lên thực sự khó đọc.

Câu hỏi đặt ra là lớp truy cập dữ liệu của bạn là bao nhiêu và số lượng là bao nhiêu? Điều đó sẽ dictate một chút tốt về những gì bạn làm. Nếu bạn thích một tập tin thì tôi nghĩ những gì bạn viết là tốt, và nếu bạn cần chia sẻ nó với các bộ điều khiển khác trong hệ thống của bạn, bạn có thể bọc vật phẩm đó thành một singelton (rùng mình).

Nếu bạn thực sự đang thực hiện xử lý đơn đặt hàng và lưu lại cơ sở dữ liệu, tôi nghĩ rằng đó là lúc để xem xét ORM. Các gói này sẽ xử lý các khía cạnh CRUM cho bạn và giảm số lượng các mục mà bạn phải duy trì.

My $ .02 và tôi bảo lưu quyền sửa đổi câu trả lời của mình khi tôi thấy ví dụ tốt hơn.

0

Tôi không thể nói chi tiết VB vì tôi không phải là một Nhà phát triển VB, nhưng:

Điều bạn đang làm là một điều tốt thực hành tốt tablished, tách lớp GUI/trình bày từ lớp dữ liệu. Bao gồm cả mã ứng dụng thực trong các phương thức sự kiện GUI là một thực hành xấu (đáng buồn cũng được thiết lập).

Lớp trình điều khiển của bạn tương tự như bridge pattern cũng là một ý tưởng hay nếu cả hai lớp có thể thay đổi biểu mẫu của chúng mà không có người khác biết về nó.

Hãy tiếp tục!

0

Thực tiễn tốt của nó - đặc biệt là khi bạn đến một điểm mà Bộ điều khiển sẽ cần phải làm nhiều hơn việc ủy ​​nhiệm đơn giản cho DAL cơ bản.

Các vấn đề liên quan