5

Nhìn vào điều khiển của tôi (Tôi đang sử dụng Dependency Injection để phụ thuộc quản lý):Bộ điều khiển .NET MVC với nhiều Vùng lưu trữ và Dịch vụ?

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext) 
{ 
    _roleRepository = roleRepository; 
    _siteRepository = siteRepository; 
    _userRepository = userRepository; 
    _dbContext = dbContext; 
} 

Có một lớp học với nhiều phụ thuộc là một mùi mã? Đúng?

Nhưng, trong ví dụ của tôi, tôi cần liên kết UsersSites trong một Role, sau đó tôi cần những phụ thuộc này để thực hiện liên kết này.

Một số người trong danh sách gửi thư Tôi được cho biết rằng có quá nhiều phụ thuộc là dấu hiệu cho thấy có điều gì đó có thể sai. Nhưng tôi không thấy cách nào khác. Tôi phân chia trách nhiệm của mình, có điều gì đó trong tình huống đó tôi không biết cách đối xử? Có gì sai không?

Cập nhật:

Tôi cần Repositories và DbContext vì DbContext là UnitOfWork tôi, kho không lưu.

Ví dụ này là CRUD đơn giản với một số chức năng khác như Liên kết trong Chế độ xem có GRID.

Cập nhật 2:

Tôi đang sử dụng một kiến ​​trúc nơi UI lớp của tôi là MVC.

+1

Thông thường tôi sẽ chỉ tạo kho lưu trữ cho các nguồn tổng hợp, không phải mọi thực thể. Tôi không biết tên miền của bạn, nhưng ruột của tôi cho tôi biết bạn có quá nhiều kho. Ngoài ra, tại sao bạn cần các kho lưu trữ và dbcontext? Cuối cùng, tôi thường thích thực hiện các hoạt động nghiệp vụ kiểu "dàn nhạc" trong một 'Dịch vụ', và để thỏa thuận dịch vụ với các kho lưu trữ, vv. Sự phụ thuộc của bộ điều khiển sau đó chỉ trở thành dịch vụ. – Brook

+0

@Brook xem cập nhật. –

+1

có thể trùng lặp của [Trong asp.net-mvc, là có một cách thanh lịch hơn bằng cách sử dụng IOC để tiêm kho lưu trữ mutiple vào một bộ điều khiển?] (Http://stackoverflow.com/questions/7311623/in-asp-net-mvc- is-there-a-more-elegant-way-sử dụng-ioc-to-inject-mutiple-repositor) – Omar

Trả lời

8

Tôi không tin đó là điều xấu, vì bạn quản lý các phụ thuộc với khung DI tốt (tức là không sử dụng poor man's DI). Bằng cách này, bạn nói rõ ràng rằng bộ điều khiển sẽ cần tất cả những điều này, bởi vì nó sẽ. (Lưu ý rằng trong nhiều phần khác của ứng dụng của bạn, điều này có thể không phải là một đối số hợp lệ - bộ điều khiển đặc biệt theo cách bạn kiểm soát và điều khiển luồng chương trình, do đó, có một giải thích tự nhiên tại sao nó cần phải nhìn thấy rất nhiều các bộ phận của ứng dụng ...)

Tuy nhiên, nếu bạn thực sự muốn hạn chế số lượng phụ thuộc vào trường hợp cụ thể này, nó có thể làm cho tinh thần để tạo ra một MembershipService, mà làm tất cả các công việc liên quan đến Users, SitesRoles . Điều đó sẽ có sự phụ thuộc vào ba kho đó, và bộ điều khiển của bạn sẽ chỉ phụ thuộc vào dịch vụ thành viên.


Để đối phó với cập nhật của bạn: Bạn có thể đăng ký các đơn vị của công việc (ví dụ: bối cảnh db) như là một "theo yêu cầu của web" singleton - đây là có thể với Lâu đài Windsor và nhiều khuôn khổ DI khác. Sau đó, bạn có thể để kho lưu trữ của bạn phụ thuộc vào nó và thực hiện tất cả các thay đổi, và để cho bộ điều khiển phụ thuộc vào nó để tiết kiệm, và tất cả chúng sẽ nhận được cùng một cá thể được giao cho chúng bởi khung DI.

+0

xem cập nhật, vấn đề là MVC là UI Layer của tôi. Đối số tôi nhận được là: Bộ điều khiển có trách nhiệm trả lời các yêu cầu từ người dùng và về nguyên tắc không liên quan đến tên miền của bạn. –