2009-02-24 30 views
7

Tôi đang xem xét việc tạo một trình tạo lớp nhỏ cho một dự án. Tôi đã được đọc về CodeDOM vì vậy nó ngữ nghĩa của việc tạo ra các lớp học không xuất hiện là một vấn đề, nhưng không chắc chắn oh làm thế nào để tích hợp tốt nhất thế hệ vào quá trình phát triển và triển khai.C# Code Generation

  1. Tôi nên kích hoạt việc tạo lớp học như thế nào? Tôi đã đọc nó phải là một phần của quá trình xây dựng, làm thế nào tôi nên làm điều này?

  2. Các lớp học sẽ được tạo ở đâu? Tôi đọc rằng các tập tin không nên được chỉnh sửa bằng tay, và không bao giờ kiểm tra vào kiểm soát nguồn. Tôi có nên lo lắng về điều này và chỉ cần tạo ra các lớp học vào cùng một thư mục với máy phát điện?

Trả lời

0

Câu trả lời cho câu hỏi của bạn phụ thuộc một phần vào mục đích của các lớp đã tạo.

Nếu các lớp được tạo như một phần của sự phát triển , chúng sẽ được tạo dưới dạng tệp văn bản và được kiểm tra vào SCM của bạn giống như bất kỳ lớp nào khác.

Nếu lớp học của bạn được tạo động tại thời gian chạy như là một phần của hoạt động của hệ thống của bạn, tôi sẽ không sử dụng CodeDOM chút nào. Tôi muốn sử dụng Reflection.

8

Hãy xem các mẫu T4 (được xây dựng trong VS2008). Nó cho phép bạn tạo các lớp "template" tạo mã cho bạn. Oleg Sych là một nguồn tài nguyên vô giá cho việc này.

Link for Oleg's tutorial on code generation.

+0

Cách giải quyết vấn đề này? Tôi không chắc chắn đây là những gì blu có nghĩa là, nhưng tôi muốn kết hợp tự động tạo ra mã trong xây dựng của tôi ... có một số tập tin IDL tạo ra các lớp C#. Bây giờ, nếu một thành viên khác trong nhóm thay đổi IDL, tôi muốn lớp C# của tôi được xây dựng lại. Làm mẫu địa chỉ đó? – ripper234

+0

Các mẫu T4 có thể được định cấu hình để tạo các lớp trên mọi bản dựng. Nó không tốn thời gian, và là một thực hành tốt. –

+0

@Michael: các tệp không bao giờ được tạo lại không cần thiết, vì nó làm chậm quá trình xây dựng. Tất cả mọi thứ mà làm chậm một xây dựng thêm lên và được cảm thấy hơn và hơn và hơn và hơn. Hãy tin tôi khi tôi nói vấn đề này dễ ngăn chặn hơn là sửa chữa sau khi nó được thiết lập tốt trong bản dựng. –

0

Tôi biết về sự hiện diện của các mẫu T4 (và biết nhiều người sử dụng chúng), nhưng tôi chưa tự sử dụng chúng. Ngoài những điều đó, bạn có hai tùy chọn chính:

  1. Sử dụng một bộ lọc đơn để biến nguồn ngay bên trong dự án. Bất cứ khi nào bạn lưu tài liệu mà bạn chỉnh sửa, nó sẽ tự động tạo lại tệp mã. Nếu bạn sử dụng điều khiển nguồn, tệp được tạo sẽ được kiểm tra như một phần của dự án. Có một vài hạn chế với điều này:
    • Bạn chỉ có thể tạo một đầu ra cho mỗi đầu vào.
    • Vì bạn không thể kiểm soát thứ tự tệp được tạo và tệp không được tạo tại thời điểm xây dựng, đầu ra của bạn chỉ có thể được bắt nguồn từ một tệp đầu vào duy nhất.
    • Trình tạo tệp duy nhất phải được cài đặt trên máy của nhà phát triển nếu chúng có kế hoạch chỉnh sửa tệp đầu vào. Vì mã được tạo trong điều khiển nguồn, nếu chúng không chỉnh sửa đầu vào thì chúng sẽ không cần phải tạo lại đầu ra.
    • Vì đầu ra chỉ được tạo khi đầu vào được lưu, đầu ra không được phụ thuộc vào bất kỳ trạng thái nào khác ngoài nội dung chính xác của tệp đầu vào (ngay cả đồng hồ hệ thống).
  2. Tạo mã như một phần của bản dựng. Đối với điều này, bạn viết một tệp mục tiêu MSBuild. Đối với điều này, bạn có toàn quyền kiểm soát (các) đầu vào và (các) đầu ra để phụ thuộc có thể được xử lý. Trạng thái hệ thống có thể được coi là phụ thuộc đầu vào khi cần thiết, nhưng hãy nhớ rằng mọi bản dựng yêu cầu tạo mã đều mất nhiều thời gian hơn bản dựng sử dụng kết quả được tạo trước đó.Kết quả (tệp nguồn được tạo) thường được đặt trong thư mục obj và được thêm vào danh sách các đầu vào sẽ tới csc (trình biên dịch C#). Các giới hạn của phương pháp này:
    • Sẽ khó ghi một tệp mục tiêu hơn một Trình tạo đơn.
    • Bản dựng phụ thuộc vào việc tạo đầu ra, bất kể người dùng có đang chỉnh sửa đầu vào hay không.
    • Vì mã được tạo không phải là một phần của dự án, khó có thể xem mã được tạo cho những thứ như thiết lập điểm ngắt.