2010-12-17 6 views
2

VS2K8, C#. - POCO 도메인 객체 및 데이터 인터페이스아키텍처 질문 : 서비스

데이터 - 저장소 패턴

코어 : 저는 현재 다음 프로젝트와 해결책을 가지고 있습니다. 코어에 정의 된 인터페이스를 구현합니다. 또한 Fluent NHibernate에 대한 매핑 클래스가 있습니다.

인프라 - 의존성 주입에 사용, 구성 NHibernate에 등

시험 - 시험 [등 코어, 데이터에 대한 테스트]

웹 - 그게 지금 MVC2 웹 프로젝트

, 나는 메일 링리스트 가입, 연락처 정보 제출 등을 추가하는 최선의 행동 방침을 결정하려고합니다.

나는 이것이 웹에 있어야한다고 생각하지 않습니다. 메일 링리스트 정보와 연락처 정보를 저장할 때를 제외하고는 데이터에 배치 할 필요가 없다고 생각합니다.

코어 레벨에 배치해야합니다. 그 말로는 코어에 배치하면 데이터베이스에 저장하는 데 의존합니다. 나는 이것을 배치 할 위치와 그것을 어떻게 구성 할 것인가에 대해 약간 당황 스럽다. 너희들이 가져간 경로는 무엇인가?

JoinMailingList (emailAddress)라는 메서드를 사용하여 MailingList라는 핵심 수준의 인터페이스를 만든 다음이 인터페이스를 데이터에 구현하는 것만 큼 간단합니다. 비즈니스와 관련하여 가장 좋은 방법이라고는 할 수 없습니다. 생각?

+1

아키텍처 문제는 programmers.stackexchange.com http://blog.stackoverflow.com/2010/12/introducing-programmers-stackexchange-com/에 속하는 .... 혼란이 시작하자 !!!! 우리는 처음에는 다른 사이트를 필요로하지 않았습니다. – Shoban

+0

여기에서 다루겠습니다. 결국 그것은 프로그래밍 관련 질문입니다. – Pradeep

+1

나는 이것을 stackoverflow.com에 두는 것이 안전하다고 생각한다. 이것은 프로그래밍 관련 질문이며, 여기서 코드를 볼 것입니다. 그것은 확실히 더 높은 수준의 건축 문제를 가지고 있지만, 이상한 것은 없습니다. – StephenPAdams

답변

3

핵심 라이브러리에 서비스 라이브러리를 추가하고 서비스 인터페이스를 포함하십시오.

public interface IMailingListService 
{ 
    void Subscribe(string email); 
    void Unsubscribe(string email); 
} 

public interface IMailingListRepository 
{ 
    MailingList LoadMailingList(); 
    void SaveMailingList(MailingList list); 
} 

public class MailingListService: IMailingListService 
{ 
    private IMailingListRepository _repository; 

    public MailingList(IMailingListRepository repository) 
    { 
    _repository = repository; 
    } 

    public void Subscribe(string email) 
    { 
    var list = _repository.LoadMailingList(); 
    list.Subscribe(email); 
    _repository.SaveMailingList(list); 
    } 
} 
+0

빠른 답장을 보내 주셔서 감사합니다. 이 경로는 다음과 같습니다. 1. 메일 링리스트 서비스 (IMailingListService) 인터페이스를 사용하여 서비스 프로젝트/라이브러리를 만듭니다. 2. 코어에 메일 링리스트 저장소 인터페이스를 작성하십시오. 3. 코어에서 메일 링리스트 서비스 구현하기. 4. Data (예 : NHibernate를 통해)에서 메일 링리스트 리포지토리를 구현합니다. 예? – StephenPAdams

+0

또한 핵심 라이브러리는 참조해야하지만 데이터 라이브러리는 참조하면 안됩니다. 귀하의 DI 컨테이너를 귀하의 웹 사이트에 연결시켜야합니다. 귀하의 웹 사이트는 데이터 및 서비스 라이브러리를 모두 참조해야 컨테이너가 귀하의 의존성을 처리 할 수 ​​있습니다. – NerdFury

+0

닫기, 서비스 구현은 서비스 라이브러리에 있습니다. 인터페이스 (IMailingListService)는 저장소 계약과 함께 핵심 역할을합니다. 내 핵심 라이브러리 DataContracts 및 ServiceContracts 각각의 인터페이스에 대한 두 개의 폴더를 만드는 경향이 있습니다. – NerdFury