소프트웨어 아키텍처는 언어에 어느 정도 의존합니까?


14

소프트웨어 아키텍처 및 디자인 패턴에 대해 스스로 교육하면서 대부분의 경우 설명에 일부 언어 기능 및 디자인 관련 내용이 포함되어 있음을 알게되었습니다.

예를 들어 실제로 클래스와 인터페이스를 사용하여 아이디어를 설명하는 기사 나 책이 있습니다. 이 주제에서 쉽게 찾을 수있는 모든 것은 객체와 OOP 개념을 언급 할 것입니다.

시스템이 작성된 언어에 그러한 개념이 전혀 없다면 어떻게 될까요? 예를 들어 동적으로 유형이 지정되고 인터페이스 개념이없는 Python 또는 Node를 사용하면 어떻게됩니까? 인터페이스가 임시 구문 인 런타임에 존재하지 않는 TypeScript를 사용하는 경우 어떻게합니까? 함수형 프로그래밍을 수용하려고하면 어떻게합니까? 예를 들어 SOLID를 무시하고 내 언어에 적합한 다른 개념을 찾아야합니까?

그렇다면 무엇입니까? 불행히도 잘 알려진 모든 패러다임은 (내가 아는 한) OOP 개념과 유형을 어떤 식 으로든 참조합니다. 그렇지 않은 경우 일반적인 아키텍처 및 디자인 원칙을 특정 언어 및 사용 사례에 적용 할 때 따라야 할 규칙은 무엇입니까?

일반적으로 아키텍처와 언어 간의 종속성을 어떻게 설명 하시겠습니까?


소프트웨어 아키텍처에 관한 기사를 썼습니다 : 소프트웨어 복잡성 관리 linkedin.com/pulse/…
overexchange

첫째, 소프트웨어 아키텍처는 사용자가 생각한 기술을 기반으로합니다. 예를 들어, 파이썬은 해당 스레드가 IO 바인딩 될 때까지 멀티 스레딩을 사용하지 않습니다. 이것은 멀티 코어 CPU 바운드 작업을 사용하는 데있어 실질적인 한계입니다. 둘째, 당신이 들어야 ... youtu.be/FF-tKLISfPE는 세 번째로, 당신은 / 스케일 러블이어야 5~6년를 들어, 배포 특정 도메인의 기존의 안정적인 분산 된 기업 제품에 대한 작업을 분석해야합니다. 이것은 기술이 디자인에 어떤 영향을 미치는지에 대한 유기적 인 이해입니다. Btw .. 이러한 제품은 Java 이전의 세계에서 처음부터 작성되었습니다.
overexchange

Wrt 기술 ... 자바 세계에서는 Java 5/6/7 언어 디자인이 실제 설립자를 통제 할 때까지 Java 8부터는 java를 프로그래밍 언어가 아닌 선전 기계로 간주합니다. 제 생각에는 자바는 프로젝트 관리자의 기술이되었습니다. 그래서, 초보자로서, 나는 C / C ++ / 파이썬 사용하여 작성된 제품에 / 작업을 분석하는 것
overexchange을

질문에 단어 아키텍처를 사용하지 마십시오. 혼동됩니다. 귀하의 질문은 디자인에 관한 것입니다. 언어의 선택은 일반적으로 건축으로 인정 될 것입니다. 귀하의 질문은 그 단어의 표현 방식에 맞지 않습니다.
Martin Maat

또한 파이썬과 자바 스크립트 에는 인터페이스 있으며, 그것들을 구분하기 위해 별도의 키워드를 사용하지 않습니다
Caleth

답변:


11

소프트웨어 아키텍처는 집이나 다리의 아키텍처와 매우 유사합니다. 다리는 자체 무게와 다리를 타는 차량 또는 다리를 걷는 사람들의 무게를 견뎌야합니다. 날씨를 견뎌야합니다. 그것을 만드는 데 사용하는 재료는 강하고 상대적으로 가벼워 야합니다.

집을 짓는 데 사용할 수있는 많은 자료가 있습니다. 벽돌이나 치장 벽토를 사용할 수 있습니다. 목재 빔 또는 금속 빔을 사용할 수 있습니다. 각 재료는 무게, 강도 등 자체 특성이 있습니다. 이러한 모든 특성은 아키텍처에 영향을줍니다.

같은 방법으로, 사용하는 프로그래밍 언어는 아키텍처를 구축하는 방식에 영향을줍니다. 아키텍처는 C와 같은 클래스가 아닌 프로그래밍 언어에서 C와는 다른 프로그래밍 언어에서 다르게 보일 것입니다.

SOLID 원칙은 주로 객체 지향 언어 (예 : 클래스가있는 언어)에 관한 것입니다.


4

아키텍처는 목표를 달성 할 수있는 기능에 달려 있습니다. 언어 선택은 기능을 제한 할 수 있습니다. 모든 Turing 완성 언어에는 모든 프로그래밍 작업을 완료 할 수있는 기능이 있습니다. 그 시점이 지나면 사람이 읽을 수있는 언어로 어떻게 솔루션을 사용할 수 있는지가 결정됩니다.

많은 소프트웨어 아키텍처 체계는 핵심 도메인 비즈니스 규칙에서 기술 선택에 대한 모든 지식을 제거하도록 요구합니다. 핵심 지식을 절대로 제거 할 수없는 기술 선택은 표현하려는 언어입니다.

Architecture에 관한 책이 목표에 대해 이야기 할 때 언어는 목표를 달성 할 수있는 한 중요하지 않습니다. 책에서 이러한 목표를 달성하는 방법을 알려 주면 언어가 교착하기 시작합니다.


귀하의 답변에 좋은 점이 있지만, 역사적으로 소프트웨어 아키텍처는 최신 기술로 구현되었습니다.
overexchange

@overexchange 좋은 아키텍처의 요점은 다음 트렌드에 대비하여 현재 트렌드보다 오래 지속될 수있는 소프트웨어를 만드는 것입니다.
candied_orange 3:13에

미들웨어 세계에서 가장 어려운 제품 아키텍처는 1990 년대까지 RPC / RMI / CORBA를 넘어선 생각을 할 수 없었습니다. 나는 절차 지향적 인 remore 호출에 의존하는 고전적인 디자인을 보았다. 그런 다음 ServiceOArch는 아키텍처 측면에서 미들웨어의 트렌드를 변경했습니다.
overexchange

2
@CandiedOrange는 이론입니다. 실제로, 많은 사람들이 때때로 "hype-driven development"라고하는 것을 보았습니다. 디자인 당시 당시 동료들이 가장 많이 이야기하고있는 것만으로도 그 대화에 참여할 수 있습니다.
marstato

@marstato 합의. 가장 좋은 예는 현재 프로젝트에서 Spring / Springboot를 사용하여 새로운 프로젝트에 대해 왜 알지 못하는 것입니까?
overexchange

1

용어로서의 건축은 실제 세계의 건축과 매우 관련이있는 매우 특정한 의미를 지니고 있으며 그 핵심은 사물을 건축하는 예술과 실천, 사물이 어떻게 만들어지고 조립되는지에 관한 것입니다. 그런 식으로 건축이 잘되면 언어가 건축과 매우 밀접하게 연관되어 있다고 생각합니다. 건축이 잘 된 건물이 잘 건축 된 건물에 친밀한 정보를 제공 해야하는 것처럼 말입니다.

소프트웨어에서, 아키텍처의 선택은 언어의 속성에 맞는 방식으로 이루어져야합니다. 객체 지향 언어로 시스템을 구축하는 경우 시스템 아키텍처도 객체 지향으로 기대됩니다. 기능적 언어로 시스템을 구축하는 경우 해당 시스템의 아키텍처도 기능적이라고 기대합니다.

말이 되나요?


답변 주셔서 감사합니다! 동적 유형 또는 기능 언어와 관련하여 소프트웨어 아키텍처를 정교하게 설명하는 리소스를 알고 있습니까? tbh 내가 본 모든 것은 자바에서 즉시 작동하지만 js에는 약간의 적응이 필요합니다. 일반적인 아키텍처 패턴을 약한 유형의 언어에 적용하기위한 가능한 지침은 무엇입니까? 그것을 시도해야합니까 아니면 완전히 다른 것이되어야합니까?
Tristan Tzara

내 관심사는 예를 들어 Java를 사용하는 경우 아키텍처에 대한 많은 모범 사례와 패턴이 있지만 다른 종류의 언어에 대해서는 보지 못했습니다. 궁금 그래서, 어떻게 사람들을 치료하는
트리스탕 차라에게

기본적으로 예를 들어 SOLID는 여전히 이런 경우에 있습니까? 그렇다면 어떻게 적응합니까? 그렇지 않다면 어떻게해야합니까?
Tristan Tzara

SOLID 원리는 매우 객체 지향적입니다. 그러나 언어와 상관없이 모든 소프트웨어 시스템에 적용 할 수있는 고차 원칙을 인코딩한다고 생각합니다. 그러나 기본 원리는 정확히 다음과 같습니다. 새 모이통을 넘어 서기 전에 그 원리를 알고 이해해야합니다.
RibaldEddie

@TristanTzara 객체 지향 프로그래밍은 객체 지향 언어 이전에 그리고없이 객체 지향 언어가 발명되었다. 모든 범용 언어로 할 수 있습니다. 수업이없는 사람들도.
candied_orange

1

우선, 당신이 생각하는 언어조차도 당신이 생각할 수있는 것에 깊은 영향을 미칩니다. PASCAL이 Niklaus Wirth와 C가 Brian Kernighan과 Dennis Ritchie에 의해 만들어진 이유가 있습니다.

더 높은 수준에서, 특정 개념 (및 다른 개념의 부족)을 표현하는 능력은 당신의 생각을 지시하고 다른 배경을 가진 다른 사람 일 필요는없는 특정 해결책에 도달하게합니다.

마지막으로, 언급 한 개념은 모든 범용 언어로 구현 될 수 있습니다. 구문 지원이 없을 수 있으며 구현이 번거로울 수 있습니다. C로 할 수있는 것처럼 충분히 커밋 된 (또는 충분히 미쳐 버린 경우) 객체 지향 x86 어셈블리 코드를 작성할 수 있습니다. 실제로 C ++의 첫 번째 구현은 C ++ 코드를 C로 컴파일 한 전 처리기였으며 맹 글링 된 심볼 이름이 만들어졌습니다. 훨씬 더 재미 디버깅).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.