当前位置: 首页 > 面试题库 >

为每个模块组件重复模块名称

梁盛
2023-03-14
问题内容

著名的Angular App
Structure最佳实践推荐
博客文章概述了新推荐的angularjs项目结构,该项目结构现在是面向组件而非功能的,或者在最初的github问题中命名为“ Organized by Feature”。

博客文章建议每个模块中的每个文件应以模块名称开头,例如:

userlogin/
    userlogin.js
    userlogin.css                
    userlogin.html                
    userlogin-directive.js
    userlogin-directive_test.js
    userlogin-service.js
    userlogin-service_test.js

问题是:与在功能上命名文件相反,在模块的每个文件名内重复模块名称有什么好处和坏处?例如:

userlogin/
    userlogin.js
    userlogin.css                
    userlogin.html   
    controllers.js             
    directives.js
    services.js

我问的原因是,我来自一个Django拥有类似项目和应用程序的世界。每个应用程序通常都有它自己的models.pyviews.pyurls.pytests.py。脚本名称中没有重复的应用程序名称。

我希望我不会越过基于意见的界限,并且遵循该方法是有正当理由的。


问题答案:

有一个很好的理由,它是针对任何非平凡的代码库(特别是在涉及大型开发人员的情况下)改进非常重要的方面,即所谓的“可概述性”。

“可概述性”是代码库的组织(文件夹结构,文件命名,元对象等)提供对所实施软件的快速且信息丰富的概述的能力。

“可概述性”的重要性随着代码库和从事该项目*的开发人员团队的大小呈指数增长,原因如下(非详尽列表):

  1. 当一个代码库很大时,代码的某些部分在特定时间段内保持不变的可能性会增加(随着该“冷”时间段的持续时间的增加)。

  2. 当新成员加入团队时,您希望他们尽快成长(不要让他们在此过程中感到沮丧)。“可概述性”有助于对整个项目进行良好的高层抽象,并且通常还可以使人们对事物的工作方式有一个很好的理解(通常,它会产生一种熟悉的感觉;这就像您之前已经看过代码库一样,尽管您还没有)。

“所以,“可概述性”很重要。这就是为什么我们要拥有这种以组件为中心的漂亮结构等。但是 为什么要 在每个文件前加上组件名称呢?”

好吧,这听起来可能很有趣,但是为所有与组件相关的文件名加上前缀可以确保特定的顺序。例如,HTML部分或CSS将始终出现在控制器等之前:

...               
userlogin.html                
userlogin-controller.js
...

在没有前缀的地方,根据组件的名称,您将得到各种不同的命令。例如:

...                       ...                      ...
controller.js             controller.js            bookself.html
...                       ...                      ...
service.js         VS     service.js        VS     controller.js
...                       ...                      ...
userlogin.html            zombi.html               service.js
...                       ...                      ...

使用前缀可确保文件以特定顺序显示:控制器始终位于HTML部分,服务也位于等之后。例如:

...                             ...                         ...
userlogin.html                  zombi.html                  bookself.html
...                             ...                         ...
userlogin-controller.js    VS   zombi-controller.js    VS   bookself-controller.js
...                             ...                         ...
userlogin-service.js            zombi-service.js            bookself-service.js
...                             ...                         ...

这看似微不足道,但事实并非如此。特别是当人们习惯了。
请注意,人类的思维非常擅长识别视觉模式(例如,由文件浏览器中的文件夹和文件结构的树节点表示创建的视觉模式)。

即,控制器不驻留在 名为“ -controllers.js”的文件中
它驻留在 第一个文件中,该文件的名称比以前的文件长得多
服务(如果有)驻留在 文件名的末尾 ,等等。

搞砸了(例如,由于起始字母弄乱了订单,或者由于组件名称太长/太短而弄乱了它们的相对长度),您遇到的情况类似于必须从硬盘驱动器读取某些内容,而不仅仅是阅读它来自RAM。(没有开发人员想要去那里:)

*:实际上,这就是我们所谓的“开发团队变动”,即团队成员离开的频率(例如,从事其他工作,离开公司等)或引入新成员的频率。
通常,团队越大,通量越大。



 类似资料:
  • 我有一个原型项目,它的外观如下所示(有两个模块,和): 并且,当我使用工件id为“infra”的原型生成一个项目时,它应该生成如下结构: 不起作用的是,在父pom.xml中,我包含了以下模块: 这些模块条目不会被重命名为类似于(在生成时): 这就是我想要的。 知道怎么做吗,谢谢。 更新我在这里按要求添加元数据xml文件,但我不想修改archetype-metadata.xml文件。因为我想使用cr

  • 我试图解决这个错误:ModuleNotFoundError:没有名为“torch”的模块,我用这个命令安装了Pytorch:,但是当我导入torch时,我得到了上面的消息。

  • 尝试使用pip安装模块,但出现以下错误?有人能帮忙吗。 我的机器是OEL7

  • 我是新手,我写了5行tkinter,但它没有运行给错误 我的代码是 但在5小时前,它运行正常。

  • 更新:我在这里回答了自己的问题: 在Java 9中运行时扫描类路径/模块路径 -- [老问题----过时:] 在Java 9中,如果只给定一个模块对象,那么获取模块引用的正确方法是什么? 考虑以下两种引用的方法: 有一个方法 或ModuleFinder。of系统()。findAll()--您只能从

  • 模块组件化 在 coolie 的世界里,任何文件都可以作为模块来进行载入, 因此模块化组件非常容易实现。 如 banner 组件: banner ├── index.js ├── style.css <= style.scss ├── arrow.png └── template.html 模块组件入口是index.js,然后自主管理自己的模块,如样式、图片、模板等等。 使用模块组件: var