Angular 模块化的角度体系结构最大限度地提高了代码重用,但仍然提供了足够的灵活性

Angular 模块化的角度体系结构最大限度地提高了代码重用,但仍然提供了足够的灵活性,angular,asp.net-core,modularity,Angular,Asp.net Core,Modularity,作为一家开发公司,不同的项目需要(几乎)相同的代码是很常见的。模块化系统的需求越来越成为一种需求,因此我最大限度地提高了前端和后端的代码重用 重要的是,我不想削减限制,这意味着客户几乎总是能够获得他想要的功能。如果该特性被证明可用于其他业务案例,我会将其包含在一个“主”模块中,否则我们会(扩展/覆盖现有模块并)创建一个单独的模块 后端 现在在后端,我已经解决了这个问题,也许值得用一个例子来解释 假设您有一个核心模块、一个电子商务模块和一个市场模块 所有模块都需要一个门户/后台/管理面板 电子商

作为一家开发公司,不同的项目需要(几乎)相同的代码是很常见的。模块化系统的需求越来越成为一种需求,因此我最大限度地提高了前端和后端的代码重用

重要的是,我不想削减限制,这意味着客户几乎总是能够获得他想要的功能。如果该特性被证明可用于其他业务案例,我会将其包含在一个“主”模块中,否则我们会(扩展/覆盖现有模块并)创建一个单独的模块

后端 现在在后端,我已经解决了这个问题,也许值得用一个例子来解释

假设您有一个核心模块、一个电子商务模块和一个市场模块

  • 所有模块都需要一个门户/后台/管理面板
  • 电子商务模块需要有一个专门的webshop web项目
  • marketplace模块需要有一个专用的marketplace web项目
我在C#中解决这个问题的方法如下:

因此,在上图中,您可以看到模块中的控制器可以通过覆盖它来扩展。所有域和应用程序逻辑都以相同的方式(未显示):大多数东西都是虚拟化的,因此如果需要,我可以在一个业务项目中覆盖它。因此,如果一个业务项目使用标准的“电子商务”模块不能满足要求,它可以扩展或创建额外的逻辑/控制器来实现这些功能

因此,对于门户应用程序,我认为没有问题。我可以根据设置轻松地延迟加载(角度)模块。对于所有业务案例,这可以是一个单一的web应用程序,不需要任何特别的注意。因此,尽管它显示了两个独立的门户web应用程序,但它们最终将使用相同的前端代码。当然,它们将被拆分到不同的服务器上

前端 但具体到网店市场模块/项目:

  • 它们可能都有完全不同的设计
  • 这两种方法都可以被不同的企业使用,每种方法都有其独特的结账/市场流程/设计。
    • 但是,加载产品、显示市场项目、注册/登录和支付在功能上基本相同
  • 在核心模块中创建并在门户中使用的一些组件也应该能够在webshop/marketplace应用程序中使用
那么..如何在angular(7)中正确地完成这项工作呢?到目前为止,我所知道的一切都得到了解决

商业项目之间的相似性
  • 因为所有后端控制器都有固定的路由,所以http调用在所有项目中都是相等的。一个项目可以扩展后端控制器并以不同的方式运行,但这不会改变路由。如果一个项目需要远离功能,它很可能还需要一个单独的角度模块/组件

  • 有些企业可能希望显示略有不同的组件(在门户中)。这可以通过使用特定于项目的
    style.less
    文件(主布局颜色很可能需要)或“覆盖/替换”组件来实现,如所示

  • 尽管网店和市场是完全不同的业务,但它们确实具有类似的功能,如:登录、发票付款页面、显示发票详细信息、上传照片、日期时间选择器和国家/语言选择器+本地化

  • 有时需要额外的字段,这可以在类似CRM的方法中实现,方法是在数据库中配置这些字段,并在单独的http调用中将它们加载到视图中

  • 业务项目之间的差异 我在几个“阶段”中看到了差异,从小变化到大变化:

  • 小的设计更改:这只需要对总体布局进行小的更改,并且可以通过更改公司特定的样式来实现。如果这还不够,或者需要在main style.less文件中编写大量代码,那么我们希望替换component.less文件。示例:登录页面
  • 大的设计更改:组件的功能将是相同的,但组件需要完全不同的.html。示例:帐户配置文件页面
  • 功能更改:html和less文件实际上可以是相等的,但组件功能/行为需要进行小到大的更改。示例:可能需要自动保存数据,也可能需要一个确认按钮
  • 完成不同的组件:已解决,请参见2。有相似之处
  • 剩余问题
  • 如何为特定组件加载不同的样式?类似于为手机、平板电脑和台式机提供多个设计文件。但是基于一个环境变量
  • 如何为相同的组件功能创建一个完全不同的.html文件
  • 让每个公司的路由配置轻松切换到自定义组件,而不是一个模块中的默认组件,这可能很有用
  • 我将如何组织我的文件夹?ASP.NET的核心方法是在web项目中包含angular项目,但是当我想在所有不同的web项目中共享组件时,我并不知道这是如何工作的。我想我更喜欢将angular项目放在web项目中,因为它们彼此集成得非常好,也可以避免在不单独托管它们时基于令牌的身份验证开销
  • 考虑 我能想到的一种方法是创建您自己的专用npm包,创建“核心”模块、“电子商务”模块和