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.
Đ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 –
@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
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) –