문제

현재의 엔터프라이즈 솔루션은 엔티티 프레임 워크에 의해 구동되는 ASP.NET MVC 응용 프로그램입니다. 감사를 위해 변경 이벤트에 연결하는 방법에 대한 몇 가지 링크가 있습니다. 나는 이것에 정말로 관심이 없습니다.

엔터프라이즈 수준 감사 아키텍처에 관심이 있습니다. 기업 수준의 전투 상처를 입은 사람들은 감사 솔루션이 무엇입니까? 프레임 워크의 데이터베이스에서 객체를 직렬화합니까? 테이블을 감사하기 위해 데이터베이스 트리거를 설정하고 있습니까? 감사 성장이 앱 데이터베이스에 영향을 미치지 않도록 별도의 데이터베이스를 모두 함께 사용합니까? 나는 여기에서 시도되고 진정한 솔루션에 관심이 있습니다. 기술 선택 (EF)에는 옵션이 있다는 것을 알고 있지만 먼저 재단에 관심이 있습니다.

링크는 매우 감사하겠습니다.

도움이 되었습니까?

해결책

몇 가지 해결책을 보았지만 제가 가장 좋아하는 솔루션은 단순성 자체였습니다.

  • 각 소스 테이블을 미러링하는 감사 테이블을 작성하여 변경 날짜 및 유형 (지원하는 경우 삽입, 업데이트 또는 삭제) 및 변경 사항을 추적하기 위해 몇 개의 추가 열을 추가합니다. 모든 제약과 색인을 제거하십시오 (많은 검색을 수행하지 않는 한).

  • 테이블 업데이트 로직 (우리는 절차를 사용했지만 적절한 후크가 주어지면 OR/M 또는 기타 지속성 계층으로 수행 할 수없는 이유는 없습니다). 소스 테이블과 감사 테이블 모두에 쓰기.

이것은 수많은 이점이 있지만 (내 의견으로는) 가장 큰 이점은 클라이언트에서 쌍을 이루는 쓰기 작업의 거래 무결성을 관리하기 위해 모든 코드를 걱정하거나 작성할 필요가 없습니다.

다른 팁

나는 링크가 없지만 시스템에서 나는 하루 종일 여기에 유지하는 기쁨이 있습니다. 기본적으로 다음 정보를 저장하는 단일 감사 테이블이 있습니다.

Tablemename, PrimaryKeyValue, ModifiedColumn, OldValue, NewValue, ChangeUser, 변경 날짜

이제 이는 감사 속도에 적합합니다. 코드에는 감사 로깅을 자동 구현하기위한 공통 인터페이스가 있지만 "검토"관점에서 정보를 다시 얻는 "가장 빠른"방법은 아닙니다. (우리는 실제로 감사 로그를보기 위해 필요한 일을하지 않았습니다 ...)

우리는 최근에 우리 기업에서 동일한 문제를 해결해야했습니다. 우리는 이전 버전으로 되돌아 갈 수 있어야했습니다.

우리는 SQL의 테이블 대신 비즈니스 엔티티를 감사하게되었습니다. 우리는 기본적으로 DB의 레코드를 연속화하고 한 버전에서 다음 버전으로 변경된 변경 사항을 추적합니다. 이 접근법을 통해 이전 버전을 비즈니스 엔티티로 리테로 리드 한 다음 동일한 저장 작업을 호출하여 되돌아 갈 수 있습니다. 이 기능은 반복되는 기능이 여기에서 해결되어야하기 때문에 응용 프로그램의 책임에 따라 이동됩니다. 그렇지 않으면 당사의 서비스는 참여 응용 프로그램에 대한 너무 많은 세부 사항에 대해 알아야 할 수도 있습니다. Serivce 운영은 버전별로, 날짜, 기록을보고 및 감사 변경에 따라 레코드를 검색하는 작업이 제공됩니다. 다른 응용 프로그램 그룹과 다른 엔터티에 대한 옵트 인 접근 방식 (DB의 모든 것을 감사 해야하는 것은 아니므로 왜 그렇게 하는가).

그런 다음 서비스와 대화하고 모든 버전을 표시 할 수있는 가벼운 웹 사이트를 구축합니다. 우리는 버전 (실제로 멋진 UI 표현)을 비교하기위한 추가/업데이트/삭제를 보여주는 메커니즘을 구축하여 사용자가 누가 무엇을 변경했는지 확인할 수 있습니다. 이 서비스는 URL로 링크를 다시 보내서 엔티티의 버전을 볼 수 있습니다. 이를 통해 WebAPS + WinForm/WPF 앱이 브라우저를 시작하여 사용자가 변경 사항을 확인할 수 있습니다.

어쩌면 내가 이것을 포장하고 누군가 관심이 있다면 제공 할 수 있습니다 ....

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