2017-09-18 1 views
0

나는 동일한 도메인 모델을 다룰 필요가있는 여러 개의 응용 프로그램을 가진 프로젝트에 육각형 구조를 적용하려고합니다.응용 프로그램 서비스 계층 클래스를 인스턴스화 할시기는 언제입니까?

도메인 모델 및 데이터 액세스 레이어를 처리 할 응용 프로그램 서비스를 요청하는 예를 들어 mvc 웹 사이트가 있습니다. 지금까지는 괜찮습니다.

내가 가진 질문은 응용 프로그램 서비스 클래스를 인스턴스화해야 할 때입니다. 모든 사용자 (싱글 톤)에 대해 클래스의 인스턴스를 하나만 사용해야합니까? 또는 사용자 당 하나씩 인스턴스화 한 다음 일부 사용자 데이터를 보유하고 사용자 세션에 저장해야합니까? 각 요청마다 새 클래스를 인스턴스화해야합니까?

물론 이러한 옵션 중 하나라도 가능하지만 모범 사례 조언을 받고 싶습니다.

더 무국적 인 클래스가 더 좋을 것이라고 추측하지만, 상태 비 저장 클래스는 각 메소드 호출에 대해 사용자 별 데이터를 전달해야한다는 것을 의미합니다.

답변

1

나는 일반적으로 요청 범위에 서비스와 지속성 클래스를 유지합니다. 이것은 어떤 일이 잘못되어 일부 데이터가 남아 있지 않으면 데이터 트랜잭션을 되돌릴 수 있는지 확인하는 데 도움이됩니다.

오래 지속되는 트랜잭션 범위를 원하지 않는 이유는 일반적으로 성능을 향상시키지 못하고 예기치 않은 동작이 발생할 수 있기 때문입니다. 특히 과도기 나 범위 클래스에 종속 된 싱글 톤의 경우. 왜냐하면 싱글 톤은 한 번 생성되기 때문에 의존성이 한 번 만들어지기 때문입니다. 스레드로부터 안전하지 않은 클래스에서는 매우 위험합니다. More on scopes here.

사용자 데이터를 전달하는 것에 대한 귀하의 우려 사항과 관련하여 나는 사용자 데이터 도우미 인터페이스의 배후에 관심있는 모든 정보를 넣을 것입니다. 해당 데이터를 전달하는 대신 서비스에 의존하게하십시오. 그러면 지원하려는 클라이언트에 특정한 사용자 데이터 도우미를 만들 수 있습니다. 의존성 삽입을 사용하여 mvc 응용 프로그램을 구성하여 해당 사용자 데이터 도우미의 mvc 특정 구현을 사용할 수 있습니다. 그리고 아키텍처의 다른 클라이언트도 똑같은 일을 할 수 있습니다.

기존 서비스가 필요로하는 것과 정확히 일치하는 사용자 정보 도우미에 대한 사용자 지정 인터페이스를 코딩합니다. 사용자 정의 구현은 세션 데이터 또는 클라이언트가 제공 할 수있는 모든 것을 기반으로 할 수 있습니다. 즉, 구현은 기존 라이브러리에 의존하지만이 데이터를 서비스 계층에서 사용할 수있는 공통 형식으로 변환합니다. 그렇게하면 응용 프로그램의 나머지 부분을 손상시키지 않고 도우미에서 사용자 정보가 나타나는 위치를 바꿀 수 있습니다.

+0

답변 해 주셔서 감사합니다. 귀하가 이야기하는 "사용자 데이터 서비스"에 대한 예 또는 참고 자료를 제게 제공해 주시겠습니까? 그것은 일종의 세션 객체 일 수 있습니까? (HttpSessionState 객체가 아니라 사용자 정의 인터페이스) – Jonathan

+0

@Jonathan 나는 내 대답에 설명을 추가하려고 시도했다. 대신 사용자 데이터 클래스를 도우미로 호출했다. –

+0

그렇다면 일반적으로 각 요청에 따라 서비스 클래스를 인스턴스화하고 공통 인터페이스를 통해 생성자에서 사용자 데이터 도우미를 전달하는 것입니다. 이 도우미는 클라이언트 응용 프로그램에서 사용자 데이터를 검색하는 데 사용됩니까? 처음에는 인터페이스를 통해 사용자 데이터를 직접 전달하지 않는 이유가 궁금했지만 실제로는 많은 소스에서 사용자 데이터가 올 수 있다고 생각했기 때문에 필요할 때마다 앱 데이터 클래스를 호출하기 전에 모든 데이터를 수집하는 것이 좋습니다. 내가 맞습니까? 왜 사용자 데이터 서비스라는 이름을 처음 사용했는지 이해하는 것이 좋습니다. – Jonathan

관련 문제