2009-05-06 2 views
1

Entity Framework에서 생성 된 개체를 비즈니스 개체로 사용하는 것은 나쁜 습관입니까? 레이어간에 전달할 Entity Framework 객체 주위에 보조 래퍼를 작성하는 것이 좋습니다..NET 엔터티 프레임

예를 들어 POCO Person 개체를 초기화하기 위해 생성 된 Entity Framework 개체 EFPerson 중 하나를 수락하는 자체 POCO Person을 작성 하시겠습니까?

+0

EF 개체에 직렬화 문제가있는 경우 POCO로 묶는 것이 가장 좋지 않습니까? 앞으로 어떤 시점에서 WCF를 통해 Biz 로직을 노출하려고 할 수 있습니다. – Nate

답변

2

나는 왜 불량한 연습이 될지 모르겠다. EF 오브젝트를 사용하는 방법에 따라 어색 할 수도 있습니다.

인터페이스를 사용하여 추상화 수준을 제공하는 EF 개체에 BIZ 논리를 구현하기위한 부분 클래스가 있습니다.

예 :

public partial class Client : IClient 
{ 
    void DoSomething(); 
} 

// then an EF generated object ... 
public partial class Client 
{ 
// ... 
} 

내 유일한 문제는 객체를 직렬화하는 것입니다. 제 경우에는 WCF를 사용하여 JSON으로 직렬화합니다. 중간 DTO를 이산 클래스/객체 또는 익명 유형으로 만들지 않으면 불가능합니다. 난 보통 그렇게하지 제안 어떤 사람들은 자신의 비즈니스 오브젝트에 엔티티 프레임 워크 클래스를 포장하는 경향이 있지만 Serialize Entity Framework objects into JSON

+0

DTO가 필요한 경우 DTO를 모든 용도로 사용하고 DTO에서 몇 가지 정적 메서드를 사용하여 EF 개체로 변환하거나 EF 개체로 변환하는 것이 현명하지 않습니까? – Nate

+0

나는 선택하지 않았다. 1/너무 많은 노력과 코드 유지 보수 (코드 생성 도구 포함) 및 2/DTO를 사용할 때 주로 WCF 작업용으로 다른 용도로 사용하고 있습니다. 단순함이 나에게 이긴다! –

+0

JavaScript가 아닌 다른 "클라이언트"에서 anon 유형의 DTO를 사용할 수 있습니까? 내가 주로 클라이언트에 대해 알지 못하는 WCF를 통해 내 용도로 사용됩니다. – Nate

4

: 당신은, 직렬화에 관심이 여기 내 또 다른 질문을 살펴있는 경우

.

나는 이것이 비즈니스 로직과 데이터 액세스의 분리를 향상 시킨다는 것을 알고 있지만, 이것은 보통 모든 엔티티 유형을 복제하는 오버 헤드의 가치가 없다고 생각합니다.

OR 매퍼의 목적은 무엇입니까? 복잡한 데이터 액세스 레이어를 사용하지 않고도 객체를 데이터베이스에 수동으로 매핑하여 비즈니스 객체를 유지하는 것입니다. Entity Framework 클래스를 래핑하면 얻을 수있는 편의의 절반 만 사용하게됩니다.

마지막으로 데이터 액세스와 비즈니스 로직 간의 결합은 부분 클래스로는 그다지 어렵지 않습니다. 얼마 전에 주요 문제없이 단 몇 시간 만에 Entity Framework에서 LINQ로 약 30 개의 개체가 포함 된 프로젝트를 변경했습니다.

+0

그 시장은 항상 문제를 일으 킵니다 ... –

+0

: D 그것을 수정하십시오 ...;) –