2010-01-12 52 views
7

Tôi đang gặp khó khăn với việc tránh phụ thuộc theo chu kỳ. Tôi biết tôi cần phải ẩn thực hiện với giao diện, nhưng làm thế nào để xử lý một tình huống với hai hội đồng, nơi mà mỗi hoặc là cần phải nhanh chóng các lớp học từ khác hoặc gọi một phương pháp tĩnh từ đó?Phụ thuộc theo chu kỳ - nhưng lại một lần nữa

Edit:

Tôi hiểu điều này có thể được cố định bằng cách sử dụng chỉ là một hội duy nhất. Chúng tôi có nhiều hơn một lý do sau:

  • "hệ thống" của chúng tôi bao gồm một số thành phần. Một khách hàng có thể chỉ có một thành phần, hoặc nhiều hơn - vì vậy những gì chúng tôi đã làm là chúng tôi tạo ra các hội đồng khác nhau cho các thành phần khác nhau. Nó có ý nghĩa - tại sao bạn sẽ triển khai những thứ mà bạn không cần - nó không phải là một sự lãng phí bộ nhớ?
  • những thứ phổ biến với nhiều thành phần hơn, chủ yếu là các lớp trợ giúp, đã đi đến một hội đồng khác - không phải tất cả các thành phần đều cần tất cả các lớp trợ giúp, vì vậy có nhiều hội đồng hơn
  • tuy nhiên, hai ứng dụng này có thể nói chuyện với nhau - hệ thống cho các bác sĩ gửi yêu cầu đến hệ thống cho y tá, các yêu cầu sẽ quay trở lại, v.v. - và đây là nơi mà vấn đề thực tế là

Có hai thành phần nói chuyện với nhau thực sự chỉ là một trong những tình huống chúng tôi có một sự phụ thuộc tuần hoàn mâu thuẫn trước đó. Nó xảy ra ngay bây giờ và sau đó và khi nó xảy ra chúng ta cần phải tìm ra cách để giải quyết nó - di chuyển một số lớp xung quanh - và đôi khi chúng ta cần phải thêm một hội đồng mới.

Bây giờ chúng tôi có 8-10 hội đồng, và có vẻ như bạn càng nhanh càng được thêm :) - ví dụ: chúng tôi đã thêm một tính năng chung có sử dụng thuộc tính tùy chỉnh - thuộc tính - chỉ trong trường hợp chúng tôi không gặp xung đột trong tương lai

Đây có phải là cách để đi không? Tôi thực sự cảm thấy chúng tôi đang làm điều gì đó sai về cơ bản :)

Tôi thực sự đánh giá cao ý kiến ​​của bạn.

+0

Không chắc chắn bạn đã giải thích đủ rõ. Có lẽ bạn nên chỉ sử dụng một hội đồng. –

+1

Vui lòng chỉnh sửa câu hỏi để bao gồm bối cảnh miền và/hoặc một số mã mẫu. –

Trả lời

10

Tôi sẽ cố gắng kéo các loại vi phạm ra thành một hội đồng 'phổ biến' thứ ba mà hai hội đồng 'cha mẹ' tham chiếu.

Tôi sẽ hỏi tại sao bạn cần nhiều hội đồng ở nơi đầu tiên, tuy nhiên, khi cả hai đều phụ thuộc lẫn nhau. Assemblies là các đơn vị triển khai và có thể được phiên bản riêng biệt với nhau. Nếu bạn không cần chức năng này, tôi sẽ chỉ gói tất cả mọi thứ vào một hội đồng duy nhất và được thực hiện với nó. Điều này có thêm tiền thưởng tăng tốc việc xây dựng và đơn giản hóa việc triển khai.

Hãy cố gắng thêm nhiều ngữ cảnh hơn cho câu hỏi của bạn - có thể có một số chi tiết chúng tôi có thể trợ giúp nếu chúng tôi biết chính xác bạn đang cố gắng làm gì.

Chỉnh sửa lại bổ sung: Để trả lời cụ thể câu hỏi của bạn về việc có nhiều hội đồng hay không, hãy xem xét điều này: Tôi đã từng làm việc trên một codebase như thế này với Visual Studio 2008, nơi có khoảng 20 riêng biệt các tệp dự án mở trong giải pháp cùng một lúc. 20 dự án này đều hỗ trợ các tệp DLL cho một EXE chính duy nhất. Các dự án này không được chia sẻ với các sản phẩm khác, cũng không có yêu cầu phiên bản lạ.

Làm việc với giải pháp này là một cơn ác mộng. Phải mất 5 phút để Visual Studio biên dịch giải pháp. Biên dịch trong dòng lệnh với MSBuild mất 2 phút. Điều này làm cho những thay đổi gia tăng một bài tập trong sự thất vọng và đau đớn. Vì tất cả các dự án đã được sử dụng trong việc tạo ra tệp thực thi chính, không ai trong số chúng có thể được dỡ xuống để tăng tốc biên dịch, và có một nhiệm vụ điều hành chống lại các dự án phá vỡ thành các giải pháp riêng biệt.

Nếu bạn kết thúc với một giải pháp như thế này, hãy tin tôi khi tôi nói rằng bạn và đồng đội của bạn sẽ nổi loạn một ngày ... Khuyến nghị của tôi là chia nhỏ các giải pháp của mình có thể được thay đổi cùng nhau; sau đó tạo một nhiệm vụ xây dựng tùy chỉnh để sao chép assembly cuối cùng vào một thư mục chung mà tất cả các assembly khác có thể tham chiếu.

+0

Erik, cảm ơn bạn đã bình luận của bạn –

+0

Không có vấn đề - Tôi hy vọng nó sẽ giúp. =) –

3

Bạn có thể đặt những thứ phổ biến vào trong hội đồng của riêng mình không?

Tôi đồng ý với một người nhận xét rằng chúng tôi có thể cần thêm thông tin.

Tại sao bạn có 2 hội đồng?

Có lý do gì không phải trong một hội đồng không?

Các hội đồng này được kết nối như thế nào? Chỉ cần thông qua tài liệu tham khảo hoặc có WCF, vv thành phần tham gia?

Chúng tôi đã cung cấp cho bạn các câu trả lời đơn giản nhất, nhưng có thể có nhiều câu trả lời hơn là chúng tôi có thể mô tả ngắn gọn của bạn.

+0

Thường thì bạn có các lớp học quá nhiều. Bạn có thể cần phải phân hủy một số lớp học để tìm các công cụ phổ biến. –

1

Một cách để tránh điều đó là sử dụng cấu trúc proxy/doanh nghiệp.

AssemblyA.Proxy - chứa hai lớp: một giao diện (chúng ta hãy gọi nó IServices), và lớp khác chịu trách nhiệm kêu gọi AssemblyA.Business phương pháp.

AssemblyA.Business - chứa một lớp, triển khai các phương thức được khai báo trên IServices.

AssemblyB.Proxy - tương tự để AssemblyA.Proxy

AssemblyB.Business - tương tự để AssemblyA.Business

Bằng cách này, mỗi thành phần Proxy sẽ tham khảo chỉ logic kinh doanh mà họ đang nghĩ đến. AssemblyA.Proxy sẽ có một tham chiếu đến AssemblyA.Business; AssemblyB.Proxy sẽ có một tham chiếu đến AssemblyB.Business. AssemblyA.Business sẽ tham khảo AssemblyB.Proxy, v.v.

Không biết nếu nó rõ ràng nhưng hy vọng nó sẽ giúp.

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