在角镖中处理多个模块

时间:2014-07-21 02:54:01

标签: dart angular-dart

我为一家拥有3家不同公司的公司创建了一个网站。因此,域将有3个子域,如下所示:

  • www.example.com
  • firm1.example.com< - > www.example.com/firm1
  • firm2.example.com< - > www.example.com/firm2
  • firm3.example.com< - > www.example.com/firm3

公司不会在彼此之间共享代码。每个公司都有自己的数据库托管在同一台服务器上。每家公司都有一个指向主页的链接,即www.example.com。

我决定为每个公司创建一个模块,并从main.dart调用一个主模块。现在我如何以及何时调用第二个模块。在这样做时,我并不了解将模块放在控制器上的必要性。

  • 在这种情况下,是否可以模块化应用程序?
  • 拥有多个模块有什么好处?
  • 我们应该为每个模块使用一个路由器吗?我之所以这样说是因为将来如果我打算删除firm3并将其放在一个不再坚持主应用程序的单独域中,那么我将不得不从路由器中删除相应的路由,这对于一个模块化的应用程序。

3 个答案:

答案 0 :(得分:1)

模块与控制器不同。模块包含应用程序的所有部分。这包括控制器,服务,指令等。控制器只属于一个模块。模块不仅可以保存应用程序的一部分,还可以让每个部分相互查找。模块是依赖注入的基础。

因此,您在一家公司中拥有3家不同的公司。这些公司是否属于同一个域?它们是单独的网站还是单个网站?如果每个公司都有自己的域名或单独的网站,您将别无选择,只能将它们分成单独的角度应用程序。单页应用程序不能跨越多个域。

如果您为每个模块定义路由器,那么您正在寻找具有单独应用程序的路由器。您可以定义3个单独的模块并将它们导入主应用程序,但主应用程序将定义路由器。我不完全确定每个应用程序在单独的模块中可以有多个路由器。我无法找到任何相关的例子。理论上可能,但似乎很难维持。

但只有我们所知道的,很难再提出任何建议,因为这三家公司的互动方式并不为人所知。他们会分享代码吗?它们是否必须全部在单页应用程序中,或者您是否可以将它们拆分为单独的html页面,每个页面都有自己的角度应用程序?

更新:

所以我会用自己的路由器将每个公司分成他们自己的应用程序。我会让它们成为一个单独的单页应用程序。您可以选择是否共享代码。我的应用程序由多个单页面应用程序组成,我在它们之间共享代码。我是这样做的:

var RegistrationApp = angular.module("RegistrationApp", ["ngResource",'ui.bootstrap',"ngRoute", "ngAnimate"]);
var App = RegistrationApp;

然后在我定义的任何其他类型的东西中,我使用全局变量App,如下所示:

App.factory("RegistrationService", function($http) {

通过在我构建的所有应用程序中定义全局变量App,我可以简单地通过将这些组件包含在客户端正在加载的应用程序中来共享代码,并将该代码引入该应用程序&#39 ; s模块。

登录将是服务器端所做的事情,它将在您的浏览器上删除cookie,因此每个应用程序在技术上都可以使用该身份验证,前提是cooke映射到域。如果您有每个公司的单独URL(例如firm1.company.com,firm2.company.com,firm3.company.com),您必须小心如何定义该cookie,因为默认情况下,如果您登录www.company。 com,firm1,firm2,firm3不会看到cookie,因为那些是不同的域名。您必须为.company.com设置cookie,以便子域可以看到它。但是,如果你这样做,登录不会需要公司/应用程序之间的沟通。

答案 1 :(得分:1)

模块用于组合注射器的一组类型注册。通常,即使只有一家公司,您也有几个模块。

看一下这个例子:https://github.com/akserg/angular.dart.ui/blob/master/lib/carousel/carousel.dart 这是一个Carousel组件,它由两个组件组成,这两个组件总是一起使用,并且取决于TransitionModule CarouselModule允许您仅使用install(new CarouselModule);

注册所有类型

模块与程序逻辑无关,它更适用于同时注册一组Angular组件,指令,服务.......

控制器完全与程序逻辑有关。

这三家公司有何不同? 您可以创建三个不同的应用程序,并在包中的这些应用程序之间移动您想要重用的代码,并从这三个应用程序中导入此包。

更新

如果3个应用程序没有共享代码,那么将它们放在一个应用程序中是没有意义的。 您可以使用正在使用的Web服务器的虚拟目录功能。

你得到的是在没有任何共同点的应用程序之间的依赖关系(除了从同一服务器提供服务)。

您必须应对代码大小。每个用户加载3个应用程序的代码,即使他想要也只能使用1/3。 在Dart中,按需加载代码并不是那么容易(至少现在还没有)。

总结:您的方法没有优势和严重缺点。改为创建三个独立的应用程序。

答案 2 :(得分:0)

我认为最简单的方法是在网络服务器级别管理它。

如果我理解得很好,你有4个独立的网站:

  • www.example.com
  • firm1.example.com
  • firm2.example.com
  • firm3.example.com

我正在使用Apache,这意味着不同的4个虚拟主机。然后,您只需要使用 .htaccess www.example.com/firmN 重定向到 firmN.example.com >

Alseo,从安全角度来说,这种方法允许将每个公司的数据放在一个单独的容器中,如果一旦你在一个站点发生攻击,你就不希望攻击者拥有访问所有其他网站。