문제

현재 ASP.NET 인적 자원 시스템을 개발하고 있습니다. MVP 패턴을 기반으로하는 Web Client Software Factory와 함께 계층 아키텍처를 사용하고 있습니다. Orm은 nhibernate입니다. 감사 로그 모듈을 구현해야합니다. 나는 다른 접근법에 대해 많이 읽었습니다. 그들 대부분은 그 변화를 한 사람의 날짜, 타이즈 램프 및 신원을 추적하는 방법을 설명하지만, 아무도 내 도메인 계층의 속성 변경을 추적하는 방법에 대해 아무도 말할 수 없었습니까? 나는 롤백 기능이 필요하지 않습니다. 로그가 필요합니다.

이 변경의 핸들러를 어디에 두어야하는지 결정할 수 없습니다. Fowler는 감사 속성의 감사 로그인을 지적했지만 여전히 도메인 클래스를 간단한 poco의 유지하고 싶습니다. 어쩌면 다른 접근법이 있습니까?

도움이 되었습니까?

해결책

나는 HR 시스템을 위해 몇 년 전에 이것을해야했다. 나는 모든 '필드'가 템플릿 (generic)을 구현하도록하는 것을 달성했습니다.

다음은 내가 다듬은 템플릿의 예입니다.

class DataField<T>
{
    public T Current { get; set; }
    public T Original { get; set; }
    // stores the field name as a nice textual readable representation.
    // would default to property name if not defined.
    public string FieldName { get; set; }
    public bool Modified
    {
        get { return !(Current.Equals(Original));
    }

    public DataField(T value)
    {
        Original = Current = value;
    }

    public DataField(T value, T fieldName)
    {
        Original = Current = value;
        FieldName = fieldName;
    }
}

감사를 쉽게 만든 흥미로운 부분은 각 객체가 자체 감사 로그를 생성 할 수 있다는 것입니다. 이 '필드'의 X 번호를 가질 수있는 객체를 가져 와서 getaudit을 호출 할 수 있으며 필드 이름, Old Val, New Val 등을 보여주는 클래스의 모든 변경 사항이있는 감사 객체를 반환 할 수 있습니다. 'Datafield'는 감사 오브젝트를 반환하는 메소드를 구현합니다. 문자열, 이중, ints 등의 경우 거의 구워졌지만 사용자 정의 객체를 사용하면 감사 개체를 반환 해야하는 감사 구현을 작성할 수 있습니다.

따라서 마지막에 일반적인 형태로 모든 데이터를 모든 유형의 필드를 가진 하나의 객체에 저장할 수 있습니다. 그런 다음 업데이트를 수행하고 감사 테이블에도 기록 될 getaudit 방법을 호출합니다.

여러 페이지를 통과해야하더라도 양식에서 변경된 것이 쉽게 알 수 있습니다.

Undo 's는 필드 별, 섹션 별 단위 또는 전체 객체 레벨에서도 필드에서 정말 쉬웠습니다.

내가 오랫동안 코드를 만지지 않았기 때문에 정확한 세부 사항에 대한 작은 안개가 많았습니다. 도움이되기를 바랍니다.

다른 팁

아마도 .NET 은이 패턴을 암시 적으로 구현하기 때문에 (이벤트와 함께) 옵저버 패턴을 구현할 수있을 것입니다.

아마도 "Orginal"OBJETC를 저장하고 시간이 맞는 경우 (반사를 사용하여) 수정 된 객체와 비교할 수 있으며 속성이 변경된 속성과 새로운 값이 무엇인지 알아낼 수 있습니다. 그러나 .NET에서 객체의 딥 코피를 만들 수는 없습니다 (객체를 직렬화 할 수있는 경우 제외).

원래 데이터를 객체에 보관하거나 업데이트 전에 로깅을 위해 데이터베이스에서 가져와야합니다.

저장 프로 시저 또는 트리거에서 데이터 계층 에서이 구현이 구현되었지만 도메인 계층에서는 결코 구현되었습니다.

편집 : 로그 기록에 데이터베이스 트리거를 사용하는 2 부 예는 다음과 같습니다. http://www.4guysfromrolla.com/webtech/041807-1.shtml 이 기술의 장단점에 대해 많은 좋은 토론이있는 것 같습니다. 도움이되기를 바랍니다.

당신은 확인 했습니까? 로깅 응용 프로그램 블록 Microsoft Enterprise Library의?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top