创建库的最佳做法是什么?
我已经开发了近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
等......
例如,在JS库中,我有WebGL,Canvas,JQuery,Regular JS类(如果我们称之为那些)。
你可以看到它有点混乱,所以我试图了解其他人在做什么,所以我列出了一些快速问题:
如何处理:
在我研究的过程中,我想到了谷歌,我问自己,他们如何处理谷歌地图库,他们必须拥有一个包含一系列实用功能的通用谷歌库,但也有谷歌地图的文件,他们有一个后端可能是PHP和一个JS前端,那么它们是如何管理的呢?
感谢您的帮助:D
PS。我使用Git进行版本控制工作
答案 0 :(得分:8)
我写这篇文章是因为你想知道别人做了什么。这就是我的工作。我不会声称这是“最佳做法”。
1)当岁月流逝时,我意识到我通过项目记住了我的图书馆。因为项目是实际的挑战,而不是图书馆。
2)我们不再用单一语言编写程序。趋势是云服务器和应用程序必须以多种语言处理多个平台。
3)我看到,每次构建应用程序时,如果它变得更好,平台代码就会开始反映编码语言和框架的独立性(尽可能多),功能相似。
4)回顾项目时,它应该准备好重新工作,或者任何编译都是可能的,而无需重新定义目录结构等...所以如果你使用特定于平台的代码,你必须根据平台进行编码要求,例如强制将android代码存储在另一个目录结构中然后eclipse的几乎是荒谬的。
所以我该怎么做:
主要入口点始终为project
。
在那之下,我分成了平台。
在此之下,我分为平台工具和框架。
即:
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
对于每个子部分,子分类将反映实施,ide和平台依赖性。所以没有great cure that fits all
存在......
现在终于有了一个目录:项目,在它下面我有多年的目录,每年我都有我当年制作的项目......
我希望这会有所帮助。
答案 1 :(得分:2)
在项目结构方面,我的建议是:
1)与你的结构保持一致比你使用的确切结构更重要
2)不要重新发明轮子 - 使用现有框架布局的结构是有意义的
至于您的具体问题:
1)不同的语言
我假设你的意思是人类语言,因为我们在这里讨论的是javascript。我认为国际化应该与代码的结构分开。有许多现有的库可以处理它,并在这个问题中详细讨论了它:https://stackoverflow.com/questions/9640630/javascript-i18n-internationalization-frameworks-libraries-for-client-side-use
2)不同的平台
我喜欢垂直打包代码,而不是水平打包。换句话说,我认为代码应该按域而不是技术层进行打包。在Domain Driven Development一书中有一个很好的解释。
3)不同的项目
我认为这通常会由于代码位于不同的源树中而隐式处理。尽管如此,拥有根命名空间可能解决了这个问题并且是一种很好的做法,因为它具有最小的全局覆盖范围。
4)外部库
我会看一下CommonJS - 它是加载JavaScript库的惯例,并且正在成为一种无处不在的标准。 http://www.commonjs.org/