Chúng tôi hiện đang sử dụng Entity Framework làm ORM trên một vài ứng dụng web và cho đến hiện tại, nó phù hợp với chúng tôi cũng như tất cả dữ liệu của chúng tôi được lưu trữ trong một cơ sở dữ liệu. Chúng tôi đang sử dụng mẫu kho lưu trữ và có các dịch vụ (lớp miền) sử dụng các mẫu này và trả trực tiếp các thực thể EF cho bộ điều khiển ASP.NET MVC.
Tuy nhiên, một yêu cầu đã được đưa ra để sử dụng API của bên thứ 3 (thông qua dịch vụ web) sẽ cung cấp cho chúng tôi thêm thông tin liên quan đến người dùng trong cơ sở dữ liệu của chúng tôi. Trong cơ sở dữ liệu Người dùng cục bộ của chúng tôi, chúng tôi sẽ lưu trữ ID bên ngoài mà chúng tôi có thể cung cấp API để nhận thêm thông tin. Có khá nhiều thông tin có sẵn, nhưng vì mục đích đơn giản, một trong số đó liên quan đến công ty của người dùng (tên, người quản lý, phòng, chức danh công việc, địa điểm, v.v.). Thông tin này sẽ được sử dụng ở nhiều nơi trong các ứng dụng web của chúng tôi - trái ngược với việc được sử dụng ở một nơi duy nhất.
Vì vậy, câu hỏi của tôi là, nơi nào tốt nhất để cư trú và truy cập thông tin này? Vì nó được sử dụng ở nhiều nơi khác nhau, nên không thể tìm nạp nó trên cơ sở đặc biệt ở bất cứ nơi nào chúng tôi sử dụng trong ứng dụng web - vì vậy việc trả lại dữ liệu bổ sung này từ lớp miền là điều hợp lý.
Suy nghĩ ban đầu của tôi chỉ là tạo ra một lớp mô hình trình bao bọc chứa thực thể EF (EFUser) và một lớp 'ApiUser' mới chứa thông tin mới - và khi chúng tôi có được một người dùng, chúng tôi sẽ nhận được EFUser, và sau đó nhận thêm thông tin từ API và điền vào đối tượng ApiUser. Tuy nhiên, trong khi điều này sẽ tốt cho việc có được một người dùng, nó sẽ rơi khi có nhiều người dùng. Chúng tôi không thể nhấn API khi nhận danh sách người dùng.
Suy nghĩ thứ hai của tôi chỉ là thêm một phương thức đơn lẻ vào thực thể EFUser trả về ApiUser và chỉ cần điền nó khi cần. Điều này giải quyết vấn đề trên vì chúng tôi chỉ truy cập nó khi chúng tôi cần.
Hoặc ý nghĩ cuối cùng là giữ một bản sao dữ liệu cục bộ trong cơ sở dữ liệu của chúng tôi và đồng bộ hóa nó với API khi người dùng đăng nhập. Đây là công việc tối thiểu vì nó chỉ là một quá trình đồng bộ hóa - và chúng tôi không có chi phí đánh DB và API mỗi lần chúng tôi muốn lấy thông tin người dùng. Tuy nhiên, điều này có nghĩa là lưu trữ dữ liệu ở hai nơi và cũng có nghĩa là dữ liệu đã hết hạn đối với bất kỳ người dùng nào chưa đăng nhập trong một thời gian.
Có ai có lời khuyên hay đề nghị nào về cách tốt nhất để xử lý loại kịch bản này không?
it's not really sensible to fetch it on an ad-hoc basis
-- Tại sao? Vì lý do hiệu suất?