문제

나는 시각화를 위한 디자인 패턴 및 클래스 다이어그램 사용을 포함하여 객체 지향 아키텍처에 익숙하고 계약 및 프로토콜 바인딩이 있는 서비스 지향 아키텍처에 대해 알고 있지만 함수형 프로그래밍 언어로 작성된 시스템의 소프트웨어 아키텍처에 어떤 특징이 있습니까?

FP는 중대형 프로젝트에 사용된 것으로 알고 있습니다.Paul Graham은 Yahoo!의 첫 번째 화신을 썼습니다.Common Lisp에 저장합니다.일부 Lisp 개발 시스템은 복잡합니다.기능적 언어로 작성된 인공 지능과 금융 시스템은 꽤 커질 수 있습니다.그들은 모두 적어도 일종의 고유한 아키텍처를 가지고 있지만 공통점이 있는지 궁금합니다.

표현 평가를 기반으로 하는 아키텍처는 어떤 모습인가요?FP 아키텍처는 더 쉽게 구성 가능합니까?

업데이트: 카일이 나한테 그걸 상기시켜줬어 SICP 이 주제에 대한 좋은 자료입니다.

업데이트 2: 주제에 대한 좋은 게시물을 찾았습니다. 함수형 프로그래밍은 코드 구조에 어떤 영향을 미치나요?

도움이 되었습니까?

해결책

함수형 언어를 사용하는 프로젝트 "아키텍처"의 공통 스레드는 전통적인 시스템 아키텍처 의미에서 하위 시스템이 아닌 대수 계층으로 분리되는 경향이 있다는 것입니다.

그러한 프로젝트의 훌륭한 예를 보려면 다음을 확인하세요. XMonad, , 그리고 햅스.그것들이 어떻게 구성되어 있는지 살펴보면, 그 사이에 결합자 접착제가 있는 모나드 구조의 레이어로 구성되어 있음을 알 수 있습니다.

또한 보세요 스칼라 실험 시스템이 종속성을 추상화하는 구성 요소로 구성된 아키텍처를 설명하는 문서입니다.

다른 팁

저는 현재 "함수형 프로그래밍의 설계 및 아키텍처"라는 책을 집필하고 있습니다.이는 순수한 FP 세계(주요 언어는 Haskell)에 존재하는 많은 디자인 패턴과 접근 방식을 설명하지만 그 뿐만이 아닙니다.이 책은 순수 상태와 비순수 상태, 멀티스레딩, 네트워크, 데이터베이스, GUI를 사용하여 처음부터 대규모 애플리케이션을 구축하는 방법과 이를 레이어로 나누어 단순성을 얻는 방법을 가르쳐줍니다.또한 도메인과 언어를 모델링하는 방법, 애플리케이션 아키텍처를 구성하고 설명하는 방법, 테스트하는 방법 등을 보여줍니다.

주제 목록에는 다음이 포함됩니다.

  • 다이어그램을 이용한 아키텍처 모델링 접근 방식;
  • 요구사항 분석
  • 임베디드 DSL 도메인 모델링;
  • 외부 DSL 설계 및 구현
  • 효과가 있는 하위 시스템으로서의 모나드;
  • 기능적 인터페이스로서 무료 모나드;
  • 화살표 모양의 eDSL;
  • 무료 모나딕 eDSL을 사용한 제어 반전
  • 소프트웨어 트랜잭션 메모리;
  • 렌즈;
  • 상태, 판독기, 기록기, RWS, ST 모나드;
  • 불순한 상태:IORef, MVar, STM;
  • 멀티스레딩 및 동시 도메인 모델링
  • GUI;
  • UML, SOLID, GRASP와 같은 주류 기술 및 접근 방식의 적용 가능성
  • 불순한 하위 시스템과의 상호 작용.

이 책은 제가 연구하고 있는 하스켈 프로젝트, 특히 SCADA 애플리케이션을 기반으로 합니다. 안드로메다.이 책의 코드를 사용할 수 있습니다. 여기.책이 개발 중인 동안(2017년까지 완료될 예정) 내 기사 "FP의 디자인 및 아키텍처"를 숙지하시기 바랍니다. 여기 (루스).

업데이트

나는 내 책을 온라인으로 공유했습니다(처음 5장). Reddit의 게시물 보기

함수형 언어에서 찾을 수 있는 가장 큰 공통점은 함수를 사용하여 데이터를 저장한다는 것입니다.이는 객체 없이 객체에 접근자 함수를 사용하는 것과 약간 비슷합니다.대신, 필요한 데이터에 액세스할 수 있는 환경에서 함수가 생성됩니다.이제 이 함수는 어디에서나 전달 및 사용될 수 있으며 여전히 데이터 사용 기능을 유지할 수 있습니다.

다음은 매우 간단한 예입니다.이는 상태를 변경하므로 순전히 기능적이지는 않지만 충분히 일반적입니다.

(define (make-counter)
  (let ((count 0))
    (lambda ()
      (set! count (+ count 1))
      count)))

(define x (make-counter))

(x) returns 1

(x) returns 2

...etc...

그래서 우리는 카운터의 상태를 내부에 가지고 있는 또 다른 함수를 반환하는 make-counter 함수를 가지고 있습니다.새로 생성된 카운터를 호출하고 내부의 변경 사항을 관찰할 수 있습니다.

이것이 기능적 프로그램의 구조입니다.함수를 인수로 취하는 함수, 숨겨진 상태로 함수를 반환하는 함수 등이 있습니다.메모리를 직접 관리하는 것보다 훨씬 깨끗합니다.

나는 상당히 큰 규모의 기능적 프로젝트에 참여해 왔습니다.그들은 일반적으로 두 가지 진영으로 나뉩니다(적어도 제가 사용한 것).

  • 뛰어난 확장성/신뢰성/동시성.트랜잭션 모델은 언어에 매우 긴밀하게 구축될 수 있습니다.동시 ML은 이에 대한 좋은 예이며, 이를 사용하는 프로젝트는 동시성 정확성과 관련하여 오류를 범하기가 매우 어렵습니다.
  • 프레임워크 구문 분석/수정.이러한 프레임워크의 기반이 되는 많은 디자인 패턴은 기능적 언어로 공식화/구축/수정하기가 매우 쉽습니다.방문자 패턴이 이에 대한 좋은 예입니다.

인쇄해서 살펴보니 Ocaml의 디자인 패턴, 그들은 우리에게 익숙한 일반적인 디자인 패턴을 재현하기 위해 모듈과 펑터(및 객체)를 사용합니다.흥미롭긴 한데, 내 생각엔 그들은 물건을 사용하는 것 같아 ~도 기능적 언어의 이점을 실제로 볼 수 있는 기회가 많습니다.FP는 구성성이 매우 뛰어나며 그 특성 중 일부입니다.내 짧은 대답은 다음을 사용하는 것 같아요. 모듈 그리고 펑터.

내 현재 프로젝트는 꽤 크고 각 모듈을 ocaml에서 암시적인 파일로 분리합니다.나는 또한 프로젝트에서 나온 정말 성공적인 디자인에 대한 몇 가지 대안적인 관점이나 생각이 있을 수 있는 포괄적인 리소스를 찾고 있었습니다.

너무 접선적이지는 않기를 바라지만, 이 질문에 대한 답을 찾아보는 사람에게는 아마도 이 프레젠테이션이 흥미로울 것입니다. 동적 프로그래밍의 디자인 패턴 피터 노빅(Peter Norvig) 지음.

나는 이것이 도움이 될 것이라고 생각합니다.

일부 패턴은 사라집니다. 즉, 언어 기능에 의해 직접 지원되며 일부 패턴은 더 간단하거나 초점이 다르며 일부는 본질적으로 변경되지 않습니다.

[AIM-2002-005] 그레고리 T.설리반, 실행 가능한 디자인 패턴을 위한 고급 프로그래밍 언어 기능 "반영을 통한 더 나은 패턴

2002년 3월 22일

Design Patterns Book [GOF95]는 잘 설계된 소프트웨어 시스템에 지속적으로 나타나는 24 개의 시간 테스트 패턴을 제시합니다.각 패턴에는 패턴 주소의 설계 문제에 대한 설명과 샘플 구현 코드 및 설계 고려 사항이 표시됩니다.이 논문은 종종 "4 개의 갱"또는 "GOF"책의 패턴이 종종 호출 된 객체 지향 프로그래밍 언어를 사용하여 유사한 문제가 해결 될 때 어떻게 나타나는지를 탐구합니다.일부 패턴은 사라집니다. 즉, 언어 기능에 의해 직접 지원되며 일부 패턴은 더 간단하거나 초점이 다르며 일부는 본질적으로 변경되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top