2009-05-29 3 views
0

엔티티 - DTO 및 DTO - 엔티티 맵퍼에 PostSharp를 사용할 것을 고려하고 있습니다. 이 작업을 약 100 개의 엔터티에 대해 수동으로 수행하는 것은 유지 보수의 악몽이 될 것입니다. 나는 codeplex에서 AutoMapper를 보았다. 그러나 PostSharp가 매핑 규칙에 대한 몇 가지 추가 컨트롤을 제공 할 수 있다고 생각하는 것 외에 오버 헤드가 심각한 문제가 될 수도 있다고 생각한다. 누군가가이 문제의 왕과 어떤 경험을 공유 할 수 있다면 그것은 좋을 것입니다.오브젝트 맵퍼 용 PostSharp

난 내용으로 다음 두 가지 방법을 채울 것이다 클래스에 충실 기획 오전 측면 : 내가있어 방향은 생각

는 다음과 같이 (이 불가능한 경우 누군가가 말해주세요)이다 :

EntityType EntityToDTO(DTOType DTO) {} 

DTOType DTOToEntity(EntityType Entity) {} 

DTO에 기초 엔티티 반환 제에있어서, 두 번째는 oposite 할 것이다. 애스펙트 안에는 각 속성을 반복하면서 새로운 대상을 만들고 속성의 값을 대상 객체의 대상에 할당합니다. 런타임 오버 헤드없이 컴파일 할 때이 작업을 수행 할 수 있습니까? 당신의 DTO들 필드 이름이 엔티티 필드 이름과 일치하는 경우

+0

왜 오버 헤드가 문제가됩니까? 그것을 측정 했습니까? – Paco

+0

당신이하고있는 일은 간단한 반성을 통해 쉽게 성취 될 수 있습니다. 리플렉션은 퍼포먼스에 나쁜 영향을 미치지 만 솔직히 생각한 것처럼 퍼포먼스는 그렇지 않습니다. 리플렉션은 .Net 프레임 워크의 모든 곳에서 많은 것을 처리하기 위해 사용됩니다. 마음이 감동하는 속도가 필요한 무언가를하지 않는 한, 반성은 당신을 잘 도와 줄 것입니다. 데이타베이스에서 그리고 네트워크를 통해 정보를 얻는 데 걸리는 시간은 약간의 반영보다 느린 규모입니다. 전반적인 성능은 대부분의 인식입니다. – Josh

답변

1

는, 나는 당신의 코드는 기본적으로이

UserDTO user = DuckTyping.Cast<UserDTO>(userEntity); 

처럼 작동 할

http://www.deftflux.net/blog/page/Duck-Typing-Project.aspx

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

입력하면 오리를 사용하십시오 , 오리 타이핑 라이브러리는 이름을 일치 시켜서 필드를 맵핑합니다. 동적으로 생성 된 일리노이를 사용하여이를 보관합니다.

너무 느린 가능성이 있다면, 아마도 CodeSmith가 나를 위해 메소드를 생성하려고 시도 할 것입니다.

1

도움이된다면 기본적으로 Entity Framework 1에 대한 POCO 개체에 대한 지원을 구현하는 PostSharp4ET 프로젝트가 있습니다. http://www.codeplex.com/efcontrib을 참조하십시오.

PostSharp는 새 코드를 생성하는 데 그리 좋지 않습니다. 새로운 코드와 기존 코드를 혼합하는 것이 좋습니다. 코드를 생성해야하는 경우 리플렉션을 기반으로 C# 코드 생성기를 작성하고 결과 코드를 컴파일하는 것이 좋습니다. 또는 앞서 언급 한 CodeSmith와 같은 도구를 사용하십시오.