2014-11-06 3 views
1

앞으로 프로젝트에 EF를 사용하는 것에 대한 이해를 얻으려고합니다.EF6 및 비즈니스 로직 레이어

현재이 코드 첫 번째 코드가 있습니다

public class Blog 
{ 
    public int BlogId { get; set; } 
    public string Name { get; set; } 

    public virtual List<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int PostId { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 

    public int BlogId { get; set; } 
    public virtual Blog Blog { get; set; } 
} 

public class BloggingContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 
} 

이 데이터베이스와 테이블을 생성하고 난/블로그를 추가 문제를 게시하지 않습니다 할 수있었습니다. 그러나 나는 EF 코드의 첫 번째 접근 방법을 구조화하는 방법에 대해 혼란 스럽다.

BlogPost 모두 BloggingContext에 대한 참조가 있고 고유 한 가져 오기/추가/업데이트 방법이 있습니까?

실제로 데이터 가져 오기/추가/업데이트를 수행하고 단순히 엔티티 개체를 반환하는 별도의 BlogManager/PostManager 클래스를 생성해야합니까?

get/add/update 메서드를 포함하는 Blog/Post을 상속하는 별도의 클래스를 만들어야합니까?

+0

코드 예제에서 필요한 모든 것이 필요한만큼 수행해야한다고 생각합니다. DbContext의 DbSet에는 엔티티를 추적하는 메커니즘이 있습니다. 'dbContext.SaveChanges()'를 호출 할 때 모든 추적 된 변경 사항은 Datebase로 이동합니다. –

+0

일반적으로'IBlogRepository' 및'IPostRepository' 인터페이스와'BloggingContext'를 감싸는 해당 구현을 생성하려고합니다. 그렇게하면 비즈니스 로직 클래스에서 ORM의 실제 구현과 사용을 추상화 할 수 있습니다. –

답변

1

블로그와 게시물 모두를 참조해야합니다.

아니요 - 클래스 자체는 특정 소스에 연결되면 안됩니다. 그들은 단지 엔티티를 나타내야하며 데이터가 어디서 오는지 독립적이어야합니다. 따라서 데이터 소스와 완전히 독립적 인 블로그를 만들 수 있으므로 단위 테스트가 더 쉬워집니다.

실제로 데이터 가져 오기/추가/업데이트를 수행하고 단순히 엔티티 개체를 반환하는 별도의 BlogManager/PostManager 클래스를 만들어야합니까?

는 예 -이 일반적으로 너무 BlogRepositoryPostRepository 더 나은 이름이 될 수도하는 저장소라고합니다.

두 개가 상호 의존적이므로 리포지토리가 구현하는 IBLogRepositoryIPostRepository 개의 인터페이스를 만들어 리포지토리를 밀접하게 연결하지 않아도됩니다. 그런 다음 블로그를 쿼리하고 게시글을 원할 경우 BlogRepositoryIPostRepository에 요청을 연결할 수 있습니다.

get/add/update 메소드가 포함 된 Blog/Post에서 상속 된 별도의 클래스를 만들어야합니까?

없음 - 블로그 그것은 반드시 블로그 자체를 절약 할 수 있고 클래스 - 상속는이 관계의 "은"을 의미하기 때문이다.하지

+0

답장을 보내 주셔서 감사합니다. 마지막으로 내 응용 프로그램의 구조를 생각하게되었습니다. 일반적으로'Blog'와 관련된 모든 것을 아마도'Blog' 클래스 하나에 넣었을 것입니다. 예 : UI 기능 (예 : UI 사용을 위해 반환 된 데이터 형식)이 있으면 '블로그'로 이동합니다. 게시물이없는 모든 블로그를 삭제하면 '블로그'에도 표시됩니다. "게시물이없는 모든 블로그를 삭제하십시오"와 같은 것들이'BlogRepository'에 들어가고 UI 함수를위한 별도의'BlogUI' 클래스가되어야합니까? – james

+1

예 - 이상적으로 클래스는 하나의 기능을 가져야합니다 : 캐리 데이터, 데이터 저장, 계산, 데이터 표시 등은 모두 다른 기능입니다. 그렇지 않으면 변경, 디버깅, 테스트, 모의 등 어려운 거대한 수업이 끝납니다. –

+0

토끼 홀에서 꽤 멀리 나를 보냈습니다. 지난 22 시간 동안 독창적 인 원칙을 읽으면서 보냈습니다. 처음에는 객체가 있어야한다고 생각했던 것에서 실제로는 ANTI-OBJECT처럼 보였습니다. 하지만 지금은 제대로 사용되는 것으로 보이며 필요할 때 어디에서나 쉽게 사용할 수 있습니다. – james

1

DbContext 클래스는 자체적으로 모든 데이터 관련을 처리 할 수 ​​있습니다. 엔티티 클래스에 참조를 포함 할 필요가 없습니다 (DbContext 클래스가 데이터베이스 연결을 열었으므로). DbContext은 기본 CRUD 작업을 자체적으로 처리합니다 (DbSets<T>을 사용하면 특정 표의 모든 데이터에 쉽게 액세스 할 수 있습니다)

원하는 경우 @ Sergey는 위에서 언급 한 주석과 저장소 인터페이스를 구현합니다. 내가 수행 할 수있는 블로그 게시물은 find here입니다. 기본적으로 DbContext 클래스에 대한 배경 참조를 사용하여 일반 저장소로 설정하고 그렇게하면 애플리케이션 코드와 데이터베이스 로직 사이에 멋진 레이어를 만들 수 있습니다.

+0

URL이 @ IronMan84처럼 보입니다. – Tico

+1

이상한. 항상 VPN에서 나에게 일어난다. 지금 시도해보십시오. – IronMan84

+0

고마워, @ IronMan84, 매력처럼. 감사! – Tico

관련 문제