2009-02-18 35 views
6

Đối với một dự án lớn, nó có ý nghĩa để có một datacontext mà bản đồ ra cơ sở dữ liệu của bạn, mà bạn có thể tương tác với từ các lớp học của bạn?Tôi có nên sử dụng một LINQ DataContext hoặc nhiều?

Hoặc sẽ có ý nghĩa hơn khi chia nhỏ thành các datacontexts nhỏ, tập trung vào các tác vụ cụ thể trong cơ sở dữ liệu sẽ được yêu cầu.

Tôi tò mò về hiệu suất. Đó là sự hiểu biết của tôi rằng datacontext chính nó là một đối tượng rất nhẹ, chỉ khởi tạo bộ sưu tập nội bộ của nó khi chúng được yêu cầu vv. chỉ với hai bảng trong đó.

Tôi cũng nghĩ bạn sẽ hưởng lợi vào thời điểm JIT, vì lớp đầu tiên truy cập dữ liệu sẽ biên dịch dc của bạn hiện có sẵn cho tất cả các lớp.

+0

http://stackoverflow.com/questions/226127/multiple-single-instance-of-linq-to -sql-datacontext – spender

+0

tương tự nhưng không giống nhau :) Chúc mừng cho liên kết tôi mặc dù. – Spence

Trả lời

9

Tôi giả sử bạn đang hỏi về thiết kế so với mẫu thời gian chạy. Tôi nói chung tôi muốn nói no:

Mặc dù có thể phân vùng cơ sở dữ liệu của bạn thành nhiều ngữ cảnh dữ liệu, nếu muốn và không có sự chồng chéo giữa hai ngữ cảnh.

chồng chéo là Bad

ví dụ bạn có một số WebsiteContextAdminContext. WebsiteContext để hiển thị Product và hoàn thành Order giây. A WebsiteUser được gắn vào Order. AdminContext dành cho các thành viên Staff của bạn để xử lý tiền hoàn lại cho số bị hủy Orders, cũng tham chiếu WebsiteUser. AdminContext cũng cần đặt lại mật khẩu và cập nhật các chi tiết khác cho số WebsiteUser.

Bạn đang nghĩ đến việc làm điều này vì bạn không muốn trang web để xử lý hoặc thậm chí biết về Returns

WebsiteContext 
Product -- Order -- WebsiteUser 

AdminContext 
Staff -- Returns -- Order -- WebsiteUser 

Ở phía trên, chúng ta có thể thấy chúng tôi đang sao chép nhiều đối tượng trong dữ liệu khác nhau Các ngữ cảnh. Điều này có mùi xấu, và nó thực sự chỉ ra rằng nhân tạo phân chia cơ sở dữ liệu vào bối cảnh dữ liệu khác nhau là một quyết định sai lầm. Bạn có> 2 cơ sở dữ liệu sau khi tất cả, hay chỉ là một cơ sở dữ liệu? Sự trùng lặp vi phạm nguyên tắc DRY (Dont Repeat Yourself) vì WebsiteContext.WebsiteUser không giống với AdminContext.WebsiteUser và trong khả năng tất cả các mã sẽ lộn xộn khi một cái gì đó cần phải quan tâm đến cái mà họ đang tham chiếu.


Ngữ cảnh dữ liệu LINQ chỉ là một trình ánh xạ OR và cần được coi là hộp đen ưa thích giúp viết mã truy cập dữ liệu dễ dàng hơn. Một số bản demo LINQ làm cho nó trông giống như bạn không còn cần các lớp khác, nhưng một chương trình của bất kỳ phức tạp vẫn được hưởng lợi từ một thiết kế lớp.

Có lẽ bạn nên xử lý các đối tượng LINQ như các đối tượng để dễ dàng chuyển dữ liệu và tạo lớp Miền ẩn chúng dưới dạng chi tiết triển khai. Có một đọc của DDD - Domain Driven Design.

Ngày của riêng mình, chỉ sử dụng các đối tượng LINQ từ giao diện người dùng giống nhất với mẫu Transaction Script. Trong trường hợp như vậy bạn vẫn sẽ được hưởng lợi từ việc có một lớp logic mà sẽ chăm sóc các chi tiết.


Mặc dù bạn có thể không muốn trách nhiệm của bối cảnh quá rộng, ngữ cảnh dữ liệu chỉ là biểu diễn của cơ sở dữ liệu. Nó không phải là một cơ chế bảo mật, và nó không thể ngăn cản bạn làm hỏng dữ liệu.

1

Từ góc "mẫu kho lưu trữ", có điều gì đó cần phải nói để có các tập hợp riêng biệt và giảm thiểu các thuộc tính điều hướng giữa các tập hợp. Tôi không chắc chắn rằng cái gì đó mặc dù ... hiện tại tôi đang xem xét bằng cách sử dụng một dbml vừa phải, với nhiều kho lưu trữ bằng cách sử dụng nó (giao diện người dùng không sử dụng datacontexts trực tiếp - chỉ các lớp kho lưu trữ), với các thuộc tính điều hướng được đánh dấu nội bộ để DAL có thể sử dụng chúng ... Có lẽ ...

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