모듈 성과 플랫폼 독립성 모두에 대한 최선의 접근 방식은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/33510

  •  09-06-2019
  •  | 
  •  

문제

이 질문이 처음에는 생각만큼 광범위하지 않기를 바랍니다. 제 <sarcasm> voluminous </sarcasm> 여가 시간에 소프트웨어 응용 프로그램을 설계하고 있습니다. 크로스 플랫폼과 모듈 식 모두를 원합니다. 이 시점에서 아직 계획 단계에 있기 때문에 거의 모든 언어와 도구 세트를 선택할 수 있습니다.

두 가지 목표 (모듈화, 플랫폼 불가지론)를 달성하는 방법이 너무나 많아 보이기 때문에 일을 더 어렵게 만듭니다.

내 기본 전제는 보안, 데이터 저장, 운영 체제와의 상호 작용 및 구성이 모두 "컨테이너"응용 프로그램에서 처리되어야한다는 것입니다. 그러나 대부분의 다른 기능은 플러그인 모듈을 통해 제공됩니다. (내 아이디어를 완전히 포기하지 않고) 높은 수준에서 설명해야한다면 동일한 목표에 전념하는 여러 다른 작업을 수행 할 수있는 단일 응용 프로그램이 될 것입니다 (해야 할 일이 많지만 모두 데이터는 상호 작용하고 가용성이 높아야합니다.

이것은 새로운 아이디어가 아니며 특히 이국적인 것도 아닙니다. 그러나 나는 그것을하는 방법이 그리 많지는 않지만 (많은 방법을 생각할 수있다), 어떤 방법이 가장 좋은지에 대해 씨름하고 있음을 깨닫는다.

예를 들어 Eclipse가 내가 설명하는 내용을 실질적으로 구현한다는 것을 알고 있지만 일반적으로 Java 응용 프로그램 (Eclipse도 예외는 아님)이 필요한 작업에 비해 너무 크고 느립니다. Python 및 Ruby로 작성된 Ditto 데스크톱 앱 (훌륭한 언어입니다!)

다른 플랫폼에 대한 코드베이스를 네이티브 익 스펙터 블로 재 컴파일하는 것을 신경 쓰지 않습니다. 그러나 C와 C ++에는 고유 한 문제가 있습니다.

C # 개발자로서 저는 관리 코드를 선호합니다. 하지만 아직 Mono에서 판매되지는 않습니다 (확신 할 수 있습니다).

누군가 공유 할 아이디어 / 경험 / 특정 좋아하는 프레임 워크가 있습니까?

도움이 되었습니까?

해결책

예를 들어 보겠습니다. .NET 앱의 경우 CAB (Composite Application Block) 및 WPF 용 복합 애플리케이션 지침이 있습니다. 둘 다 주로 플러그인 아키텍처와 유사한 구성 요소 간의 모듈성 및 느슨한 결합에 중점을 둔 여러 디자인 패턴의 구현입니다. IOC 프레임 워크, MVC 기본 클래스, 느슨하게 결합 된 이벤트 브로커, 모듈의 동적로드 및 기타 항목이 있습니다. .

그래서 나는 그런 종류의 패턴 인프라가 .NET만을위한 것이 아니라 당신이 찾고자하는 것이라고 생각합니다. 그러나 CAB를 패턴 구현의 집합으로 보면 거의 모든 언어와 플랫폼에 개별 패턴에 대해 이미 기본 제공되거나 타사 프레임 워크가 있다는 것을 알 수 있습니다.

그래서 내 생각은 :

  1. 이러한 디자인 패턴 중 일부를 연구합니다 (익숙하지 않은 경우). WPF 문서 용 CAB 프레임 워크를 예로 들어 볼 수 있습니다. 복합 애플리케이션의 패턴 도서관
  2. 먼저 특정 패턴 구현이나 제품을 고려하지 않고 달성하려는 패턴에 유용하다고 생각하는 패턴을 고려하여 아키텍처를 설계합니다.
  3. '아키텍처 요구 사항'을보다 구체적으로 정의한 후에는 사용하기로 결정한 언어의 패턴 / 기능을 각각 달성하는 데 도움이되는 개별 프레임 워크를 찾아이를 기반으로 자체 애플리케이션 프레임 워크를 구성합니다.

    나는이 모든 플랫폼을 독립적으로 만드는 것이 어려운 부분이라는 데 동의합니다. Java와 같은 성숙한 플랫폼 독립 언어를 선택할 수있는 다른 솔루션은 생각할 수 없습니다.

다른 팁

데스크톱 또는 웹 애플리케이션을 계획하고 있습니까?

여기에있는 모든 사람들은 Mono가 훌륭하다고 생각하는 것 같지만 여전히 산업적으로 사용할 준비가되어 있지 않다고 생각합니다. 저는 Mono를 와인이있는 곳과 동일시 할 것입니다. 좋은 생각입니다. 잘 작동 할 때 잘 작동하고 그렇지 않을 때 ... Apache 용 mod_mono는 매우 결함이 많고 제대로 실행하기 어렵습니다.

데스크톱을 목표로한다면 Eclipse RCP (Rich Client Platform) 프레임 워크를 능가하는 것은 없습니다. http://wiki.eclipse.org/index.php/Rich_Client_Platform .

창, Linux, Mac을 모두 동일한 코드로 빌드 할 수 있으며 모든 UI 구성 요소는 OS에 고유합니다. 그리고 RCP는 모듈화 측면에서 승리하며 타의 추종을 불허하는 플러그인 아키텍처를 가지고 있습니다 (내가 본 것에서)

저는 지금까지 1.5 년 동안 RCP와 일해 왔으며 다른 무엇을 대체 할 수 있을지 모르겠습니다. 틈새 시장에서 1 위입니다.

당신이 자바에 완전히 반대한다면 파이썬이나 C ++로 wxWidgets를 살펴볼 것입니다.

플랫폼 독립성을 원하는 경우 성능과 개발 노력 사이에서 균형을 맞춰야합니다. C ++는 Java보다 빠를 수 있지만 (논란의 여지가있는 FWIW) Java를 사용하면 플랫폼 독립성을 훨씬 더 쉽게 얻을 수 있습니다. Python과 Ruby는 같은 배에 있습니다.

.NET이 Java보다 훨씬 빠를 것 같지는 않지만 (모두 VM 언어 임) .NET의 큰 문제는 플랫폼 독립성입니다. Mono는 지금까지 고귀한 목표와 놀랍도록 좋은 결과를 가지고 있지만 항상 Windows에서 Microsoft를 따라 잡을 것입니다. 제한 사항을 수용 할 수는 있지만 Java, Python 및 Ruby와 동일한 다중 플랫폼 환경을 갖는 것과는 여전히 다릅니다. 또한 : .NET 개발 및 지원 도구는 Windows로 치우쳐 있으며 아마도 항상 그렇게 될 것입니다.

IMO, 최선의 방법은 자바 또는 최소한 JVM을 대상으로하는 것입니다. Java 언어가 마음에 들지 않으면 (그리고 C # 개발자로서 저는 그렇지 않다고 생각합니다) 적어도 Jython, JRuby 및 Scala와 같은 옵션이 있습니다. JVM을 사용하면 매우 우수한 플랫폼 독립성, 우수한 성능 및 수많은 라이브러리 및 지원 도구에 액세스 할 수 있습니다. 필요한 작업을 수행하는 Java 라이브러리, 포트 또는 구현이 거의 항상 있습니다. 나는 다른 플랫폼이 같은 수의 옵션을 가지고 있다고 생각하지 않습니다. 그 유연성에는 진정한 가치가 있습니다.

모듈성에 관해서는 사용하는 플랫폼보다 소프트웨어를 빌드하는 방법이 중요합니다. 설명하신 것과 같은 플러그인 아키텍처에 대해서는 잘 모르지만 현재 선택한 거의 모든 플랫폼에서 가능할 것이라고 생각합니다.

python 개발을 계획하고 있다면 언제든지 를 사용할 수 있습니다.pyrex 를 사용하여 느린 부분을 최적화합니다.

제한된 Mono 경험을 통해 꽤 많이 팔렸다고 말할 수 있습니다.최신 .Net 기술을 사용하여 사양에 맞추기위한 적극적인 개발과 지속적인 노력이 있다는 사실은 고무적입니다.여러 플랫폼에서 기존 .Net 기술을 사용할 수 있다는 것은 매우 유용합니다.Python + PyGTK에서 몇 가지 기본 작업을 수행하려고 할 때 성능과 비슷한 문제가있었습니다. 아마도 올바르게 수행되도록 만들 수 있지만 90 %의 시간 동안 성능에 대해 걱정할 필요가없는 것이 좋습니다.

데스크톱 애플리케이션의 경우 해석 된 언어로 작성하고 wxWidgets와 같은 교차 플랫폼 UI 툴킷을 사용하면 플랫폼 독립성을 확보 할 수 있습니다 (그렇지 않은 다른 모듈을 사용하지 않도록주의해야합니다). 크로스 플랫폼, os.path와 같은 작업을 수행하는 대신 Python의 config_path = "/home/$USER" 모듈과 같은 것을 사용)

하지만 좋은 크로스 플랫폼 애플리케이션을 만들려면 각 플랫폼에서 몇 가지 작업을 다르게해야합니다.

예를 들어 OS X는 아마도 가장 다를 것입니다. 기본 설정은 일반적으로 ~ / Library / Prefernces /에 .plists로 저장되고 UI는 일반적으로 부동 창을 기반으로하며 단일 메뉴 막대가 맨 위에 도킹되어 있습니다. 화면.

이것이 모듈성이 작용하는 곳이라고 생각합니다. 위의 환경 설정 예제를 사용하면 OS 별 버전이있는 클래스 UserConfig를 가질 수 있습니다. Windows One은 적절한 Application Data 폴더 또는 레지스트리에 구성 데이터를 저장합니다. Mac OS는 ~/Library/Preferences/에서 .plist 파일을 사용하고 unix'y는 ~ / .dotfiles를 사용합니다.

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