Tôi đã viết câu trả lời này khoảng bốn năm trước và ý kiến của tôi đã không thay đổi. Nhưng kể từ đó đã có những phát triển đáng kể trên mặt trận dịch vụ vi mô. Tôi đã thêm ghi chú cụ thể cho các dịch vụ vi mô vào cuối ...
Tôi sẽ cân nhắc với ý tưởng này, với kinh nghiệm thực tế để sao lưu phiếu bầu của tôi.
Tôi đã được đưa vào một ứng dụng lớn có năm bối cảnh cho một cơ sở dữ liệu. Cuối cùng, chúng tôi đã kết thúc việc loại bỏ tất cả các bối cảnh ngoại trừ một bối cảnh - quay trở lại một bối cảnh duy nhất.
Lúc đầu, ý tưởng về nhiều bối cảnh có vẻ như là một ý tưởng tốt. Chúng tôi có thể tách quyền truy cập dữ liệu của mình vào các miền và cung cấp một số bối cảnh gọn nhẹ. Âm thanh như DDD, phải không? Điều này sẽ đơn giản hóa việc truy cập dữ liệu của chúng tôi. Một đối số khác là về hiệu suất ở chỗ chúng ta chỉ truy cập vào bối cảnh mà chúng ta cần.
Nhưng trong thực tế, khi ứng dụng của chúng tôi phát triển, nhiều bảng của chúng tôi đã chia sẻ các mối quan hệ trên các bối cảnh khác nhau của chúng tôi. Ví dụ: truy vấn bảng A trong ngữ cảnh 1 cũng yêu cầu tham gia bảng B trong ngữ cảnh 2.
Điều này để lại cho chúng tôi một vài lựa chọn nghèo nàn. Chúng ta có thể nhân đôi các bảng trong các bối cảnh khác nhau. Chúng tôi đã thử điều này. Điều này tạo ra một số vấn đề ánh xạ bao gồm ràng buộc EF yêu cầu mỗi thực thể phải có một tên duy nhất. Vì vậy, chúng tôi đã kết thúc với các thực thể có tên Person1 và Person2 trong các bối cảnh khác nhau. Người ta có thể tranh luận rằng đây là thiết kế kém về phía chúng tôi, nhưng mặc dù những nỗ lực tốt nhất của chúng tôi, đây là cách ứng dụng của chúng tôi thực sự phát triển trong thế giới thực.
Chúng tôi cũng đã thử truy vấn cả hai bối cảnh để có được dữ liệu chúng tôi cần. Ví dụ: logic kinh doanh của chúng tôi sẽ truy vấn một nửa những gì nó cần từ bối cảnh 1 và nửa còn lại từ bối cảnh 2. Điều này có một số vấn đề lớn. Thay vì thực hiện một truy vấn theo một ngữ cảnh, chúng tôi phải thực hiện nhiều truy vấn trên các bối cảnh khác nhau. Điều này có một hình phạt hiệu suất thực sự.
Cuối cùng, tin tốt là nó đã dễ dàng loại bỏ nhiều bối cảnh. Bối cảnh được dự định là một đối tượng nhẹ. Vì vậy, tôi không nghĩ hiệu suất là một đối số tốt cho nhiều bối cảnh. Trong hầu hết các trường hợp, tôi tin rằng một bối cảnh đơn giản hơn, ít phức tạp hơn và có khả năng sẽ hoạt động tốt hơn và bạn sẽ không phải thực hiện một loạt các công việc xung quanh để làm cho nó hoạt động.
Tôi nghĩ về một tình huống trong đó nhiều bối cảnh có thể hữu ích. Một bối cảnh riêng biệt có thể được sử dụng để khắc phục sự cố vật lý với cơ sở dữ liệu trong đó nó thực sự chứa nhiều hơn một miền. Lý tưởng nhất, một bối cảnh sẽ là một đối một với một miền, sẽ là một đối một với cơ sở dữ liệu. Nói cách khác, nếu một tập hợp các bảng không liên quan đến các bảng khác trong một cơ sở dữ liệu nhất định, thì có lẽ chúng nên được kéo ra một cơ sở dữ liệu riêng biệt. Tôi nhận ra điều này không phải lúc nào cũng thực tế. Nhưng nếu một tập hợp các bảng khác nhau đến mức bạn sẽ cảm thấy thoải mái khi tách chúng thành một cơ sở dữ liệu riêng biệt (nhưng bạn chọn không) thì tôi có thể thấy trường hợp sử dụng một bối cảnh riêng biệt, nhưng chỉ vì thực sự có hai miền riêng biệt.
Về dịch vụ vi mô, một bối cảnh duy nhất vẫn có ý nghĩa. Tuy nhiên, đối với các dịch vụ vi mô, mỗi dịch vụ sẽ có bối cảnh riêng chỉ bao gồm các bảng cơ sở dữ liệu có liên quan đến dịch vụ đó. Nói cách khác, nếu dịch vụ x truy cập bảng 1 và 2 và dịch vụ y truy cập bảng 3 và 4, mỗi dịch vụ sẽ có bối cảnh duy nhất của riêng nó bao gồm các bảng dành riêng cho dịch vụ đó.
Tôi quan tâm đến suy nghĩ của bạn.