데이터 액세스 계층을 만들기 위해 Entity Framework 4.0을 사용했습니다. 그런 다음 비즈니스 로직 레이어에 DAL과 동일한 개체가 있지만 일부 확장 (예 : 더 많은 속성, 일부 기능 및 설정자의 데이터 유효성 검사)이 있음을 발견했습니다.엔티티 클래스에서 상속 및 클래스 확장
DAL과 BLL을 별도의 프로젝트로 계획했으며 BLL에서 엔터티 클래스를 사용하고 코드에서 중복을 방지하는 것이 가장 좋습니다.
난 검색 같이 두 가지 아이디어가있다 : 동일한 프로젝트 내- 연장 엔티티 클래스 (엔티티 클래스 관련 BLL 클래스 구현) 인터페이스를 사용하여 부분 클래스
- 의해. 이전에는 프로그래머들 사이에서 인기가있었습니다. 위의 해결을위한
단점 :
- 우리는 부분 클래스의 일환으로 같은 프로젝트에 코드를 추가해야합니다. 이것은 속성과 메서드를 추가하는 데 유용하지만 무언가를 오버라이드하는 것은 좋지 않습니다 (비즈니스 로직 레이어에서 속성을 설정하기 전에 유효성 검사 추가).
- 엔터티 모델이 변경되면 엔터티 클래스에서 수동으로 인터페이스를 다시 추출해야합니다 또한 BLL 관련 클래스의 또 다른 변경이 필요합니다 (두 가지 수동 작업이 필요합니다).
제 질문은 관련 엔터티 클래스의 BLL 클래스를 상속받지 않고 해당 메서드와 속성을 확장/재정의하는 것입니다.
컨트롤러가 모드를 캡슐화하는 'MVC'에서 언급했듯이, 별도의 프로젝트에서 더 높은 추상화 수준으로 엔티티 클래스를 캡슐화하려고합니다. 상속 된 클래스는 기본 엔티티 클래스의 한 유형이므로 엔티티 프레임 워크에 새로운 클래스를 전달할 수 있습니다. EF 생성 코드 (엔티티 클래스)를 변경하지 않을 것입니다. 내 자신의 'BLL'이 필요하며 EF 생성 코드를 변경하지 않고 유지하려고합니다. EF에서 하위 유형을 반환하지 않기를 바랍니다. – Xaqron
@Xaqron : 요점은 MVC 및 유사한 아키텍처가 * 상속 *이 아닌 * 캡슐화 *를 통해 작동한다는 것입니다. 이와 같은 접근 방식을 채택하고 싶다면 엔티티 유형 자체를 상속하는 것이 일반적으로 그렇게되지는 않습니다. –