2008-11-30 15 views
7

Tôi đang tìm ý tưởng về cách triển khai các đường mòn kiểm tra cho đối tượng của mình trong C#, cho dự án hiện tại, về cơ bản tôi cần:Thực hiện kiểm tra đường mòn cho các đối tượng trong C#?

1. Lưu trữ giá trị cũ và giá trị mới của một đối tượng nhất định. 2. Tạo đối tượng mới. 3.Deletion của đối tượng cũ.

Có cách nào chung để làm điều này, như sử dụng C# Generics, để tôi không phải viết mã cho các sự kiện của đối tượng cơ sở như trên tạo, xóa vv (đối tượng ORM). rằng nếu có một cách để tiêm đường mòn kiểm toán nếu một là sử dụng một. Bất kỳ ai có bất kỳ kinh nghiệm hoặc bất kỳ phương pháp họ làm theo. Bất kỳ cách nào để làm điều này trong một hướng-khía cạnh người dùng (AOP).

Hãy chia sẻ ý tưởng của bạn, vv

Trả lời

1

Câu hỏi là khá tương tự như How do you implement audit trail for your objects (Programming)?

Chúng tôi đã thực hiện một giải pháp tương tự, sử dụng AOP (AspectJ thực hiện). Sử dụng các điểm cụ thể này có thể được chụp và các hoạt động cụ thể có thể được thực hiện.

Điều này có thể được cắm vào và cắm khi chúng tôi muốn.

Tuy nhiên, việc thực hiện của chúng tôi là trong J2EE ..

Nếu bạn thực sự muốn làm điều đó trong lớp ứng dụng, tôi sẽ đề nghị này.

Hy vọng nó giúp ..

+0

tôi hỏi những Q mà tại sao hee simlar của nó ... Vâng, tôi có lâu đài như aop của tôi, nhưng làm thế nào tôi có thể InterSpect vv hoặc có bất kỳ mẫu tôi phải làm theo hoặc bạn có thể nói nó theo cách bạn làm điều đó không? hy vọng thats không nhiều. – abmv

+0

Chúng tôi đã sử dụng Spring IOC và Spring AOP. Chúng cung cấp cả aop tĩnh và động. Nó sẽ yêu cầu bạn viết các khía cạnh của bạn như là đậu và sau đó đính kèm chúng vào các đối tượng bạn muốn kiểm toán. Tôi đoán tương đương .net được gọi là NSpring. – Satya

1

Ngoài một số trong những điều đề cập trong các chủ đề trên Command Pattern có thể giúp đỡ, nếu bạn quấn tất cả các thay đổi trạng thái trên đối tượng của bạn trong một lệnh thì lệnh có thể được chịu trách nhiệm giữ đường mòn kiểm toán, trong khi đối tượng không phải lo lắng về việc kiểm tra chính nó. Tất nhiên có thêm chi phí để tạo và xử lý các lệnh.

Bạn có thể bao bọc các lệnh xung quanh bất kỳ cấu trúc đối tượng hiện có nào, bạn chỉ ủy thác các hành động của mình cho lớp lệnh thay vì thực hiện chúng trực tiếp trên đối tượng.

1

Bạn đã cân nhắc sử dụng mẫu thông báo đơn giản chưa? Bạn có thể có các lớp dịch vụ của bạn nâng cao các sự kiện như NewObject, ChangedObject, DeletedObject đó, sẽ được nghe bởi một lớp dịch vụ chung mà sau đó có thể lấy đối tượng và lưu kết quả.

Nếu bạn muốn lưu trạng thái của đối tượng, bạn có thể sử dụng Xml Serialization.

Có một cách tiếp cận khác nếu bạn sử dụng SQL Server 2008, bạn có thể thực hiện các tính năng kiểm tra mới cho phép bạn kiểm tra các thay đổi đối với bản ghi cơ sở dữ liệu mà bạn có thể theo dõi (tôi nghĩ) khi dữ liệu được đọc.

3

Bạn có thể thực hiện một cái gì đó tương tự như INotifyPropertyChanged với một sự khác biệt nhỏ. Tôi đã trích xuất hầu hết INotifyPropertyChanged và thay đổi nó thành generic và lưu trữ các giá trị mới và cũ. Sau đó bạn có thể có một số loại của một lớp quản lý có thể lắng nghe điều này và onSaving và onDeleting bạn có thể đối phó với những thay đổi.

public interface INotifyProperyChanged<T> 
{ 
    event PropertyChangedEventHandler<T> PropertyChanged; 
} 

    public delegate void PropertyChangedEventHandler<T>(object sender, 
PropertyChangedEventArgs<T> e); 

public class PropertyChangedEventArgs<T> : EventArgs 
{ 
    private readonly string propertyName; 

    public PropertyChangedEventArgs(string propertyName) 
    { 
     this.propertyName = propertyName 
    } 

    public virtual string PropertyName { get { return propertyName; } } 

    public T OldValue { get; set; } 
    public T NewValue { get; set; } 
} 
0

Câu hỏi khá cũ, nhưng đối với những người muốn kiểm tra đối tượng C#, tôi khuyên bạn nên sử dụng thư viện Audit.NET.

Nó có các phần mở rộng để đăng nhập vào các hệ thống lưu trữ khác nhau (SQL, Azure, Mongo) và để kiểm tra các hệ thống khác nhau (WCF, EF, MVC).

Lưu ý: Tôi là chủ sở hữu