如何规范.net中的js开发(1)概念篇(更新版)

本地自动化扫描:让SonarQube在提交前,为你拦截.NET/JS代码中的“坏味道” 日常开发中,代码的“坏味道”(冗余、漏洞、不规范写法)往往到提测或上线后才被发现,返工成本极高。本文分享一套**本地提交前的SonarQube自动化扫描方案**,覆盖.NET Core、.NET Framework、JS/TS/GO等主流项目,帮你提前拦截问题代码,从源头保障代码质量。 阅读详情

来自:http://www.cnblogs.com/ASPNET2008/archive/2011/01/08/1930895.html

工作这么几年,发现有些公司的开发人员虽然个人能力非常强,但是看不出团队成员之间在开发思想上的共同点,基本是一个人一个编程风格,每个人都有每个人的实现方式。或者是存在相似点,但只是冰山一角而已,团队没有统一的编程风格,时间长了,在代码维护上越来越成问题,设想当一个开发人员离职后,其它人如何接手他的工作,他写的代码其它人能在短时间内看明白吗?
   
     这里我来分享下我们公司在网站开发中对于js这块是如何规范的。说到在.net网站中编写js,如果是从事B/S架构开发的朋友再熟悉不过了,没有什么难度,只要懂点js脚本知识,再加上熟悉一到两个js框架,例如jquery,prototype,就能写出功能强大的网页交互程序。但是大家有没有考虑到如下问题呢?
  
     第一:js脚本在网页加载过程是会中断网页的渲染的,只有当这段脚本执行完成后,后面的网页才能加载,如何避免这种问题?
            有人可能会想到jquery因为它可以将需要执行的脚本在DOM加载完后才执行,这样就不会妨碍网页首屏的加载,增强了用户体验性。或者可以通过在script标签上增加defer来完成等等。所以,由于js脚本会中断网页渲染,所以尽量避免在网页元素中插入js脚本块,尽量把脚本都放在页脚后面。
       
     第二:如何给网页元素绑定事件?
            是在网页DOM元素上显示绑定吗,例如<input onclike="test()" value="test"/> ,这样做有三个缺点:
            1:不利用html展示,程序员开发的网页往往来自设计师的html,如果在拿到设计师的html后,再在对应的元素上增加各种各样的事件,下次有问题,设计师和你调试网页时就会非常别扭。
            2:如果设计师重新给你一份重新设计后的html,改动较大,此时你如何做呢,如果把事件显示的绑定在元素下,那这次你需要重新再写一次,我想这种事情大家都不想看到吧。
            3:显示在元素上绑定事件会在某种程度上影响网页的加载,特别是绑定js有错误产生时。
        
      第三:当网页上有众多元素需要绑定事件时,有没有更好更简洁的方法呢?
             上面的第二个问题,一般我们的解决方案就是采用事件后绑定,即在DOM加载完成之后,通过编程的形式给某些元素手动绑定上事件。但这种绑定事件过多时,也会显得程序的臃肿。这里我们可以通过事件冒泡的特点来实现事件的统一绑定。
             例如:有这样的一段html,有五个元素需要绑定事件,通常我需要需要根据不同的DOM绑定五次,但我们可以利用事件冒泡的特点,在五个元素的父元素上绑定一次即可。

复制代码
代码
  < div >
            用户名:
< input  id ="username"  type ="text" />
             密码:
< input  id ="password"  type ="password" />
             确认密码:
< input  id ="repassword"  type ="password" />
             地址:
< input  id ="adress"  type ="text" />
             
< input  id ="submit"  type ="button"  value ="提交" />
        
</ div >
复制代码

 

 

            改良后的代码:在五个元素共有的父元素上定义一个id:divtest,然后在五个需要绑定事件的元素上增加自定义属性mth,最后就通过程序获取这个mth来判断用户操作的是哪一个元素。    

复制代码
代码
< div  id ="divtest" >
            用户名:
< input  mth ="username"  type ="text" />
             密码:
< input  mth ="password"  type ="password" />
             确认密码:
< input  mth ="repassword"  type ="password" />
             地址:
< input  mth ="adress"  type ="text" />
             
< input  mth ="submit"  type ="button"  value ="提交" />
        
</ div >
复制代码

 

         

复制代码
代码
iniEvt:  function  () {
        
this .divtest.bind( " click " ,  this .onClickdivLogin.bindAsEventListener( this ));
    },
    onClickdivLogin: 
function  (evt) {
        
var  element  =  Event.element(evt);
        
var  method  =  element.attr( " mth " );
        
switch  (method) {
           
case   " username " :
                alert(element.html());
                
break ;
            
case   " password " :
                alert(element.html());
                
break ;
                .....

        }
    },

复制代码

 

        
      第四:一般开发人员对于asp.net的page类生命周期都比较了解,分初始化,页面加载,页面卸载等过程,我们根据程序执行的顺序很容易能定位到我们想要查找的代码,如果一个网页中包含了大量的js,那么怎样才能快速定位我们关心的代码呢,是不是也可以把js的加载分成为不同的周期呢?答案是肯定的。
       
      第五:js开发的规范并不是多余,而是可以大大提高代码的可维护性,有了规范,大家写的js风格一致后,再查找别人写的代码时就不会感到无从下手了。
  
     下面是我们公司在规范js开发所做出的努力,经过一年的应用,大家都是非常认可的,原则上针对一个页面,有一个单独的js,在它之上会有一个框架性的js,我们公司是采用jquery,有其它的框架也行。这里我来分享下单独页面js的一个模板:采用了面向对象的形式。
  
      js模板主要分为以下几个部分:
   

代码
复制代码
var  BlogInfoControl  =  BlogInfoControl;
BlogInfoControl 
=  Class.create();

Object.extend(BlogInfoControl.prototype, {
    name: 
" BlogInfoControl " ,

    
// 初始化
    init:  function  (options) {
        
this .initDOMElement();
        
this .initEvt();
        
this .initData();
        
this .pageLoad();
    },
    
// 初始化数据
    initData:  function  () {

    },
    initDOMElement: 
function  () {
        
this .commentPostForm  =  $( " #commentPostForm " );
    },
    
// 评论事件
    commentPostFormClick:  function  (evt) {
        
        
return   false ;
    },
    initEvt: 
function  () {
        
this .commentPostForm.bind( " submit " ,  this .commentPostFormClick.bindAsEventListener( this ));
    },
    disposeDOMElement: 
function  () {

    },
    disposeEvt: 
function  () {

    },

    dispose: 
function  () {
        
this .disposeEvt();
        
this .disposeDOMElement();
    },
    pageLoad: 
function  () {
    }
});

$(document).ready(
function  () {
    
var  client  =   new  BlogInfoControl();
});  
   
复制代码

 


   1:生成一个类BlogInfoControl = Class.create();这点借用了prototype的优点,熟悉它的朋友应该知道。
   2:initi,它是最关键的函数,则它来完成所有的初始化事情,例如服务端变量,网页DOM的定义,网页DOM事件的绑定等。
   3:initDOMElement,这里可以完成一些DOM元素的定义。
   4:initData,完成一些服务端数据的定义,我们经常会把网页后台计算的结果输入出前端,然后由前端来完成最后的页面渲染。
   5:initEvt,网页DOM元素的事件绑定。
   6:disposeDOMElement,网页unload时即时销毁对象。
   7:disposeEvt,unbind之前绑定的DOM事件。
   8:dispose,调用disposeDOMElement,以及disposeEvt,主要目的是为了防止内存泄露。
   9:pageLoad,类似webform类的pageload,完成网页渲染。
   10:$(document).ready(function (),通过jquery提供的函数,完成最后的js加载以及代码执行。
  
    js模板开发的优点:面向对象的写法比传统的JS对程序员比较友好,统一的JS加载模型,清晰把代码从逻辑上分开,在代码阅读以及维护上都大有提高。
   
    js模板开发的 缺点:需要一定的JS框架做支持,以及对JS知识有一定要求,如果是规模不大的网站,也大可不需要这样做。
  
    总结:JS开发规范,适用于团队人员较多,注意页面交互以及用户体验的项目。
   

     说明:文中的代码如有雷同,也只属于技术上的思想雷同,绝对不存在什么技术剽窃之类的说法,就像大家说的一样,jquery,prototype都是开源的,这点前端开发规范也什么值的剽窃的。

 


作者:姜敏
出处:http://www.cnblogs.com/aspnet2008/ 


.NET开发规范:从故障教训到工程契约的实战指南 在软件工程中,编码规范远不止格式统一,而是保障可维护性、协作效率与系统稳定性的底层契约。基于.NET平台的CLR安全机制、BCL向后兼容特性及C#多范式语言设计,规范需兼顾运行时行为约束(如internal可见性控制)、性能优化路径(如async/await替代BeginXXX)和编译器协同能力(如LINQ表达式树翻译)。实践中,命名语义化、属性无副作用、泛型参数可推导等规则,直接对应线上资损、N+1查询、内存泄漏等高频故障根因。本文结合真实事故还原与重构案例,系统阐述如何将.NET开发规范落地为可执行、可 阅读详情

相关推荐

JS.NET开发

JS.NET开发JS.NET开发JS.NET开发JS.NET开发JS.NET开发JS.NET开发JS.NET开发

一个纯.Net开发的JavaScript执行引擎

Jurassic是一个开源的托管JavaScript执行引擎,使用MS-PL授权协议。它的目标是成为.NET平台上功能最强,最为标准的JavaScript引擎。

成长的足迹 532

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

如何实现网站的登录功能

如何实现网站的登录功能http://www.bieryun.com/4623.html 我记得我刚刚学习基本PHP的时候,我正在尝试创建一个基本的网站。除了一件事,我还想到了其他一切。我想在我的网站上实现登录功能,我不知道该怎么做。有一些教程解释了创建登录系统,但它们太复杂了。我只想了解逻辑。所以今天在本文中,让我们看看登录系统如何工作以及如何为您的...

weixin_34327761的博客 4119

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1939

鸿蒙手机卸载内置应用 adb连接

**傻瓜式删除鸿蒙系统内置应用,自己亲测有效。**

JJDXBT的博客 3万+

.NET项目JS前后台调试

  在进行.net项目的时候,很多的时候对于整个系统不是很熟悉,出现了错误不能很快的定位到页面的关键,小编经过了一番的折腾,终于有点起见了,介绍一下过程。   那“保存”按钮为例, 找到你想要定位的元素,然后鼠标移动上去,右击,选择“审查元素”,就会跳到我们页面的调试界面;现在拿“保存”按钮为例; ...

Smily-王婷婷 557

手把手教你学Simulink--基于高频与高速信号处理的滤波器场景实例:毫米波雷达中匹配滤波器的多目标分辨仿真

在自动驾驶、智能交通和工业感知等领域,毫米波雷达(mmWave Radar)因其高分辨率全天候工作和抗电磁干扰能力,成为关键的感知传感器。其核心信号处理算法之一是匹配滤波器(Matched Filter),用于在强噪声背景下最大化信噪比(SNR),实现对微弱目标的检测。在调频连续波(FMCW, Frequency-Modulated Continuous Wave)雷达中,发射信号为线性调频(Chirp)信号。当信号遇到多个目标时,回波是多个延迟版本的叠加。

MHD0815的博客 134

转 如何规范.net中的js开发(1)概念篇(更新版)

工作这么几年,发现有些公司的开发人员虽然个人能力非常强,但是看不出团队成员之间在开发思想上的共同点,基本是一个人一个编程风格,每个人都有每个人的实现方式。或者是存在相似点,但只是冰山一角而已,团队没有统一的编程风格,时间长了,在代码维护上越来越成问题,设想当一个开发人员离职后,其它人如何接手他的工作,他写的代码其它人能在短时间内看明白吗? 这里我来分享下我们公司在网站...

weixin_30496751的博客 79

物联网竞赛单片机应用开发-项目汇总

物联网竞赛单片机应用开发-项目汇总

a6662580的博客 9003

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 803

如何规范.net中的js开发(2)原理篇(更新版)

上篇我大概介绍了我们公司在js开发上所做的规范,我也提到要想实现那样的功能需要一定的框架做为支持,这里所说的框架即对js的一些扩展。这里我们主要结合了两个js框架的优点: 1:prototype,主要应用了它在对Object以及Function上的扩展。本人js知识并不高深,所以对下面的扩展也仅仅能贴些代码以及加上简单的注释供大家参考。 补充...

dhka8040652的博客 106

[特殊字符] RK3588 平台上基于 Panfrost 的 Mesa 驱动编译全过程

摘要: 本文详细记录了在RK3588平台(Ubuntu 20.04 aarch64)上编译基于Panfrost的Mesa驱动的全过程。内容包括:1)系统依赖安装;2)libdrm编译;3)Mesa配置参数优化;4)LLVM 15与SPIRV工具链的安装方法;5)SPIRV-Tools版本问题的解决方案;6)最终编译命令及常见错误处理。关键点在于正确设置工具链路径(PKG_CONFIG_PATH)和版本匹配(LLVM 15对应SPIRV-LLVM-Translator v15.0.0),推荐将组件安装在/op

梁俊星的博客 941

【转载】.NET开发编程规范

https://www.cnblogs.com/Leo_wl/p/3525538.html .NET开发编程规范 第1章程序的版式 版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。 可以把程序的版式比喻为"书法"。好的"书法"可让人对程序一目了然,看得兴致勃勃。差的程序"书法"如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。 1.1版...

weixin_30346033的博客 605

FPGA信号处理系列文章——分数倍插值抽取滤波器(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA信号处理系列文章——分数倍插值抽取滤波器(一)前言信号流matlab模型频谱示意图分析总结 前言 变采样率滤波器不仅仅存在整数倍插值和整数倍抽取的情况,还会存在分数倍插值抽取的情况。那这种情况下要怎么处理呢 信号流 分数倍插值抽取滤波器的信号流是什么?信号先进行插值,再进行FIR滤波,最后进行抽取 matlab模型 %signal 定点化数据输入 coeff_val_fir = importdata('fir.coe'); si

gzy0506的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

idiomatic.js终极指南:Node.js环境中的JavaScript代码规范

GitHub 加速计划 / id / idiomatic.js 是一个专注于编写一致、地道 JavaScript 代码的项目,其核心是《Principles of Writing Consistent, Idiomatic JavaScript》,为开发者提供了全面的 JavaScript 代码规范指南。遵循这些规范能让团队协作更顺畅,代码质量更高,维护成本更低。 ## 为什么需要代码规范?

gitblog_00512的博客 414

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

.net软件开发脚本规范V1.0

软件日常开发规范文本 一、基本标准 1.代码和SQL脚本均不要出现无意义的空格和空行。 2.所有SQL脚本确保可以重复运行不出错,添加数据的脚本重复运行不会重复添加数据。 3.能用一行代码或脚本解决的不要写出两行,能用一个方法解决的不要写出两个方法,提高代码的利用率,减少冗余代码。 4.任何地方变量命名不使用无意义的a、b等名称,如人员编号uId,姓名name。 5.SQL脚本中的关键字统一使用大...

吴朋个人博客 446

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[Asp.net+JS]asp.net中调用javascript自定义函数的方法总结

asp.net调用js函数

CUbuntu 1902

作为.NET开发工程师具备的技能

.NET工程师应具备的七大技能: 一、.NET框架   开发人员应该熟悉.NET FrameWork体系结构和基本原理,熟悉CLR(公共语言运行时)和 MSIL(中间语言),熟悉.NET框架中的委托、线程、序列化、集合、垃圾回收机制、反射等内 容。   (NET框架的博大精深,美丽而深不可测。)   二、面向对象软件开发   开发人员应该熟悉面向对象软件开发(OOP)基本概念,熟悉面向对象软件开发中的类、继 承、封装、多态等概念,具备良好的面向对象软件开发思想和设计原则。   (不论是采用何种软

qq_42717786的博客 3429

Asp.Net编码规范

代码编写规范如下: (c#.net与asp.net) 1 目的    一.为了统一公司软件开发设计过程的编程规范    二.使网站开发人员能很方便的理解每个目录,变量,控件,类,方法的意义    三.为了保证编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。    四.编码规范和约定必须能明显改善代码可读性,并有助于代码管理、分类范围适用于企业所有基于.NET平台的软

风之&诉 2358

最全HTML+CSS代码规范书写总结——《项目开发篇》

欢迎阅读并使用个人总结的代码规范, 这个是我借鉴当前各大网站前端代码规范,总结出的HTML+CSS基础代码规范文述其意义就在于,分享个人学习到的东西,和日后为各位在增强团队开发协作、提高代码质量和打造开发基石的编码规范。以下内容便是项目团队开发基本约定的总述,参与开发的小伙伴们可参考遵循哟!!!规范的代码,从根本上降低了项目的开发成本,并保证代码的一致性,同时也提升了整个项目的团队开发的整体效率,这就是规范代码的好处!以上就是所要介绍的前端HTML+CSS代码规范内容,后续即将补充更新CSS的学习目标。..

小柴爱程序的博客 978

总结前端开发中的一些特殊规范

前端日子工作太忙没时间发随笔,现在来总结一些前端开发中的特殊规范(常规的规范就不赘述了),希望能让各位收益,也欢迎提出异议。 一. 文件系统 一个有条理的文件系统可以为后期的维护提供便利,起码寻找某个页面的某张图片时不用对着url地址顺藤摸瓜找半天,如果能做到不看url也能准确猜中某页面文件的所在地,那这个文件系统便是合格的。 先来看一个不合格的文件存放方式: 如上图,该目录...

dcof99817的博客 247

MemReduct 完整指南:免费快速清理 Windows 系统内存的轻量工具

MemReduct 是一个免费开源的 Windows 内存清理与实时监控工具:主界面每秒刷新一次物理内存、分页文件和系统缓存三项占用,点击"清理内存"即可调用底层 Native API 冲洗系统缓存,官方给出的单次回收比例约为 10%~50%。整个程序就是一个几 MB 的 exe,没有后台全家桶,也不带广告。 [![MemReduct 内存清理监控界面:显示物理内存、分页文件与系统缓存占用](h

gitblog_00678的博客 869
上一篇: Linq To Entity经验:如何解决按需所取
下一篇: 看看你的项目多少是可以配置的?
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值