0

순환 종속성에 문제가 있습니다. 비슷한 질문을하고 많은 답변을 읽었습니다. 해결 방법은 대부분 다루지 만 리팩토링을하고 싶습니다. 그래서 내가 옳은 것은 무엇이며 잘못 입력 한 부분에 대해서는 입력하고 싶습니다. 내가하는 일을 변경할 수는 있지만 전체 프로젝트 아키텍처는 변경할 수 없습니다.순환 종속성을 피하기 위해 리팩터링을 올바르게 수행

  1. 데이터 영역 데이터베이스를 액세스 : 나는 비주얼 스튜디오 2012

    에 VB.Net을 사용하고

    나는 두 개의 클래스 라이브러리가 있습니다.

  2. 내 비즈니스 오브젝트를 나타내는 클래스가 들어있는 DataObject.

내 프리젠 테이션 레이어는 DataObject 클래스의 개체를 반환하는 DataLayer의 메서드를 호출합니다.
(나는 다소 단순화 -.. 나는 실제로 컨트롤러 레이어를 가지고 있지만, 위의 두 클래스 라이브러리에 대한 참조를 필요로이 내 시간 전에서입니다 기존 아키텍처) 데이터 객체 클래스 라이브러리 I에서

파일을 나타내는 추상 클래스를 가진다. 파일 이름, 사용자 ID 등의 속성을 가지고 있습니다. 또한 파일을 가져 오는 여러 가지 방법이 있기 때문에 파생 클래스에서 코드하는 GetFile() 메서드가 있습니다. DataLayer 메서드는 이러한 파일 객체의 컬렉션을 반환하지만 실제로 필요할 때까지 실제 파일을 가져 오지 않습니다.


지금까지 필자는 webService (baseClass의 속성 사용) 및 fileSystem에 액세스하는 파생 클래스를 호출하는 파생 클래스가 있습니다. 양쪽 모두 파일을 나타내는 byte 배열을 돌려줍니다. 호출 클래스는 파일 검색 방법을 알 필요가 없습니다.

이제 데이타베이스의 데이타를 사용하여 즉석에서 파일을 빌드해야한다는 새로운 요구 사항이 생겼습니다. 기본 클래스의 속성을 사용하여 필요한 모든 데이터를 가져올 수 있습니다.

내 문제는 내 GetFile() 메서드는 순환 종속성을 일으키는 데이터베이스에서 데이터를 가져 오려면 내 DataLayer 클래스 라이브러리에 액세스해야합니다. DataLayer 클래스 라이브러리는 DataObject에 대한 참조를 가지므로 반환합니다. 하지만 이제는 DataObject의 클래스에서 DataLayer를 호출해야합니다.

  • 나는이 파생 클래스에 대한 특별한 뭔가를 내 프리젠 테이션 계층 다음 요구를 프리젠 테이션에서 데이터 영역을 호출하고 내 데이터 객체의 GETFILE() 메소드를 하는 결과를 전달하지만, 수 있습니다. 내 목표는 구현에 대해 알면서도 파생 클래스가 GetFile을 처리한다는 입니다.
  • 이 DataLayer 코드에 대한 새 클래스 라이브러리를 만들 수 있지만 은 특별한 경우가 마음에 들지 않습니다.
  • DataObject 클래스에서 직접 DB에 액세스 할 수 있지만 은 계층화 된 아키텍처를 우회합니다.

아키텍처를 변경할 수는 없지만 접근 방식을 바꿀 수 있습니다.

의견이 있으십니까?

답변

0

나는 대답을 가지고 있다고 생각합니다.

구체적인 클래스에서 데이터를 처음 (DataLayer에서)로드 할 때 파일을 만드는 데 필요한 모든 데이터를 가져옵니다. 내 GetFile() 메서드가 파일을 빌드하는 데 사용할 구체적인 클래스의 새 속성에 저장합니다.

이것은 약간의 오버 헤드가 있습니다. DB 호출을하고 필요하지 않을 때이 데이터를 메모리에 저장합니다. 나는 그것을 시도하고 성능이 어떻게되는지 보도록하겠습니다.

이 접근법에 대한 비판은 무엇입니까?