2012-04-14 2 views
2

먼저 EF Code First를 사용하고 싶습니다. 저장소 패턴으로 작업하고 있습니다. 그리고 n 계층 아키텍처를 구현하고 싶습니다. 내가 정말로 원했던 것은 TDD를 사용하는 것이지만 집계 경로에 문제가 있습니다. 내 문제는 ...코드 우선, 저장소 패턴 및 n 계층 사용에 대한 몇 가지 질문이 있습니까?

블로그 개체가 있습니다. 이 블로그 개체에서 관련 파일을 추가 할 수 있습니다. 큰. 따라서 본질적으로 저장소를 생성하는 1 개의 집계 루트가 있으며, 그런 다음 블로그에 연결된 파일을 '추가'할 수있는 몇 가지 방법을 추가해야합니다. 그러나 나는 이것을 어디에 두어야합니까? 그것의 데이터 액세스 레이어 일이 그래서 정말 거기에 그것을 원한다. 그러나 솔직히 말해서 비즈니스 로직의 도전이기도합니다. 제품의 일부는 assoc 파일을 추가 할 수 있습니다. 그래서 DAL이나 BLL에 Assoc 파일을 추가하는 로직을 넣어야합니까?

누군가가 나에게 몇 가지 지침을 줄 수 있기를 바랍니다.

+2

그 질문은 유행어 빙고처럼 들립니다 :) – ThiefMaster

답변

0

TDD 대신 DDD를 사용한다고 생각합니다. TDD의 컨텍스트에서 의미가 거의 없기 때문입니다.

시스템에 파일이 무슨 의미인지 생각하고 파일과 게시물을 연결하는 규칙이 있습니까? 예를 들어 파일을 가지고 있어야하는 게시물을 삭제한다면? 우리도 그들을 삭제합니까? 동일한 파일을 여러 게시물에 "추가"할 수 있습니까? 당신은 앉아서, 생각하고, 당신에 관한 지식을 수집합니다, 그러면 당신은 당신이 도메인에 소개 될 장소가 될 자격이 있는지 결정합니다.

일부 샘플 도메인 내가 상상할 수 :

public class Post 
{ 
    private List<File> _files; 
    public IEnumerable<File> AssociatedFiles {get {return _files;}} 
    public void AssociateFile(File file){//...} 
    public void DisassociateFile(File file){//...} 

    //It doesn't delete it just do some logic. Maybe we can't delete this post and need to throw exception or whatever logic you need 
    public void Delete() 
    { 
     foreach (File file in AssociatedFiles) DisassociateFile(file); 
    } 
} 

public class File 
{ 
    public String Url; 
    public DateTime Created; 
    public DateTime Modified; 
} 

public class PostRepository 
{ 
    public void Delete(Post post) 
    { 
     post.Delete(); 
     DbContext<Post>.Delete(post); //I Don't remember EF syntax for this 
     DbContext.SaveChanges(); 
    } 
} 

업데이트 : 계속하자 ... 내가 descovered 당신이 도메인에 생각의 5 분 후

을 내 초기 설계가 중요한 개념이 골대를 벗어났습니다 것을 (DDD로 항상 지식을 비트별로 긁어 낸다).

파일 업로드는 누가 담당합니까? 사용자가 이미 Post에 업로드 한 파일을 연결할 수 있습니까? 게시 할 파일 (분할되지 않은) 파일을 새로 추가 할 수 있습니까? 그는이 것들을 혼합 할 수 있습니까? 그것들은 중요한 질문이며, 다시 그것에 대해 생각하고 시스템을 설계해야합니다.

+0

좋아, 이제 어떻게하는지 봅니다. 이 블로그는 본질적으로 총 경로이기 때문에 Blog Repo를 통해 AssocFiles를 추가 및 삭제합니다. – Exitos

1

당신은 저장소에 대해 이야기하고 있습니다. 그래서 당신이 DDD를하고 싶다고 말하고 있다고 가정합니다. DDD에는 시스템 사용자와 함께 개발 한 모델이어야하는 도메인 모델이 있어야합니다. 어쨌든 일반 사용자가 이해해야하는 개념으로 구성되어야합니다. 사용자가 블로그를 파일과 관련된 것으로 생각하고 이러한 파일을 블로그에 추가 할 수있는 경우 관련 파일은 도메인 모델에 속하며 Blog 객체에는 add 메소드가 있어야합니다. 내 생각 엔 BLL이 관련 파일을 넣을 곳이라고 생각합니다.

1

우선, 경계 된 컨텍스트를 알기 전까지는 집계 루트를 식별 할 수 없습니다. 명확한 학사 없이는 AR이 없습니다. ANY 오브젝트는 컨텍스트에 따라 AR이 될 수 있습니다. 나는 당신의 도메인을 모른다. 그래서 나는 Blog가 파일을 추가하는데 필요한 정보를 유효하게 취한다. 추가 기능은 AR에 있습니다.

리포지토리는 지속성과 관련된 모든 것을 처리합니다. 즉, db에 저장됩니다. 이 경우 하나의 메소드를 포함해야하며, 그 이상은 아무것도 아닙니다.

public interface IBlogFilesRepository 
{ 
    void Save(Blog); 
} 

항상 도메인/비즈니스 로직을 도메인/BL 계층에 넣으십시오. DAL은 데이터베이스에 대한 저장 /로드 만 처리하며 도메인 동작을 처리하는 데 비즈니스가 필요하지 않습니다.

관련 문제