Entity Framework 엔터티를 비즈니스 개체로 사용합니까?

.net architecture entity-framework

문제

Microsoft의 Entity Framework O / R 매퍼를 사용하고 비즈니스 개체로 엔터티 클래스 (DB 개체에 매핑 된 생성 된 클래스)를 사용하고 있습니다. 이거 괜찮아? 죄수 또는 찬성을 진술하십시오. 비즈니스 계층과 프레젠테이션 간의 WCF 통신의 경우 어떻게해야합니까? 이러한 개체를 데이터 멤버로 보내는 방법은 무엇입니까?

수락 된 답변

이 방식으로 EF를 사용하고 있으며, 생성 된 엔티티가 부분 클래스이므로 재생성 문제로부터 상당히 보호 된 방식으로 확장 될 수 있습니다.

또한 비즈니스 로직과 관련된 EF와 관련된 몇 가지 일반적인 사용 시나리오를 설명 하는 MSDN의이 링크를 살펴보십시오.


인기 답변

먼저,이 글을 쓰고있는 시점에서 11k 번 질문을 통해 나는 대답이 부족하고 정직한 질문을하면서 답변의 질적 인면에서 조금 놀랐습니다.

이제는 약간의 문제가 생겼으니, Entity Framework Code-First의 최근 릴리스와 함께 더 많이 적용될 것이라고 생각하기 때문에이 질문에 답하고 싶습니다.

"Entity Framework 엔터티를 비즈니스 개체로 사용합니까?"

내가 시작하기 전에 몇 가지 명확한 점 :

  • "비즈니스 객체"를 말할 때, 나는이 객체들이 참조하는 객체가 간단한 검증 (필수 필드)에서 좀 더 복잡한 로직 (체크 아웃에 대한 세금 처리)에 이르기까지 규칙이나 로직을 포함하고 있다는 인상을 받았다.

  • WCF에 관한 후속 질문에 답변 할 수 있다고 생각하지 않습니다. 그 이유는 단순히 EF에 대한 귀하의 질문에 비즈니스 목표로 객관적으로 대답 할 것이기 때문입니다. 그러면 객관적으로 제가 첫 번째 질문에 진정으로 객관적으로 대답하려는 내 시도의 모순을 입증하는 입장을 취하게 만듭니다.

비즈니스 오브젝트에 대한 질문으로 EF에

"Microsoft의 Entity Framework O / R 매퍼를 사용하고 있으며 비즈니스 개체로 엔터티 클래스 (DB 개체에 매핑 된 생성 된 클래스)를 사용하고 있습니다. 괜찮습니까?"

죄송합니다. 여기에는 옳고 그른 대답이 없습니다. 그것은 당신의 목표가 무엇인지, 그리고 가장 합리적인 설계로 결론을 내리고 그 이점과 단점을 완전히 이해하는 것에 달려 있습니다.

â € œPlease 상태 또는 장담 €

당신이 물어 줘서 기뻐요. 기꺼이 대답하고 싶습니다. 희망은 여기에 장단점에 따라 비즈니스 개체에 EF를 사용하는 것이 "OK"인지 여부에 대한 정보에 입각 한 결정을 내릴 수 있다는 것입니다. 전형적으로, Iâ € ™ d는 찬성과 단점을 깰 수있는 "â € œdigestà ¢ â, ¬ â"¢ 나는 생각하지 않기 때문에 나는 여기에 적합하다고 생각하기 때문에 weâ € ™ d는 불의와 같은 매우 흥미로운 주제 그것은 또한 내 마음에 가깝고 사랑 스럽습니다.

첫째로, 기술적 인면에서 잠시 이야기합시다. EF 오브젝트를 비즈니스 오브젝트로 사용할 수 있습니다. 사실, EF Code-First (CF)는 POCO를 생성하고 간단한 검증을 위해 데이터 주석을 적용 할 수있게 해주고보다 복잡한 검증을 위해 IValidatableObject를 구현할 수있게함으로써 매우 간단합니다. 멋지다, 응?

거기에는 토론의 핵심이 있습니다.

EF 또는 모든 ORM은 데이터 관리를 지원하도록 설계되었습니다. 주요 책임은 데이터이므로 생성하는 객체는 데이터 중심입니다. 그래서, 당신이 또한 행동에 의해 당신의 물건을 디자인하려고 시도한다면, 당신은 약간의 수수께끼를 가지고 있습니다. 간단히 말해서이 수수께끼는 임피던스 불일치라고합니다. 이것을 묘사하십시오; 애플리케이션에 두 가지 필수 사용 사례가 있습니다.

  1. 사용자 편집 화면
  2. 사용자 정보의 읽기 전용 하위 집합을 표시하는 컨트롤

EF (임의의 맛) 또는 ORM을 사용하는 경우 동일한 "사용자"개체를 사용하여 사용자를 저장하는 기능과 읽기 전용 필드의 하위 집합을 가져 오는 사용자를 가져 오는 기능을 처리 할 수 있습니다. . 몇 가지 이유로 다음과 같이 할 수 있습니다.

  1. 많은 개발자들과 마찬가지로 우리는 교육 과정에서 우리의 두뇌에 뿌린 씨앗을 가지고 있습니다. 코드를 통합하는 것이 가장 중요합니다. 또는 DRY - Yourself Repeat 자신에게 더 잘 알려질 수 있습니다. 따라서 코드 복제와 같은 코드를 볼 수 있습니다 부정적인 맥락에서 속성으로
  2. EF 4.1과 같은 ORM은 여러 POCO / 객체를 동일한 데이터베이스 테이블에 매핑하여 사용자의 신념에 관계없이 강제로 작업 할 수있는 기술적 한계 (및 해킹 대책)를 가지고 있습니다.
  3. 응용 프로그램을 시작하고 실행할 수있는 빠르고 쉬운 방법입니다.
  4. 그것을 â € œfeelsâ € 옳은 일을처럼

그렇게하는 데는 장단점이 있으며, 자신의 의견에 따라 긍정적이거나 부정적으로 보일 수 있습니다.

나는 당신이 코드의 정상화를 믿는다면 당신이 크게 성공한 것보다 행동에 대한 것이라고 생각합니다. 해당 개체에 대한 데이터 및 비즈니스 유스 케이스를 처리하는 단일 개체를 작성하여 코드 양을 제한하고 잠재적으로 시간을 절약 할 수있었습니다.

그리고 당신이 비참하게 실패한 것보다 코드에 대한 행동의 정상화를 믿는다면 나는 생각합니다. 코드를 저장하면 관리 작업을 어렵게 만들고 유지 관리 비용을 증가시킬 수있는 책임으로 객체 디자인이 희생되었습니다.

귀하의 의견에 관계없이 우리는이 비즈니스 객체가 여러 책임을지고 데이터 객체의 동작 (데이터가 아님)이 최상의 수준이라는 점에 모두 동의 할 수 있습니다. 주요 책임은 데이터 관리이며 두 번째 책임은 사용자를 편집하고 읽기 전용 사용자 정보를 표시하는 단순하고 복잡한 비즈니스 규칙을 처리하는 것입니다. 객체 지향 설계 (Object-Oriented Design, OOD)에서, 객체의 설계가 그 객체의 정체성과 행동에 의해 특징 지어 진다면,이 객체는 OOD의 정의를 고수하지 않기 때문에 혼란 스러울 수 있습니다.

기술적 인 관점에서 고려해야 할 점은 사용자 객체를 요청할 때마다 상당한 오버 헤드를 상속받습니다. 읽기 전용 정보의 서브 세트 만 표시 할 때 모든 특성 및 비즈니스 규칙과 같은 사항이 포함될 수 있습니다.

그렇다면이 모든 것이 비즈니스 객체를 표현하기 위해 EF를 사용해야하는지 여부와 관련이 있습니다.

Wella € | 기술적으로는 가능하지만 비즈니스 객체를 나타 내기 위해 EF 또는 ORM을 사용해야하는지 여부에 따라 다양한 철학 (좋은 점, 다소 나쁜 점)이 있습니다. 위의 철학의 핵심을 목표로 시놉시스를 주었지만 Rocky Lhotka 및 Martin Fowler와 같은 개인이 훨씬 자세히 설명합니다.

귀하가 취하는 방향은 응용 프로그램 및 철학적 관점에 따라 결정될 가능성이 높으며, 당신이 이상 주의자 또는 실용 주의자 중 어느 정도인지에 따라 달라질 수 있습니다. 즉, 이상 주의자 또는 실용 주의자가 비즈니스 객체에 EF를 사용하거나 EF를 사용하는 것과 상관 관계가 있다는 것을 의미하지는 않습니다.

이 글을 쓰는 시점에서 EF는 비즈니스 논리를 처리하기 위해 만들어졌으며 옳고 그른 방향으로 나아가는 것처럼 보입니다. EF는 계속 진화하고 있으며 특정 기술적 한계가 사라져 EF가 궁극적으로 두 세계의 최고를 만족시킬 수 있습니다. 즉, 결국 당신은 당신의 케이크를 먹을 수있을 것입니다.

희망이 도움이됩니다.

ORM에 대한 지속성에 대한 무지가 우스꽝스럽지 않은지에 대한 질문에 답하는 것은 배후에있는 목적을 고려하여 데이터를 관리하는 것입니다. :-) 미안, 나는 저항 할 수 없었다!



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.