tôi có một loạt các lớp kinh doanh với autoproperties:Refactor C# thuộc tính tự động cho các trường và thuộc tính getter/setter?
public class A {
public int Id { get; set; }
public string Title { get; set;}
}
Do việc áp dụng tiến hóa, có một yêu cầu mới để cho phép theo dõi những thay đổi của các tài sản, để gửi đến các cửa hàng ủng hộ chỉ thay đổi dữ liệu.
Để đạt được mục tiêu này, tôi phải chuyển đổi tất cả các thuộc tính đến lĩnh vực bất động sản + như thế này:
public class A {
private int m_Id;
public int Id {
get { return m_Id; }
set {
if(m_Id != value){
SetChanged("Id");
m_Id = value;
}
}
}
private string m_Title;
public string Title
{
get { return m_Title; }
set {
if(m_Title != value){
SetChanged("Title");
m_Title = value;
}
}
}
protecte void SetChanged(string propertyName) {
// Not important here
}
}
Có cách nào để nhanh chóng cấu trúc lại mã của tôi để tránh phải tự thay đổi các thuộc tính?
Nếu tất cả các lớp học kinh doanh của bạn chỉ đơn giản là các lớp có tính tự động và không có gì khác, tôi sẽ chuyển đổi sang sử dụng [mẫu T4] (http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx) để tạo lớp học của bạn.Sau đó, nó là một sự thay đổi tầm thường để định dạng lại tất cả chúng như trên. – mellamokb
Regex thay thế có thể làm việc - cũng Resharper có một cái gì đó như thế này, nhưng nó có thể yêu cầu bạn phải làm mỗi một lần lượt. Ngoài ra một mẫu CodeSmith sẽ sắp xếp mà ra trong thời gian không giả định bạn biết làm thế nào để sử dụng nó. Nếu không, tôi sẽ tạo một đoạn mã có cấu trúc đúng và chỉ cần làm lại các thuộc tính. Đoạn mã sẽ điền vào tất cả các bit mà tôi cho là, nhưng nó vẫn là một công việc thủ công! Tôi sẽ đi cho regex ... hoặc như mellamokb nói, một mẫu T4, tôi đã có thành công tốt với họ cho những thứ đơn giản – Charleh
Bạn có sử dụng Resharper? Nếu vậy, đó là một phím tắt, và ai đó đã mở rộng nó để tự động thêm hỗ trợ INotifyPropertyChanged: https://bitbucket.org/tgmayfield/resharper.tgmcontrib –