0

우려를 분리 할 때 나는 한 가지 단점을 가지고 있습니다. 클린 아키텍처 접근 방식 (Bob 삼촌)의 문제에 접근하고있는 전형적인 3 계층 아키텍처 (모델, 뷰, 발표자)에서 모델/데이터가 결합되는 방식은 무엇입니까? 다음은 전형적인 예입니다. Pencil 테이블에는 공유 여부에 관계없이 정보가 저장되지 않으므로 그 정보는 PencilProperties와 같은 다른 테이블에 저장됩니다. 그런 다음 도메인 모델 -PencilModel을 만들 때 -이 PencilProperties 테이블에 종속적 인 "isShared"필드를 설정하는 적절한 방법은 무엇입니까?모델 또는 엔티티 결합?

데이터 맵퍼 클래스를 통해 PencilDatabaseObject와 PencilModel간에 데이터를 매핑하는 리포지토리를 사용하고 있습니다. 나무는 식물 개체의 속성을 얻을 수 있도록, 나는 식물과 나무 사이에 매핑해야

Plant 
-> id 
-> name 

Tree 
-> id 
-> plant_id 
-> plant_name 

하는 시점에서 :

또 다른 예는 것

, 우리는 두 개체가? SOLID와 관련하여이 시점에서 데이터 매퍼에서 데이터베이스에 액세스하는 것이 잘못되었습니다.

미리 감사드립니다.

답변

1

두 경우 모두 Pencil, PencilProperties, PlantTree이 데이터 엔티티입니다. 저장소에서 데이터를 가져와야합니다. 저장소가 데이터베이스, ORM 또는 사전인지 여부는 중요하지 않습니다. 중요하게 영향을 미치는 유일한 방법은 구현하려는 방식입니다.

합니다 (C#을 LINQ를 용서하지만 자바에 충분히 가까이) 리포지토리 단순히으로 isShared를 가져가 수 있도록 구현을 위해 :

당신이 그것을 매핑해야하는 경우에 대해서는 var pencilIsShared = _pencilRepository.First().IsShared;

, 간단한 대답은 PencilPencilRepository보다 변경 가능성이 적습니다 당신 때문에

"저장소에", 당신은 의존성을 반전하고 당신이 PencilRepository 인터페이스를하고 PencilRepositoryImpl implemen 있는지 확인하는 것이 좋습니다 Pencil이 공유되는지 여부에 관계없이 사용자에게 반환 할 사람이됩니다.

데이터 맵퍼에서 데이터베이스에 액세스하는 것에 대한 우려 사항으로 수행 할 수있는 작업은 리퍼 지스터 논리를 리포지토리에 포함시킨 다음 더 이상 맵퍼를 추상화하여 더 이상 SRP를 위반하지 않도록하는 것입니다. 아래 링크를 참조하십시오.

저장소 패턴

이 사람은 꽤 깨끗 : https://medium.com/@krzychukosobudzki/repository-design-pattern-bc490b256006