Đây là câu hỏi đầu tiên:Tự động tạo một AppSettings lớp mạnh mẽ-gõ
Đây có phải là có thể? Tôi lấy cảm hứng từ Joe Wrobel's work (một sự lãng quên của sự lãng quên Codeplex project). Ở đây, bạn thực hiện công việc của mình trong việc tạo hồ sơ cho nhà cung cấp, và nó thực hiện công việc tạo ra sự đánh máy mạnh mẽ cho nó, tạo ra một mặt tiền cho lớp Profile một cách hiệu quả.
Và giờ là câu chuyện sau!
Tôi thực sự không thích magic strings. Chúng khá tệ và có thể gây ra một số vấn đề nghiêm trọng khi cập nhật ứng dụng của bạn. Đã từng làm việc trong các ngôn ngữ như PHP và ColdFusion, tôi biết rằng việc đặt chúng vào ứng dụng của bạn thật dễ dàng và quên chúng đi cho đến khi bạn cần thay đổi. Và sau đó bạn phải săn lùng từng biến thể của chúng và thay đổi chúng cho phù hợp.
.NET thực sự không tốt hơn nhiều nếu bạn làm theo mẫu ứng dụng 'ngoài hộp'. Rất nhiều ví dụ hiện có sử dụng các ứng dụng trong web.config để lưu trữ các cài đặt khác nhau. Đây thực sự là một nơi tốt để lưu trữ và hoàn hảo cho hầu hết các ứng dụng. Tuy nhiên, vấn đề bắt đầu phát sinh, khi bạn bắt đầu gọi trực tiếp những vấn đề này - ví dụ: ConfigurationManager.AppSettings["MyAppSetting"]
. Sau đó, bạn không thực sự tốt hơn so với một người sử dụng PHP khi bạn trở lại sử dụng dây ma thuật.
Đây là nơi facades tham gia. Mặt tiền cung cấp cách tạo đối tượng được nhập mạnh từ chuỗi ma thuật ở một nơi và tham chiếu nhà phát triển từ phần còn lại của ứng dụng.
Bây giờ, thay vì sử dụng web.config để chứa các ứng dụng của tôi, tôi sử dụng cơ sở dữ liệu để giữ tất cả. Khi bắt đầu ứng dụng, các combo tên/giá trị được lấy ra, và sau đó được thêm vào một cách tuần tự vào ConfigurationManager.AppSettings
qua Set
. Không có biggie (ngoài số problem Tôi đã có trước đó!).
Lớp mặt ứng dụng này có thể truy cập bởi lớp dữ liệu, lớp dịch vụ và lớp trình bày và giữ những thứ như chế độ ứng dụng, dịch vụ nào sẽ sử dụng yada yada yada và hạn chế nhu cầu tìm kiếm nhiều chuỗi ma thuật, xuống đến hai chuỗi ma thuật - một (tên) ở mặt tiền, và cái kia (tên và giá trị) ở điểm tạo ra (trong đó, đối với tôi là db).
Lớp mặt tiền này cuối cùng sẽ nhận được khá lớn và cuối cùng tôi sẽ cảm thấy mệt mỏi vì phải cập nhật cả hai.
Vì vậy, những gì tôi muốn làm là có một lớp ApplicationFacade tự động tạo ra mỗi khi xây dựng xong. Và bây giờ quay lại đầu ... Liệu điều này có thể?
Đây là một ý tưởng thú vị, nhưng tôi không phải là một fan hâm mộ lớn của CodeSmith phải trung thực. Cuối cùng, tôi đã viết một lớp của riêng mình mà được yêu cầu trong mọi trường hợp vì không có cách nào để ứng dụng của tôi suy ra loại ứng dụng của tôi là gì. –
Tôi đã thêm một chút mã vào bài đăng của mình. Hy vọng nó có thể giúp bạn. – Cheburek
Đó là một giải pháp thực sự thú vị! Một điều có vẻ như có vấn đề với (và đây là VB IsNumeric) là "0,5,0" mà VB tin là một giá trị số, mặc dù tôi không chắc chắn như thế nào! –