2008-10-07 39 views
5

Khi thiết kế đối tượng nghiệp vụ, tôi đã thử một số phương pháp khác nhau để ghi lớp truy cập dữ liệu. Một số đã làm việc tốt hơn những người khác nhưng tôi luôn cảm thấy phải có một cách "tốt hơn".Đối tượng kinh doanh Thiết kế DAL

Tôi thực sự muốn thấy những cách khác nhau mà mọi người đã xử lý DAL trong các tình huống khác nhau và ý kiến ​​của họ về cách kỹ thuật hoạt động hoặc không hoạt động tốt.

Trả lời

2

Thật không may tôi không nghĩ rằng có một "cách tốt hơn", nó quá phụ thuộc vào tình hình cụ thể như những gì tiếp cận DAL bạn sử dụng. Một cuộc thảo luận tuyệt vời về "trạng thái của nghệ thuật" là Patterns of Enterprise Application Architecture bởi Martin Fowler.

Chương 10, Các mẫu kiến ​​trúc nguồn dữ liệu nói riêng về hầu hết các mẫu được sử dụng phổ biến nhất cho các ứng dụng kinh doanh.

Nói chung, tôi đã tìm thấy bằng cách sử dụng phương pháp đơn giản nhất đáp ứng các yêu cầu bảo trì cơ bản và khả năng thích ứng là lựa chọn tốt nhất.

Ví dụ về một dự án gần đây, một "Cổng dữ liệu hàng" đơn giản là tất cả những gì tôi cần. (Đây chỉ là các lớp được tạo mã cho mỗi bảng cơ sở dữ liệu có liên quan, bao gồm các phương thức để thực hiện các hoạt động CRUD). Không có cuộc tranh luận bất tận về ORM so với procs lưu trữ, nó chỉ làm việc, và đã làm công việc cần thiết tốt.

+0

Tôi đồng ý rằng với các tình huống khác nhau, câu trả lời sẽ khác, nhưng tôi chỉ tìm kiếm một số kỹ thuật khác nhau cách họ làm việc. –

1

Có một số mẫu phổ biến. 'The patterns of enterprise architecture' cuốn sách là một tài liệu tham khảo tốt cho các:

  • Bảng liệu Gateway
  • Row liệu Gateway
  • Active Record
  • liệu Mapper

Nếu bạn sử dụng một ORM, như LLBLGen, bạn có được sự lựa chọn của tự phục vụ hoặc bộ chuyển đổi.

4

Tôi đã phụ thuộc rất nhiều vào Billy McCafferty's NHibernate Best Practices article/sample code cho nhiều ứng dụng Web/WinForms ngay bây giờ. Đó là một bài viết tuyệt vời bằng văn bản mà sẽ cung cấp cho bạn một kiến ​​trúc mẫu vững chắc tốt - ngoài việc dạy bạn NHibernate cơ bản và TDD. Anh ta cố gắng cung cấp cho bạn một cái nhìn tổng quan về các quyết định thiết kế và kiến ​​trúc của mình.

Anh ấy tạo DAL rất thanh lịch bằng cách sử dụng DataAccessObjects chung mà bạn có thể mở rộng cho từng đối tượng miền - và kết hợp rất lỏng lẻo với BL sử dụng giao diện và DAOFactory. Tôi khuyên bạn nên xem xét BasicSample đầu tiên, đặc biệt là nếu bạn chưa từng làm việc với NHibernate trước đây.

Lưu ý, bài viết này dựa chủ yếu vào NHibernate, nhưng tôi nghĩ rằng cách tiếp cận chung nó có thể dễ dàng thay đổi để phù hợp với các ORM khác.

1

Nếu bạn đang đi xuống tuyến đường NHibernate (bài viết tốt liên kết BTW từ @Watson ở trên), sau đó tôi khuyên bạn nên kiểm tra dự án mẫu suvius-flamingo từ codebetter. Ông có một dự án mẫu rất đẹp, ngắn gọn, thể hiện MVC và NHibernate trong hành động.

Đây là số suvius-flamingo link.

1

[cập nhật] này không còn giá trị, thiết kế của dự án này đã được thay đổi [/ cập nhật]

Trong dự án mã nguồn mở của chúng tôi Bunian, chúng tôi kết luận rằng Business Objects (toàn bộ thành phần) là cốt lõi của hệ thống và mọi thứ sẽ xoay quanh nó bao gồm cả lớp truy cập dữ liệu đó.

Thành phần kinh doanh sẽ ra lệnh cho người khác những gì nó cần, ngụ ý rằng thông qua itnerfaces. Ví dụ đối tượng kinh doanh Người sẽ có một thành viên giao diện được gọi là IRepositoryForPerson, thành viên này sẽ được chỉ định một cá thể thông qua vùng chứa Dependency Injection khi cần.

Để biết thêm chi tiết kiểm tra bài viết trên blog của tôi ở đây:

http://www.emadashi.com/index.php/2008/11/data-access-within-business-objects-bunian-design//

và kiểm tra mã Bunian ở đây (mặc dù nó là nghiệp dư chưa):

http://www.codeplex.com/Bunian

Tất nhiên sẽ có trường mới nổi những thứ với cách tiếp cận này giống như vòng đời của phiên truy cập dữ liệu (nếu bạn đang sử dụng NHibernate chẳng hạn). nhưng điều đó sẽ cho một câu hỏi khác tôi đoán :)

tôi hy vọng bạn tìm thấy điều này hữu ích

1

Tôi sẽ giả sử bạn có nghĩa là viết một DAL mà được truy cập vào SQL, vì đây là một phần phổ biến nhất hiện nay. Nếu các vấn đề lớn nhất trong việc viết một DAL đối với SQL là phần ORM. Đó là, có một sự trở kháng không phù hợp cơ bản giữa lập trình OO và các lược đồ cơ sở dữ liệu quan hệ. Đã có nhiều nỗ lực tuyệt vời, thành công ngay cả khi viết ORM. Nhưng tất cả họ đều bị cùng một vấn đề đó là lợi ích của họ: họ trừu tượng bạn ra khỏi SQL cơ bản được tạo ra. Tại sao đây là một vấn đề, là hiệu suất của cơ sở dữ liệu của bạn là một thành phần quan trọng của hệ thống của bạn hoạt động tổng thể như thế nào. Nhiều ORM (có lẽ là hầu hết) không chỉ có hiệu suất nhỏ hơn nhiều so với các truy vấn chuẩn, nhưng thực sự khuyến khích các mẫu sử dụng sẽ làm giảm hiệu suất đáng kể (duyệt các mối quan hệ liên tục trong vòng lặp khi truy vấn các bộ sưu tập là một ví dụ phổ biến). khác). Tất nhiên, sau khi tìm hiểu chi tiết về API ORM, bạn thường có thể tìm thấy các cách thức xung quanh các ổ gà hiệu năng này.

Việc hiện tại của tôi về trạng thái ORM là tôi muốn nó hoạt động càng ít càng tốt, trong khi vẫn cho tôi hiệu quả của một thư viện vững chắc chăm sóc tất cả các loại hạt và bu lông truy cập dữ liệu. Nói cách khác, bởi vì tôi không nghĩ rằng chúng là "đủ tốt", và có thể không bao giờ được với SQL như là kết thúc, tôi muốn giữ quyền kiểm soát ở mức kim loại trần, và tôi sẽ thả xuống để viết SQL bằng cách tay mà không do dự trong nhiều trường hợp, bất kể ORM, bởi vì tôi biết cách cụ thể tôi muốn dữ liệu được truy vấn cho các nhu cầu nhất định của tôi. Điều này rõ ràng là một cách tiếp cận dễ vỡ hơn để mã hóa hơn nếu bạn sử dụng ORM một cách tôn giáo như nó được dự định, do đó, bạn phải tinh tấn hơn về thử nghiệm đơn vị, SQL injection và tách mối quan tâm thích hợp . Vì vậy, tổng hợp, tôi đồng ý với Ash, mặc dù điều đó không ngụ ý anh ấy/cô ấy đồng ý với tôi :)

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