패키지 (gems, eggs 등)를 사용하여 분리 된 아키텍처 생성


10

주요 이슈

가장 현대적인 프로그래밍 플랫폼은 패키지 관리 (생각에 대해 가지고있는 좋은 지원보고 gem, npm, pip그래서 촉진과 느슨하게 결합 된 아키텍처를 만드는 등, 내부적으로 개발 된 패키지로 구성 할 응용 프로그램이나 시스템을 설계하는 의미가 않습니다, 등)?

이에 대한 예는 인증 및 시스템의 다른 구성 요소뿐만 아니라 데이터베이스 액세스를위한 패키지를 만드는 것입니다. 물론 이들은 외부 패키지도 사용합니다. 그런 다음 시스템은 자체 코드베이스 내에 코드를 포함하는 대신 이러한 패키지를 가져 와서 사용합니다.

고려 사항

나에게 이것은 거의 웹 기반 대 데스크톱 응용 프로그램 방식 (코드 업데이트가 거의 자동으로 적용되고 단일 기능을위한 단일 코드베이스 등)으로 코드 디커플링을 촉진하고 유지 관리를 돕는 것으로 보입니다.

합리적이고 건전한 디자인 컨셉처럼 보입니까? 오늘날 실제로 응용 프로그램을 구성하는 표준 방법으로 사용됩니까?

답변:


12

나는이 두 번 (.NET과 함께 nuget을 사용하는) 프로젝트에 참여했으며 균형을 잡는 것이 좋습니다. 그러나 마일리지는 다를 수 있습니다.

만병 통치약이라고 생각하지 말고 새로운 문제를 일으키지 않고 모든 문제를 해결할 것이라고 생각하십시오. 릴리스 관리는 완전히 새로운 차원의 복잡성 갖게 되며, 기존 에는 알지 못했던 버전 의존성 문제를 해결해야하며, 4 가지 패키지로 인해 4 가지 다른 패키지를 업그레이드해야하므로 결정을 저주 할 때가 있습니다. 작은 버그로 빠르게 수정하고 릴리스해야합니다.

다른 한편으로, 당신은 그것을 잘 분리시키는 것이 옳습니다. 당신이 그것을 과도하게 사용하지 않는 한, 당신은 아마 "많은 노력을 추가 한 것"보다 "오, 잘 작동했다"라고 생각할 때 더 많은 기회를 찾을 것입니다. 여러 응용 프로그램간에 코드를 공유하는 경우 앱을 독립적으로 쉽게 업그레이드 할 수 있으므로 특히 효과적입니다.

그리고 나 같은 사람이라면 패키지를 사용하는 테스트 앱을 빠르게 작성하여 버그 찾기 프로세스에서 전체 애플리케이션 계층을 제거합니다. 그리고 그 자체로도 그만한 가치가 있습니다.


훌륭한 입력. 일반적으로 모든 것이 균형을 이루어야하며, 여러분의 의견이 그 라인에 어떻게 머무르는 지 좋아합니다. 그렇지 않은 것보다 많은 경우에 잘 작동하는 경향이 있다고 생각하는 것이 좋습니다. 그리고 문제의 출현은 어쨌든 일정합니다. 앱 테스트에 대한 팁을 좋아합니다. :). +1.
Juan Carlos Coto

1
나는 * nix 세계에서도 이것을 수행하는 많은 프로젝트가 있다고 덧붙였다. 당신은 종종 개발 리소스 등에서 GUI와 프론트 엔드에서 분리 된 라이브러리를 가지고 있습니다.
David Cowden

흥미 롭군 복잡한 시스템을 구성하는 좋은 방법 인 것 같지만 과도하게 엔지니어링되는 경우가 두렵습니다. 주의해서 적용하면 안됩니다. 감사!
Juan Carlos Coto

3

이것은 좋은 생각입니다. 내부 패키지 저장소 (일반적으로 Java 세계에서는 "아티팩트 저장소"또는 Python 세계에서는 "pypi 서버"라고 함)를 설정하여 원하지 않거나 원하지 않는 패키지를 유지해야합니다. ' t 오픈 소스로 릴리스하십시오.

@pdr이 지적했듯이, 일부 패키지를 변경하려면 먼저 다른 패키지를 다시 변경 해야하는 의존성 지옥 을 가질 준비를하십시오. 이것은 코드 줄을 변경하는 것이 아니라 테스트하여 변경 사항을 받아 들일 수 있음을 의미합니다. 릴리스를 빌드하고 위에서 언급 한 패키지 저장소에 릴리스를 업로드합니다. 그런 다음 변경 하려는 내용 을 변경하십시오.

경험을 통해이를 최소화하고 시도 할 수있는 유일한 방법 은 패키지의 공통 개념을 "공통"또는 "프레임 워크"패키지로 추상화하는 것에 만 의존하지 마십시오 . 이것은 매우 객관적인 일처럼 보일 수 있지만 자주, 모순되는 변경 및 릴리스가 필요한 몬스터 패키지로 이어질 것입니다. 더 나은 방법은 시스템의 기능에 대해 생각하고 질문에 설명 된대로 각 기능에 대한 헬퍼 패키지를 작성하는 것입니다.

그 외에도, 얻을 수있는 주요 이점은 앱이 (많은) 의존성으로부터 격리되어 있으므로 고통없이 교환 할 수 있다는 것입니다.


훌륭한 팁. common패키지를 옵션으로 고려하지는 않았지만 앞으로는 "합리적인"결정이 될 수 있습니다. 내 의도는 코드 대신 구성 요소의 선을 따라 갔으므로 다른 패키지에서 동일한 작업을 수행하는 코드가 너무 많아서는 안됩니다. 패키지간에 공통점이 있다면 프로젝트가 정의에 따라 다르기 때문에 이러한 반복이 좋은 프로그래밍 원칙을 위반하지 않을 것이라고 생각합니다.
Juan Carlos Coto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.