나는 이것에 대해 얼마 전에 생각했고 최근에 내 가게가 첫 번째 실제 Java 웹 앱을 수행하면서 다시 나타났습니다.
소개로 두 가지 주요 패키지 명명 전략을 봅니다. (명확하게 말하면, 나는 이것의 전체 'domain.company.project'부분을 말하는 것이 아니라 그 아래의 패키지 규칙에 대해 이야기하고 있습니다.) 어쨌든, 내가 보는 패키지 명명 규칙은 다음과 같습니다.
기능적 : 비즈니스 도메인에 따른 ID가 아닌 구조적으로 기능에 따라 패키지 이름을 지정합니다. 이것에 대한 또 다른 용어는 '레이어'에 따른 이름 지정일 수 있습니다. 따라서 * .ui 패키지와 * .domain 패키지 및 * .orm 패키지가 있습니다. 패키지는 수직이 아닌 수평 슬라이스입니다.
이것은 논리적 이름 지정보다 훨씬 일반적입니다. 사실 저는 이런 일을하는 프로젝트를 본 적이 없거나 들어 본 적이 없다고 생각합니다. 물론 이것은 내가 끔찍하게 똑똑하지 않고 모든 사람들이 자신이하는 방식으로 그렇게 할 큰 이유가 있다고 생각하기 때문에 (당신이 NP 문제에 대한 해결책을 생각해 냈다고 생각하는 것과 비슷하게) 저를 걱정스럽게 만듭니다. 반면에, 난 그냥 방에있는 코끼리 실종자에 반대 아니에요 그리고 나는 실제 인수 들어 본 적이 에 대한 이런 식의 이름을 지정할 패키지를하고. 사실상 표준 인 것 같습니다.
논리적 : 비즈니스 도메인 ID에 따라 패키지 이름을 지정 하고 해당 수직적 기능 조각과 관련된 모든 클래스를 해당 패키지에 넣습니다.
나는 전에 언급했듯이 이것을 보거나 들어 본 적이 없지만 나에게는 의미가 있습니다.
저는 시스템에 수평이 아닌 수직으로 접근하는 경향이 있습니다. 데이터 액세스 계층이 아닌 주문 처리 시스템에 들어가서 개발하고 싶습니다. 당연히 그 시스템을 개발할 때 데이터 액세스 계층을 건드릴 가능성이 있지만 요점은 그렇게 생각하지 않는다는 것입니다. 물론 이것이 의미하는 바는 변경 명령을 받거나 새로운 기능을 구현하고 싶을 때 관련된 모든 클래스를 찾기 위해 여러 패키지에서 낚시를하지 않아도된다는 것입니다. 대신 X 패키지를 살펴 봅니다. 왜냐하면 내가하는 일은 X와 관련이 있기 때문입니다.
개발 관점에서 볼 때 패키지가 아키텍처가 아닌 비즈니스 도메인을 문서화하는 것이 큰 승리라고 생각합니다. 나는 도메인은 거의 항상 시스템의 아키텍처, 특히이 시점에서 구현에서 거의 평범 해지는 곳에서 찾기 어려운 시스템의 일부라고 느낍니다. 이런 유형의 명명 규칙을 사용하고 패키지 명명에서 즉시 시스템에 도달 할 수 있다는 사실은 주문, 고객, 기업, 제품 등을 처리한다는 것을 알기 때문에 매우 편리해 보입니다.
이렇게하면 Java의 액세스 수정자를 훨씬 더 잘 활용할 수있을 것 같습니다. 이를 통해 시스템의 계층이 아닌 하위 시스템에 인터페이스를 훨씬 더 명확하게 정의 할 수 있습니다. 따라서 투명하게 지속되기를 원하는 주문 하위 시스템이있는 경우 이론적으로는 dao 계층의 지속성 클래스에 대한 공용 인터페이스를 만들지 않고 대신 dao 클래스를 그것이 다루는 클래스들과 함께. 물론, 경우에 이 기능을 노출하고 싶어, 당신은 그것을위한 인터페이스를 제공하거나 공개 할 수 있습니다. 시스템 기능의 수직 조각을 여러 패키지로 분할하여 많은 것을 잃어버린 것처럼 보입니다.
내가 볼 수있는 한 가지 단점은 레이어를 찢어내는 것이 조금 더 어렵다는 것입니다. 패키지를 삭제하거나 이름을 변경 한 다음 대체 기술을 사용하여 새 패키지를 삭제하는 대신 모든 패키지의 모든 클래스를 변경해야합니다. 그러나 나는 이것이 큰 문제라고 생각하지 않습니다. 경험 부족 때문일 수도 있지만, 시스템 내에서 수직 기능 슬라이스를 편집하고 들어가는 횟수에 비해 기술을 교체하는 횟수가 적다는 것을 상상해야합니다.
그래서 질문이 당신에게 나올 것이라고 생각합니다. 당신은 패키지 이름을 어떻게 지정하고 왜 그럴까요? 내가 여기서 황금 거위 같은 것을 우연히 만났다고 생각하지는 않는다는 것을 이해하십시오. 나는 거의 학문적 경험으로이 모든 것에 대해 꽤 생소합니다. 그러나 나는 내 추론의 허점을 발견 할 수 없으므로 여러분 모두가 앞으로 나아갈 수 있기를 바랍니다.