2011-10-05 3 views
2

나는 안드로이드에서 안심할 수있는 웹 서비스와 통신하고있는 (DAL) 데이터 액세스 레이어 (이 질문은 DAO와 관련이있다) (안드로이드에서 안심할 수있는 웹 서비스와 통신하고있다. 상호 작용으로서의 도서관은 그리 복잡하지 않다).DAO를 생성자에 주입하는 것은 나쁜 습관으로 간주됩니까? 그렇다면 왜?

사용자가이 목록의 맨 아래에 도달하여 DAL에서 다른 정보 집합을 검색 할 때이 데이터 액세스 계층의 정보로 채워지는 목록을 래핑하는 개체가 있습니다.

이 목록 래핑 개체의 호출 클래스가 DAL (또는 DAO)이 아닌 목록 래핑 개체를 호출하면됩니다. 그런 다음 단일 DAL을 구성하여이 목록 포장 객체의 생성자에 전달하면 호출 클래스는이 목록 포장 객체에 대한 호출을 계속 수행 할 수 있으며 해당 객체는 새로운 정보의 검색을 처리 할 수 ​​있습니다.

그럼,이 말은 나쁜 습관 또는 정말로 나쁜 설명처럼 들릴까요?

DAL과 DAO를 도메인 개체의 생성자에 삽입하는 것은 좋지 않은가요?

+1

질문이 Android에만 해당되는 경우 태그로 지정하는 것이 맞습니까? –

+0

좀 더 일반적인 질문이 되길 원했으나, 뒤늦은 지경에서 안드로이드 요소는 원래 생각했던 것보다 더 적절하게 보입니다. 태그를 추가했습니다. – zode64

답변

2

답변은 "빈혈 도메인 모델"과 객체 지향 기능 프로그래밍을 혼합하는 것에 대해 강하게 생각하는지 여부에 달려 있습니다.

하나의 문제는 모델과 지속성 패키지가 서로에 대해 알아야하는 순환 종속성을 생성한다는 것입니다. 보다 기능적인 스타일을 사용하고 모델 객체에 대한 DAO 참조를 제공하지 않으면 일방적 인 관계입니다.

나는 당신의 디자인을별로 좋아하지 않을 것입니다. 나는 그것이 너무 결합되어있는 것을 두려워한다. 나는 기능적인 스타일을 혼합하여 고민하지 않습니다.

+0

데이터 액세스 레이어가 실제로 도메인 객체를 생성하는 대신에 관련 정보 (이 경우 json 문자열)를 작성하여 목록 객체를 구성하는 작업을 수행하지 않은 경우 순환 종속성을 제거합니다 그것은 더 이상 DAL/DAO가 아니라 어댑터입니다). 어떻게 보셨습니까? – zode64

+0

볼 수있는 어떤 이점도없는 추가 합병증. – duffymo

1

Domain Objects은 실제 로직이없는 데이터 통신 업체입니다. 따라서 나는 당신의 DAO 로직과 그것을 단단히 묶는 것이 나쁜 디자인이라고 생각할 것입니다. 일반적인 논리는 다음과 같을 수 있습니다.

public class DataService { 
    private DAO dao; 
} 

public class UserService { 
    private DataService svc; 

    public DomainObject createDomainObject() { 
     return new DomainObject(dao.getData()); 
    } 
} 
+0

이 성명서 -'도메인 객체는 일반적으로 실제 로직이없는 데이터 캐리어입니다. '는 약간 잘못되었습니다. 도메인 객체는 비즈니스 로직을 가지며 데이터 캐리어가되는 DTO와는 달리 (그리고 빈혈 도메인 모델에서 발견되는) 리치 도메인 모델의 일부입니다. –

0

구현중인 항목이 페이지 매김입니다. 그리고 그것을위한 당신의 해결책은 내가 그것을 어떻게 구현했는지 (그리고 가지고 있는지)입니다.

DAL을 생성자에 전달하는 것은 나쁘지 않습니다. 가장 좋은 방법은 레이어간에 "하드 코드 된"의존성을 피하기 위해 Dependency Injection 프레임 워크 (Spring이 중요한 예입니다)를 사용하는 것입니다.

하지만 Android에 대해 언급 한 이후로 그런 프레임 워크를 사용하는 것이 좋은 생각인지 또는 가능한지 의심 스럽습니다. (어쩌면 안드로이드는 일종의 DI 빌드 인을 가지고있다.)

당신의 요약은 당신의 애플리케이션 아키텍처에 대해 생각해 보았다. 인수를 생성자에 전달하는 것에 대해 걱정하지 않을 것입니다.

1

원형 의존성을 도입 했으므로 최고의 디자인이 아닙니다.

안드로이드 앱을 개발 중이며 목록을 스크롤하는 경우 SlowAdapterEfficientAdapter이 아마도 찾고있는 것일 것입니다.

+0

데이터 액세스 레이어가 실제로 도메인 객체를 생성하는 대신에 관련 정보 (이 경우 json 문자열)를 작성하여 목록 객체를 구성하는 작업을 수행하지 않은 경우 순환 종속성을 제거합니다 그것은 더 이상 DAL/DAO가 아니라 어댑터입니다). 어떻게 보셨습니까? – zode64

관련 문제