2013-04-17 52 views
7

Thực tiễn tốt nhất để tạo thư viện là gì?Thực hành tốt nhất cho Thư viện và không gian tên

Tôi đã phát triển gần 10 năm nay và đã xây dựng thư viện của mình khi tôi làm việc.

Con đường tôi hiện đang có nó thiết lập sau mô hình này:

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(); 

Thư viện của tôi có tập tin trong css/js/php/AS3 nhưng để tránh nhầm lẫn tôi đã tách họ từng vào thư viện riêng của họ như sau: MYLIB_JS etc ...

Bên trong thư viện JS chẳng hạn, tôi có các lớp WebGL, Canvas, JQuery, Regular JS (nếu chúng tôi gọi chúng là).

Như bạn có thể thấy đó là một chút của một mớ hỗn độn, vì vậy tôi đang cố gắng để tìm hiểu những gì người khác đang làm, vì vậy tôi làm một danh sách các câu hỏi nhanh:

cách xử lý:

  • Các ngôn ngữ khác nhau?
  • Nền tảng khác nhau (là những gì được gọi là WebGL, Canvas, JQuery, v.v ..)?
  • dự án khác nhau
  • thư viện bên ngoài, và phụ thuộc

Như tôi đã nghiên cứu tôi nghĩ đến Google, và tôi tự hỏi làm thế nào họ xử lý Maps Thư viện Google của họ ví dụ, họ phải có một thư viện chung của Google với một loạt các chức năng tiện ích, nhưng cũng có các tệp chỉ dành cho Google Maps và chúng có một chương trình phụ trợ có thể là PHP và giao diện người dùng JS, vì vậy, tất cả được quản lý như thế nào?

Cảm ơn sự giúp đỡ của bạn: D

PS. Tôi sử dụng Git cho công tác kiểm soát phiên bản

Trả lời

8

Tôi viết thư này vì bạn muốn biết những gì người khác làm. Đây là những gì tôi làm. Tôi sẽ không cho rằng đó là "thực hành tốt nhất".

1) Khi năm tháng trôi qua, tôi nhận ra rằng tôi nhớ thư viện của mình thông qua các dự án. Bởi vì các dự án là những thách thức thực sự, không phải là các thư viện.

2) Chúng tôi không còn chương trình nào bằng một ngôn ngữ. Xu hướng đi đến các máy chủ và ứng dụng đám mây phải đối phó với nhiều nền tảng, bằng nhiều ngôn ngữ.

3) Tôi thấy rằng, mỗi khi tôi xây dựng một ứng dụng, nếu nó trở nên tốt hơn, các mã nền tảng bắt đầu phản ánh ngôn ngữ mã hóa và khung độc lập (nhiều nhất có thể), tương tự về chức năng.

4) Khi xem lại dự án, nó sẽ sẵn sàng để làm việc lại hoặc bất kỳ biên dịch nào cũng có thể thực hiện được mà không cần định nghĩa lại cấu trúc thư mục, v.v ... Vì vậy, nếu bạn sử dụng mã nền tảng cụ thể, bạn phải thực hiện theo yêu cầu mã hóa nền tảng, ví dụ nó gần như vô lý để buộc lưu trữ mã android trong cấu trúc thư mục khác sau đó là nhật thực.

Vì vậy, cách tôi thực hiện:

Điểm vào chính luôn là project. Theo đó tôi chia thành nền tảng. Theo đó tôi chia thành các công cụ và khung nền tảng.

tức là:

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 

Đối với mỗi tiểu mục các subcategorizations sẽ phản ánh thực hiện, ide và nền tảng dependancy. Vì vậy, không great cure that fits all tồn tại ...


Bây giờ cuối cùng tôi có một thư mục: dự án, và dưới nó Tôi có danh bạ của năm, và mỗi năm tôi có những dự án tôi đã thực hiện năm đó ...

Tôi hy vọng điều này sẽ giúp.

2

Khi nói đến cấu trúc dự án lời khuyên của tôi là:

1) Phù hợp với cấu trúc của bạn là quan trọng hơn so với cấu trúc chính xác mà bạn sử dụng

2) Đừng phát minh lại bánh xe - sử dụng một cấu trúc đặt ra bởi một khuôn khổ hiện có ý nghĩa

đối với câu hỏi cụ thể của bạn:

1) Các ngôn ngữ khác nhau

Tôi giả sử bạn có nghĩa là ngôn ngữ của con người, vì chúng ta đang nói về javascript ở đây. Tôi nghĩ rằng quốc tế nên được tách ra khỏi cấu trúc mã của bạn. Có rất nhiều các thư viện hiện có mà có thể xử lý nó và nó đã được giải quyết tại thời gian trong câu hỏi này: https://stackoverflow.com/questions/9640630/javascript-i18n-internationalization-frameworks-libraries-for-client-side-use

2) nền tảng khác nhau

Tôi thích đóng gói đang theo chiều dọc, chứ không phải theo chiều ngang. Nói cách khác, tôi nghĩ rằng mã nên được đóng gói theo tên miền chứ không phải bởi lớp kỹ thuật. Có một lời giải thích tốt về điều này trong cuốn sách Domain Driven Development.

3) Các dự án khác nhau

Tôi sẽ tưởng tượng rằng điều này thường được xử lý ngầm bởi thực tế là mã nằm trong các cây nguồn khác nhau. Tuy nhiên có một không gian tên gốc có thể giải quyết điều này và là thực hành tốt bởi vì nó có dấu chân nhỏ nhất trên toàn cầu.

4) thư viện bên ngoài

tôi sẽ xem xét CommonJS - đó là một quy ước để tải thư viện javascript và đang trở thành một tiêu chuẩn phổ biến. http://www.commonjs.org/

+0

Cảm ơn bạn đã trả lời bài hát tuyệt vời của Samaritan hehe. Tôi sẽ đọc khi tôi về nhà: D – vvMINOvv

+0

cảm ơn người đàn ông của tôi, tôi đã chấp nhận câu trả lời của @Ihsan vì nó đã hoàn chỉnh hơn. Cảm ơn vì sự giúp đỡ của bạn mặc dù: D – vvMINOvv

Các vấn đề liên quan