共享服务是在 angular 2 中实施 DRY 的正确方法吗?
Is shared services right way to implement DRY in angular 2?
我正在寻找在 angular 2 中实现 ERP 前端。我在 codeigniter HMVC structure.From 中有我现有的实现,我已将所有 models/controllers 调用转换为 REST APIS。
旧结构在 CRM、会计、交易等模块中重用大量视图组件进行 CRUD 操作。
我怀疑是否有任何方法可以通过更多优化在 Angular 4 中实现相同的模式。
我看过共享服务,看起来很有前途。
简而言之,我正在 angular 中寻找正确的模块化结构,它以某种方式帮助我转换旧的 HMVC codeigniter 模块结构。
如果您需要更多关于新旧结构的实施。让我知道。
我强烈建议遵循 Angular.io 风格指南来构建 Angular 应用程序。这些指南通过一致应用 LIFT 原则而不是组织代码的传统方法(例如将相关组件分组到单独的文件夹(即具有模型层、服务层等))来支持简单性。这将允许您的应用程序随着时间的推移而扩展,因为它从一个只有不到十个文件的非常简单的应用程序发展到具有数百个甚至数千个文件的更全功能的复杂应用程序。
https://angular.io/guide/styleguide#application-structure-and-ngmodules
亮点:
- 在决定文件夹结构或文件位置时始终遵循 LIFT 原则。
- 遵循Folders-by-Feature原则(每个文件夹代表Application域中的一个特性,每个特性都有一个封装组件、指令、管道和服务的模块)。
- 利用功能文件夹中的桶(即 index.ts 重新导出模块、服务、模型等)。这将有助于保持模块模块化,并在以后需要时更容易将模块分离到自己发布的包中。
- 有一个核心模块,旨在由 AppModule 导入,其目的可能包括使用根注入器注册应用程序范围的服务。利用
forRoot
和 forChild
约定确保服务靠近使用它们的模块 (LIFT),同时仍然允许它们注册为应用程序范围的单例。
- 具有一个或多个共享模块,旨在由功能模块导入。其目的是公开可在整个应用程序中重复使用的组件、指令和管道。避免共享模块中的单例服务(有意的单例是可以的)。
- 注意深层嵌套的 import 语句 - 这是一种明显的代码味道,表明您可能违反了 LIFT 原则。重构您的代码以遵循第 1-5 点。
- 避免将所有模型都放在一个文件夹中,将所有服务放在另一个文件夹中,等等。这违反了 LIFT 并使查找与特定功能相关的代码变得更加困难,并且将来很难将代码分离到可重复使用的包中.
这是一个合规的示例文件夹结构:
https://angular.io/guide/styleguide#overall-structural-guidelines
我正在寻找在 angular 2 中实现 ERP 前端。我在 codeigniter HMVC structure.From 中有我现有的实现,我已将所有 models/controllers 调用转换为 REST APIS。
旧结构在 CRM、会计、交易等模块中重用大量视图组件进行 CRUD 操作。
我怀疑是否有任何方法可以通过更多优化在 Angular 4 中实现相同的模式。
我看过共享服务,看起来很有前途。 简而言之,我正在 angular 中寻找正确的模块化结构,它以某种方式帮助我转换旧的 HMVC codeigniter 模块结构。
如果您需要更多关于新旧结构的实施。让我知道。
我强烈建议遵循 Angular.io 风格指南来构建 Angular 应用程序。这些指南通过一致应用 LIFT 原则而不是组织代码的传统方法(例如将相关组件分组到单独的文件夹(即具有模型层、服务层等))来支持简单性。这将允许您的应用程序随着时间的推移而扩展,因为它从一个只有不到十个文件的非常简单的应用程序发展到具有数百个甚至数千个文件的更全功能的复杂应用程序。
https://angular.io/guide/styleguide#application-structure-and-ngmodules
亮点:
- 在决定文件夹结构或文件位置时始终遵循 LIFT 原则。
- 遵循Folders-by-Feature原则(每个文件夹代表Application域中的一个特性,每个特性都有一个封装组件、指令、管道和服务的模块)。
- 利用功能文件夹中的桶(即 index.ts 重新导出模块、服务、模型等)。这将有助于保持模块模块化,并在以后需要时更容易将模块分离到自己发布的包中。
- 有一个核心模块,旨在由 AppModule 导入,其目的可能包括使用根注入器注册应用程序范围的服务。利用
forRoot
和forChild
约定确保服务靠近使用它们的模块 (LIFT),同时仍然允许它们注册为应用程序范围的单例。 - 具有一个或多个共享模块,旨在由功能模块导入。其目的是公开可在整个应用程序中重复使用的组件、指令和管道。避免共享模块中的单例服务(有意的单例是可以的)。
- 注意深层嵌套的 import 语句 - 这是一种明显的代码味道,表明您可能违反了 LIFT 原则。重构您的代码以遵循第 1-5 点。
- 避免将所有模型都放在一个文件夹中,将所有服务放在另一个文件夹中,等等。这违反了 LIFT 并使查找与特定功能相关的代码变得更加困难,并且将来很难将代码分离到可重复使用的包中.
这是一个合规的示例文件夹结构:
https://angular.io/guide/styleguide#overall-structural-guidelines