Skip to content

test(konsist): domain 레이어 가드가 안드로이드 SDK 의존을 안 막는다 — com.afternote.* 임포트만 검사 (#385 후속) #1150

Closed

Description

@OnlyReadOneBook

📜 Overview (Required)

LayerDependencyKonsistTest(#385 도입분)는 com.afternote. 로 시작하는 import 만 봅니다.

FORBIDDEN_LAYER_IMPORT = Regex("""^com\.afternote\..*\.(data|presentation)\..*$""")
ALLOWED_INTERNAL_IMPORT = Regex("""^com\.afternote\.core\.model\..*$|^com\.afternote\..*\.domain(\..*)?$""")

그래서 domain 이 안드로이드 프레임워크 타입을 끌어와도 아무도 막지 않습니다:

import android.net.Uri          // 통과
import android.content.Context  // 통과

domain 모듈이 afternote.android.domain → afternote.android.library 기반이라 안드로이드 SDK 가 클래스패스에 있어 컴파일도 됩니다. 순수 JVM 모듈이었다면 컴파일 단계에서 걸렸을 것이 지금은 통과합니다.

AndroidDomainConventionPlugin 은 :core:model 을 물려 주기만 하고 막지는 않습니다.

지금 상태 — 위반 0건

domain 모듈 7개(core, afternote, receiver, timeletter, mindrecord, setting, onboarding) 전수 조사:

임포트 건수
android.* (SDK) 0
androidx.paging.PagingData 4

즉 관례로는 이미 지켜지고 있고, 가드만 없습니다. 규칙을 넣어도 당장 초록입니다 — 부채 상환이 아니라 되돌아가지 않게 못을 박는 작업입니다.

🚀 해야할 일

  • LayerDependencyKonsistTest 에 "domain 은 안드로이드 SDK 타입에 의존하지 않는다" 추가
@Test
fun `domain 은 안드로이드 SDK 타입에 의존하지 않는다`() {
    domainFiles().assertFalse { file ->
        file.imports.any { it.name.startsWith("android.") }
    }
}
  • androidx.* 를 통째로 막지 말 것 — androidx.paging.PagingData 4건이 걸린다. 아래 판단 참고
  • 막을 거면 UI 쪽만 골라 막는다: androidx.paging.runtime·androidx.paging.compose·androidx.compose.*·androidx.lifecycle.*
  • konsist 는 :konsist:test 로 이미 PR 게이트에 물려 있어 워크플로 변경 불필요

📍 androidx.paging.PagingData 는 놔둔다 — 근거

AfternoteRepository·ReceiverRepository 가 Flow<PagingData<T>> 를 반환합니다. 실측 판단:

  • UI 타입이 아니다. Paging 의 안드로이드/UI 절반(PagingDataAdapter, collectAsLazyPagingItems)은 paging-runtime·paging-compose 에 있고, domain 은 그 둘을 의존하지 않는다 (paging-common 만).
  • Google 권장 아키텍처가 repository 인터페이스에 Flow<PagingData<T>> 를 두는 형태를 그대로 제시한다.
  • 다만 완전한 순수 JVM 은 아니다 — 해석되는 아티팩트가 paging-common.aar(KMP 라이브러리의 android 타깃)이고, 소스 72개 중 한 곳이 android.util.Log 를 쓴다. 로깅 한 줄이라 도메인 개념 유출은 아니다.

그래서 그을 선은 "androidx. 금지" 가 아니라 "안드로이드 SDK(android.) 와 UI 툴킷 금지" 입니다. 전자는 PagingData 를 잘못 잡고, 후자가 실제로 막고 싶은 것을 막습니다.

📍 Note

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions