【发布时间】:2020-11-17 16:28:03
【问题描述】:
我正在开发一个 Web 应用程序,它会在给定一组有限参数的情况下自动生成 Bootstrap 站点。我需要有关架构决策的帮助,因为随着时间的推移,我做出了非常幼稚的设计决策,我不想在这个项目中重复这个错误。对于我的 PoC,我采用 MVC 方法进行设计,顶层架构(见上文)包含以下内容:
-
CanvasComponent - 这是应用程序的入口点,用户可以在其中生成他们的网站并被允许下载的 UI 元素;
-
CanvasService - 该服务编排网站的创建,并依赖一组服务(NavbarService、HeroService、FooterService);
-
DomService - 该服务负责创建高级别无样式的 DOM 元素;
-
ComponentService - 这组服务(NavbarService、HeroService、FooterService)负责创建较低级别的 DOM 元素;
-
FontService - 此服务是 Google 字体库。
以上是我很快整理出来的,所以我知道它并不完美。我也有一些关于项目方向的问题,关于它的可扩展性,因为我正朝着生产化它的方向发展。这些是我的问题:
-
我向某人展示了它,他们说他们无法理解它......因为听起来我的 CanvasService、DomService 和组件服务创建了原始 HTML,所有这些都是描述 DOM 元素的模型。它似乎设计不当。我们开发服务的方式不可扩展或不可管理。如果不出意外,这是对开放/封闭原则的极端违反。它们最终将是巨大的“工厂”,不能完全覆盖 DOM 元素的所有功能。 这是我最关心的问题。如何从架构的角度解决这个问题?
-
鉴于项目的性质,我正在广泛处理原始 html。我使用多种方法来动态生成所需的 HTML。我想问一下以上是否可取。在架构上创建和管理 HTML 块的最简洁的方法是什么?我应该使用原始字符串还是创建更定制的东西?
-
为每个组件(导航栏、英雄、页脚)存储各种样式然后随机应用它们的最佳方法是什么?据我了解,风格可以分为两类——模板和主题。一个模板可以有多个主题,一个主题可以关联多个主题。一个很好的例子是网站上的“浅色/深色”颜色模式。目前在 NavbarService 中,我将一系列可能的宽度和高度存储在一个数组中。
-
除了违反开放封闭原则(未知未知)之外,我目前的架构方法是否还会出现任何问题?过去,每当我开始这样的项目时,它们很快就会变得不可持续。我失去了兴趣,因为那时我正在与代码库搏斗。我希望这个过程继续令人愉快,并在项目过程中保持我的代码干净和可管理,并应用最佳原则。
此处提供示例演示:https://stackblitz.com/edit/angular-ivy-2pga8q(每次重新加载页面时,都会出现一个新的导航栏)。
【问题讨论】:
标签: javascript angular architecture solid-principles