2013-04-17 2 views
7

라이브러리를 만드는 가장 좋은 방법은 무엇입니까?라이브러리 및 네임 스페이스에 대한 유용한 정보

나는 거의 10 년 동안 지금까지 개발 해왔고 내가 일하면서 내 도서관을 건축 해왔다.

MYLIB.SomeUtility.utilFunc(); 
new MYLIB.SomeProject.ProjectClass(); //project specific classes 

//Sometimes I have classes that extends external libraries, 
//like JQuery, or KinteticJS objects 
new MYLIB.SomeExternalLibrary.ExternalLibraryClass(); 

내 도서관 CSS/JS/PHP/AS3에서 파일을 가지고 있지만 내가 좋아하는 자신의 별도의 라이브러리로 각각 구분 한 혼동을 피하기 위해 :

나는 현재 그 설정을하는 방법은이 패턴을 다음과 같습니다 : MYLIB_JS 등 ...

예를 들어, WebGL, Canvas, JQuery, Regular JS 클래스가 있습니다 (해당 클래스를 호출한다면).

당신은 엉망 약간, 그래서 다른 사람들이 무엇을하고 있는지 배우려고 노력하고있어, 그래서 간단한 질문 목록을 만들어 볼 수 있듯이 :

가 처리하는 방법 :

  • 다른 언어?
  • 다른 플랫폼 (WebGL, Canvas, JQuery 등)이 무엇입니까?
  • 다른 프로젝트
  • 외부 라이브러리 및 종속성
  • 내가 구글의 생각 조사되었고, 나는 그들이 예를 들어 자신의 구글 맵 라이브러리를 처리하는 방법에 자신을 질문으로

, 그들이 가진 일반 구글 라이브러리가 있어야합니다 많은 유틸리티 기능이 있지만 Google Maps 용 파일도 있으며 백엔드 (PHP 및 JS 프런트 엔드)가있을 수 있으므로 어떻게 관리 할 것인가?

감사의 모든 도움을 : D

PS합니다. 내 조언이 구조를 프로젝트에 올 때 나는 버전 관리 작업

답변

8

다른 사람들이 무엇을하는지 알고 싶기 때문에이 글을 쓰고 있습니다. 여기 내가하는 일이있다. 나는 그것이 "모범 사례"라고 주장하지 않을 것이다.

1) 몇 년이 지나면 프로젝트를 통해 내 라이브러리를 기억한다는 것을 알게되었습니다. 프로젝트가 실제 과제 였기 때문에 도서관이 아니 었습니다.

2) 더 이상 단일 언어로 된 프로그램이 아닙니다. 트렌드는 클라우드 서버로 넘어 가고 애플리케이션은 여러 언어로 여러 플랫폼에 대응해야합니다.

3) 응용 프로그램을 빌드 할 때마다 플랫폼 코드는 코딩 언어와 프레임 워크가 가능한 한 많이 독립적 인 기능적 유사성을 반영하기 시작합니다.

4) 다시 프로젝트로 돌아 가면 다시 작업 할 준비가되어야합니다. 그렇지 않으면 디렉토리 구조 등을 재정의하지 않고 컴파일이 가능해야합니다. 따라서 플랫폼 특정 코드를 사용하는 경우에는 다음을 수행해야합니다. 플랫폼 코딩 요구 사항, 예를 들어 다른 디렉토리 구조에 다음 안드로이드 코드를 저장 강제로 거의 어처구니없는 일식이야.

그래서 나는 그것을 할 방법 :

주요 진입 점은 항상 project이다. 그 밑에 나는 플랫폼으로 나눈다. 나는 플랫폼 도구와 프레임 워크로 나눈다.

즉 다음 subcategorizations 구현, IDE 및 플랫폼 의존성을 반영 각 항에 대한

TheGreatWebProject 
     |------->Server 
     |   |------>Php 
     |   |    |------>aScaryPhpFrameWork 
     |   |    |------>myPhpLibraries 
     |   |       |-----------> myPhpLib1 
     |   |       |-----------> myPhpLib2 
     |   |------>DotNet 
     |       |------>aScaryDotNetFrameWork 
     |       |------>myDotNetLibraries 
     |          |-----------> DotNetOutputs 
     |          |-----------> myDotNetLib 
     |          |-----------> myDotNetSources 
     |   
     | 
     |------->Client 
     |   |------>Html 
     |   |   
     |   |------>Css 
     |   | 
     |   |------>JavaScript 
     |   |    |-----------> aScaryJsLibrary 
     |   |    |-----------> myJsLib1 
     |   |    |-----------> myJsLib2 
     |   | 
     |   |------>ActionScript3 
     |       |-----------> aScaryAs3Library 
     |       |-----------> swfOutputs 
     |       |-----------> myClient1.fla 
     |       |-----------> myClient2.fla 
     |       |-----------> myAs3AppSrc(in package 
     |          management file structure) 
     |    
     |   
     |------->Extras 
        |------>Locales 
        |------>Documents 
        |------>Images 
        |------>Audio 
        |------>Video 
        |------>Other 

. 그래서 더 great cure that fits all 지금 ...


을 존재하지 마침내 나는 디렉토리를 가지고 프로젝트를, 그리고 그 아래에 나는 몇 년의 디렉토리가 있고, 매년 나는 그 해 만든 프로젝트를 ...이

도움이되기를 바랍니다.

2

을 위해 힘내를 사용하여 구조와 일치된다는

1) 정확한 구조보다 더 중요하다 당신은

2를 사용)

,536,913 : - 바퀴를 재발견하지 마십시오 기존의 프레임 워크에 의해 배치 구조를 사용하는 것은 의미 특정 질문에 대해서는

한다

1) 다른 언어

여기에 자바 스크립트에 대한 이야기가 있기 때문에 인간 언어를 사용한다고 가정합니다. 국제화는 코드의 구조와 분리되어야한다고 생각합니다. 거기를 처리 할 수있는 기존의 라이브러리를 많이하고 그것은이 질문에 길이에서 해결되었습니다 https://stackoverflow.com/questions/9640630/javascript-i18n-internationalization-frameworks-libraries-for-client-side-use

2) 다른 플랫폼 오히려 수평보다 수직으로 코드를 패키지로 좋아

은. 즉, 코드는 기술 계층보다는 도메인별로 패키지화되어야한다고 생각합니다. 이것에 대해 Domain Driven Development라는 책에서 잘 설명되어 있습니다.

3) 다른 프로젝트

나는이 보통 코드가 서로 다른 소스 트리에있는 사실에 의해 암시 적으로 처리 될 것이라고 생각합니다. 그럼에도 불구하고 루트 네임 스페이스를 사용하면 아마이 문제를 해결할 수있을 것이고 이것이 가장 작은 글로벌 풋 프린트를 가지고 있기 때문에 좋은 방법입니다.

4) 외부 라이브러리

내가 CommonJS 볼 것 - 그것은 유비쿼터스 표준이되고 자바 스크립트 라이브러리와 로딩을위한 대회입니다. http://www.commonjs.org/

+0

대단한 방황하는 사마리아인 hehe에게 대답 해 주셔서 감사합니다. 내가 집에 갈 때 나는 읽을 것이다 : D – vvMINOvv

+0

고맙다. 내 남자. 나는 더 완벽했기 때문에 @ 이산 대답을 받아 들였다. 고마워, 네 도움 : D 조 – vvMINOvv