2013-03-27 65 views
2

我们的应用程序是一个大规模的Javascript应用程序,使用Javascript MVC框架。我们通过SVN使用跨所有站点的MVC应用程序文件夹:external,每个站点都有自己的文件。设置文件是特定于该网站的。大型共享代码库,扩展功能

我们要求系统能够为每个站点提供不同的功能。核心功能应该保持不变。我们需要扩展核心代码,同时为当前和新开发人员提供可维护的解决方案。

目前我们已经想到的选项是:

一个:嵌入核心中的要素条件语句和开/关通过一个设置文件

B打开特点:覆盖/继承现有的控制器

c:在核心内部实现一个模块化系统(插件),并配置哪些插件通过settings.json加载/启用

选项a存在难以维护的问题g术语,而且相当黑客。

选项B已经实施,但难以维持(就好像我们有一个新的功能,我们是否已被覆盖

选项C是我们最近想到了一个解决方案来编辑​​每个站点的文件(通过使用共享(插件)控制器并编辑特定于站点的设置文件)

如果任何人有任何我们已经想到的选项的经验,并且如果有人知道另一个更好的选择

+0

另外值得一提的是,我们使用OpenAjax,因此可以将共享代码与特定于站点的代码分离。我们也使用偷。js作为依赖关系经理 – Scott 2013-03-27 00:53:41

+0

根据实际任务结束使用选项b和选项c: 使用选项b覆盖我们需要的模型方法 和选项c用于表单验证(向网站添加新规则比将它们添加到核心并使用功能切换) – Scott 2013-03-27 07:39:10

回答

0

倾向于选项C.

大型应用程序很大程度上受益于遵循模块化模式。您可以保持代码松散分离,以便将来实现更好的可维护性,同时允许许多开发人员一次处理各个部分。并通过特定于站点的设置文件加载您的核心模块和插件。

我建议你上的大规模应用专题检查出阿迪·奥斯马尼的文章:

调解员,外立面的Pub/Sub pattersn工作非常出色使用模块化组件,并将其与模块加载器如RequireJS结合使用,那么您将拥有大规模应用的良好基础。我已经在工作中使用了它,并发现它是保持组织结构和易于维护的绝佳方式。

+0

谢谢,你认为有任何其他选项试图共享代码,我们可以进行特定于站点的更改吗? – Scott 2013-03-27 00:56:47

+0

@scott您还可以使用其他模式,没有一种解决方案,所以我强烈建议您检查一下您认为应用程序可以从中受益的其他模式。这里有更多的阅读:http://addyosmani.com/resources/essentialjsdesignpatterns/book/#summarytabledesignpatterns – sweetamylase 2013-03-27 01:12:43

+0

谢谢,我会看看。 – Scott 2013-03-27 01:16:49