2012-10-16 27 views
5

Tôi cảm thấy mình bị kẹt giữa một số giải pháp tồi ở đây và cần một số lời khuyên về cách giảm thiểu sự đau đớn trong tương lai. Chúng tôi đang sử dụng ồ ạt ORM, mà trong constructor của nó có những dòng này:Cách ít nhất để thay đổi hành vi của nhà xây dựng

var _providerName = "System.Data.SqlClient"; 

if (ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName != null) 
    _providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName; 

_factory = DbProviderFactories.GetFactory(_providerName); 
ConnectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; 

Phần quan trọng đối với tôi ở đây là nó đọc chuỗi kết nối từ ConfigurationManager. Chúng tôi đang cố gắng tập trung cấu hình, và khi làm điều này, chúng tôi muốn giữ các chuỗi kết nối ra khỏi web/app.configs của chúng tôi (chúng tôi có khoảng 150 máy chủ được triển khai ở đâu đó, vì vậy chi phí đang trở nên đáng kể). Tuy nhiên, điều này bị phá vỡ kể từ khi tập tin cấu hình đọc là hardcoded ở đây, và bộ sưu tập ConnectionStrings chỉ đọc (có cách giải quyết, nhưng tất cả chúng đều khá bẩn).

Một cách có thể có trong số này là trích xuất các dòng này thành một phương thức ảo và sau đó thay đổi nó bằng kế thừa. Đây không phải là quá tốt đẹp khi chúng tôi muốn cập nhật Massive mặc dù, và cũng gọi các phương pháp ảo từ một nhà xây dựng có khả năng xấu.

Tôi có các lựa chọn thay thế nào khác? Ưu tiên chính ở đây là giảm thiểu tác động khi cập nhật.

+1

Điều này nghe có vẻ như là cơ hội cho mẫu Định vị dịch vụ: http://en.wikipedia.org/wiki/Service_locator_pattern –

+0

@JoshC .: Có, một giải pháp thay thế là cấu trúc lại nó thành một số giao diện 'IConfigurationManager' có mặc định thực hiện chỉ cần sử dụng ConfigurationManager. Tôi không chắc chắn tuy nhiên những ưu/nhược điểm là so với thừa kế? – carlpett

+0

lưu trữ các chuỗi kết nối của bạn vào một tệp riêng biệt là gì? điều đó có giúp ích gì không? (xem 'Sử dụng Tệp Cấu hình Bên ngoài' msdn.microsoft.com/en-us/library/ms254494(v=vs.80).aspx) –

Trả lời

1

Cuối cùng, chúng tôi quyết định thực hiện một thay đổi tối thiểu cho lớp học lớn bằng cách làm cho nó một phần. Sau đó, trong một tệp riêng biệt, chúng tôi đã thêm một hàm tạo bổ sung đã chấp nhận các tham số khác nhau. Bằng cách này, nếu chúng tôi cập nhật thư viện, thay đổi duy nhất chúng tôi cần thực hiện là thêm lại partial.

1

Bạn có thể loại bỏ sự phụ thuộc nguồn cấu hình của đối tượng bằng cách truyền vào tất cả các trường bắt buộc thông qua hàm tạo.

Xem Martin Fowler's article về Chèn phụ thuộc. Khái niệm tương tự cũng áp dụng ở đây.

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