`
agevs
  • 浏览: 70566 次
  • 来自: 北京
博客专栏
924aba1e-229a-352e-b6d4-f15f3159a438
各种Web前端技巧经验分享...
浏览量:0
文章分类
社区版块
存档分类
最新评论

前端开发:模块化 — 高效重构

阅读更多

说起模块化,也许我们首先想到的是编程中的模块设计,以功能块为单位进行程序设计,最后通过模块的选择和组合构成最终产品。把这种思 想运用到页面构建中,也已经不是什么新鲜事。相信很大一部分页面构建工程师都经历了这样几个阶段:第一阶段是在一个css文件中把多个页面按自己的习惯顺 序从上往下编写样式,基本不考虑有无公用样式,以完成设计呈现为首要目的;第二阶段是提取不同页面中的通用样式,如公用颜色、图标、按钮等,实现一些基本 元素的复用;第三阶段是提取公用功能模块,如导航、版权信息等,实现部分公用模块的复用。前端框架分享

  刚才描述的第三阶段的方法已经包含了模块化思想,不少团队也都有一套成熟的模块化开发方案。而我第一次听说模块化构建方式,是三年前在一家韩国 互联网企业工作时,某些产品中要求使用一种称为UIO方式,模块化通用的功能模块或组件,以达到最大程度的模块独立性与复用性,当时团队中很多同事和我一 样,认为这种工作方式约束了编码的自由性,过多的结构约束反而降低了工作效率,加之产品之间也存在不统一,最后并没有运用到整个团队。

  那么,如果我们运用模块化构建的方式,优势在哪呢?也许在开始尝试之处,需要一个适应的过程,可能会使团队成员出现之前类似我当时的想法,但当大家都适应并熟练这种工作方式之后,必定能极大地提高页面构建的效率。

  假设有这样一个场景,团队接到一个页面非常多、工作量非常大的紧急项目,第一个团队这么做:组长给每人分配几个页面,大家分头做完各自的页面, 统一交付,对于不同页面之间结构呈现相似的模块,细心点的团队可能会约定让某个人写好,再复制给每个需要用到的人,不太在意的,则让每个人把各自页面上的 所有内容都写一遍,已完成任务为重。第二个团队事先根据所有的页面划分公用或重复模块,再按模块唯一性分配给每个人,有人负责搭建框架,有人制作模块,最 后合并框架和模块,再按开发的工作计划,顺序交付页面。对比的结果是,由于第二个团队是多人共同制作一个页面,他们能以最快的速度产出开发需要的第一页 面,而且越到后期越能发现页面中可重用的模块越多,最后整个工作时间也许能比第一个团队缩减一半。模块的复用不单是对本团队的工作时间有很大影响,同样, 对于下游的开发者来说,意味着他们也不需要为相同的模块重套代码或重新开发。此外,代码的冗余量、以及产品升级时两种工作方式的代码扩展性也体现出很大的 差距。再者,如果你的团队将要运用BIGPIPE或者LESS的开发方式,CSS的模块化是最好的配合手段,或者说是必须的。

  当决定使用模块化构建的工作方式时,遵循某些原则对模块化的顺利推进有很大的帮助。

  曾经有一篇关于面向对象CSS的文章中指出,面向对象的CSS有两个主要原则:separate the structure from the skin,separate the container from the content。 第一个原则体现在模块化思想可以理解为,模块的设计制作和布局框架本身相分离,意味着你的模块不能只为某个布局而编写样式,像微博这类存在换肤功能的产品 更是如此,如果模块在不同的皮肤样式下需要另写很多样式甚至是修改结构的时候,这个模块的制作就是失败的;第二个原则说的布局与内容的分离,布局中某个位 置不必只能放置某种内容,反过来可以理解为模块的灵活性和复用性。

  其次遵守团队协作开发规范原则。这个规范可以包含文件目录结构、文件和样式命名规范、图片sprite规范、模块划分和调用规范等,例如我们对文件目录深度的规定、公用样式使用规定、模块的样式名唯一性规定、模块文件名和样式名必须一致的规定等等,确保所有人产出的模块是统一、规范的。前端框架分享

  按结构呈现形式划分模块的原则。这一点和模块化编程有较大的区别,通常在编程开发时是以模块的功能来划分 的,而在页面构建上,有时候不同功能的模块呈现的样式是一样的,为达到模块样式最大程度的复用,就不能按功能来划分模块,简单来说,哪些模块外观结构一 样,我们就可以把它们归为一个模块,以微博右侧模块举例,“可能感兴趣的人”和“推荐应用”模块的外观是一样,都是左侧一个图片、右侧文字和功能按钮,那 它们就是同一个样式模块。

  模块稳固性原则。我经常问新人一个问题,“你觉得怎样体现你写的代码质量高,比一般人好?”,大多数人会回 答遵守语义化,减小不必要的嵌套,代码尽量精简。语义化和代码精简固然是评价质量的一个重要方面,但是我认为,代码是否考虑到数据遍历的合理性,是否考虑 到dom节点的可操作性,是否考虑到因扩展造成的抗破坏行,更能体现一个页面构建工程师的水平。

  模块自适应性原则。指的是任何一个模块,都尽可能实现宽度和高度的自适应,非特殊情况不要设置模块的宽高, 采取这种原则制作出的模块具有很好的即插即用功能,是高效完成页面拼合工作的重要前提。试想如果每个模块都定义了宽度,那么在不同的布局上你就必须重新定 义每个模块的宽高或边距等属性来适应当前布局。

  Margin-bottom原则。一般情况下,网页的布局都是从上到下的流式布局(多栏结构也可以看成各栏 内的流式布局),所以,我们可以为每个模块统一预设margin-bottom,达到统一间距的目的,避免出现有些模块设置上边距、有些模块设置下边距的 情况发生。(左右间距通常是由布局框架的样式设置)

  在制订好团队的合作规范、遵守的原则后,并不代表你就可以完全按你的思路启动工作,团队配合是多向的,除了团队内部,其他团队的支持也是不可或缺的,所以还需要以下两个前置条件:

  设计必须严格遵循栅格化。模块是独立的,但最终模块还是嵌套在布局中,因为我们的最终产出物是完整的静态页 面,如何将分离的模块在最短的时间内,拼成一个符合设计师意图和产品要求的页面?栅格化是快捷的保障,在一个严格按照栅格化设计的布局框架中,工程师只需 要设置好布局框架样式和分栏的内外间距,后续的工作只需要把该页面所使用的模块嵌套进来,再调用对应模块的样式,由于模块的自适应性,在所有模块准备充分 的情况下,通常一个页面的拼合只需要几分钟的时间。前端框架分享

  产品、设计与交互的规范统一。通常在项目的某个阶段,产品和设计在模块上的统一是比较容易的,但如果在同一 个项目的不同阶段,尤其是在不同项目之间或不同产品之间要达到规范统一,就不是一件简单的事情。当规范统一性出现问题时,导致模块化只停留在某个项目阶 段,每次添加新功能、增加新内容都需要增加全新的模块样式,移植性和复用性大打折扣,无法发挥应有的效果。当然,产品是持续改变和创新的,我们不能要求一 个产品永远按照某个规范来进行设计,但我们还是应该共同努力寻求阶段性共赢的解决方案。在微博,经过各方长时间的努力,特别是交互设计对产品功能组件的统 一,构建的WDL规范库对我们的模块化提供了很大帮助。

  根据实际情况来看,要达到所有满足的条件往往不是一帆风顺的,特别是第二个条件的达成。但是退一步来说,即使不能使模块化在每个项目、每个产品中长期稳定的发挥它的最大能量,至少可以在每一次项目任务中获得模块化给团队带来的效率提升。

  如果经过大家的努力,在所有条件都满足,而且模块化工作方式能在团队顺利开展的情况下,我们依然可能会遇到各式各样的问题,一个无法避免的问题 就是 —— 产品功能升级引起的模块变化,这时候是修改原有的模块还是另起一个新的模块?二是模块的划分程度,有些时候从模块的呈现和功能划分都比较模糊,有些时候对 某些内容是否划为公用样式还是模块、还是页面独有内容都是见仁见智的;三是模块的分类,采取何种方式分类便于查找?类似这些问题还有很多,在不同的项目和 形势下,需要具体问题具体分析,发挥团队的智慧,寻找最合理的应对方案。前端框架分享

  虽然在实施过程中可能会遇到各种问题和团队配合之间的阻力,但是当你逐渐适应这种模块化团队构建的工作方式时,你会爱上它!而当你的团队高效地完成每个工作的时候,人们也会爱上你的团队!

0
0
分享到:
评论

相关推荐

    网站设计分析:模块化--高效重构

    ### 知识点五:模块化与前端技术栈的结合 #### 与BIGPIPE或LESS的结合 - **BIGPIPE**:模块化设计可以更好地支持页面的异步加载,提高用户体验。 - **LESS**:模块化CSS有助于LESS变量和混合器的有效利用,提高样式...

    尚硅谷JavaWeb项目改造:SpringBoot+MybatisPlus重构微头条

    1. **模块化**:将原先的JavaWeb项目拆分成更小、更独立的服务,每个服务负责特定的功能,提高代码可读性和可维护性。 2. **依赖注入**:利用Spring Boot的依赖注入特性,减少硬编码,提高代码灵活性。 3. **数据库...

    前端布局丛书-CSS重构:样式表性能调优

    《前端布局丛书-CSS重构:样式表性能调优》是一本深入探讨CSS优化与重构的专业书籍,旨在帮助开发者创建高效、响应式且易于维护的网页布局。在前端开发中,CSS是实现页面视觉呈现和用户体验的关键,而有效的CSS重构...

    行业管理软件模块化框架源码

    行业管理软件模块化框架源码是一种常见的软件开发实践,它主要目标是提高代码的复用性、可维护性和可扩展性。在这个框架中,不同功能的模块被设计为相互独立,可以灵活组合和配置,以适应不同行业的特定需求。下面...

    makespace-re:创客空间前端重构

    JavaScript是构建现代Web应用的核心语言,尤其在前端开发中起着至关重要的作用。重构时,开发者可能会考虑采用新的JavaScript框架或库,如React、Vue或Angular,以提高代码的模块化和可维护性。同时,他们也可能关注...

    CSS重构:样式表性能调优_前端学习_

    在前端开发领域,CSS重构是提升网页加载速度和性能的关键环节。这门技术涉及对现有的CSS代码进行重新组织和优化,以实现更高效、可维护的样式表。"CSS重构:样式表性能调优"这一主题,对于前端开发者,尤其是初学者...

    Web前端开发现状.pdf

    随着前端技术的复杂性增加,掌握模块化、组件化开发,理解前端架构设计,以及具备良好的代码调试和测试能力变得越来越重要。 总的来说,Web前端开发正处于快速发展阶段,新的技术和标准不断涌现,前端工程师的角色...

    编写高质量代码--Web前端开发修炼之道

    这可能包括模块化设计,如使用ES6模块或CommonJS,以及遵循一定的命名约定和文件组织原则。 2. **HTML优化**:高效的HTML结构可以提高页面加载速度。文档可能会讲解如何避免嵌套过多的元素,正确使用语义化标签,...

    web前端开发初学者的学习路线推荐.docx

    Web前端开发是一个不断演变的领域,对于初学者来说,建立一个系统的学习路线至关重要。以下是一个推荐的web前端开发初学者的学习路径,旨在帮助你逐步掌握这个领域的核心技能。 第一阶段:前端页面重构 在这个阶段...

    前端开发工程师专用简历模板

    【前端开发工程师简历模板】 在前端开发领域,一份详尽且专业的简历是成功应聘的关键。以下是一份前端开发工程师的简历模板,展示了重要的技能、经验和项目案例,旨在帮助您了解如何构建自己的简历。 **个人简介**...

    CSS 模块化 实现方法

    模块化是现代前端开发中的一项重要技术,它旨在提升代码的复用性,降低维护成本,提高工作效率,并确保代码的可维护性和可扩展性。在CSS领域,模块化有助于解决样式混乱、代码冗余以及协同开发中的沟通难题。 **...

    前端早读课历史快捷链接记录

    10. 前端架构与工程化:包括“前端脚手架”、“组件化设计思维”等,反映了前端开发不仅关注具体的技术实现,更重视代码的组织、模块化、组件化以及整个开发流程的工程化。 11. 前端性能优化:文中多次提及前端性能...

    21CN前端开发团队之发展史.pdf

    他们将展现层和交互逻辑交由前端负责,后台专注于提供稳定的服务,同时引入Bootstrap框架,通过AMD(Asynchronous Module Definition)规范实现模块化开发,并建立完善的前端开发脚手架,为后续业务扩展打下坚实基础...

    重构:改善既有代码的设计 (绝对能看用超星)

    《重构:改善既有代码的设计》是一本在软件开发领域具有深远影响的经典著作,作者是马丁·福勒(Martin Fowler)。这本书主要关注的是如何通过一系列微小的改进步骤,即重构,来提升现有代码的质量和可维护性。在Web...

    前端开发Vue3学习资料

    - **Composition API**:Vue 3 引入了 Composition API,这是一种新的 API 设计模式,使得状态管理和逻辑复用更加灵活和模块化。 - **Teleport 和 Suspense API**:Vue 3 添加了 Teleport 和 Suspense API,这些 ...

    基于java数据实时推荐系统 前端:Vue + TypeScript + ElementUI,后端 Spring + Spark

    这是一个基于Java的数据实时推荐系统,该系统...总的来说,这个系统利用了现代Web开发的最佳实践,结合强大的后端处理能力,实现了高效的数据实时推荐,为电子商务或其他需要个性化推荐的场景提供了强大的技术支持。

    一名合格的前端工程师工作职能

    在日常工作中,前端工程师扮演着至关重要的角色,他们不仅要负责系统的PC端和移动端页面的前端设计和开发,而且需要为前端开发提供专业且高效的解决方案。 在实际操作层面,前端工程师需要: 1. 开发并优化PC和...

    webui2重构规范

    以上规范旨在建立一个高效、有序的前端开发环境,通过遵循这些原则,开发者可以更有效地进行协作,提高代码质量,并确保项目的长期可维护性。在实际应用中,团队应根据自身需求和项目特点灵活调整和扩展这些规范。

    JavaScript开发-面向大型应用的微前端解决方案

    总的来说,微前端技术是应对复杂前端项目的利器,它结合了模块化开发、组件化思想以及现代前端框架的优势,使得大型应用的构建和维护变得更为高效和灵活。而像Icestark这样的框架则为开发者提供了实践微前端理念的...

Global site tag (gtag.js) - Google Analytics