缘由

当我看到_Franky兄的微博的时候:

我觉得我有必要出来详细说说KMDjs到底有什么本质上的优势了,连教主_Franky貘吃馍香都不能理解他的好处,那么可想而知,在前端圈、或是全端圈、或是IT圈,能够理解KMDjs优势的码夫更加是屈指可数。

Why Namespace?

KMDjs是能方便组织Namespace,并且Class Base。针对namespace,我还专门集成可视化库至KMDjs方便查看Namespace Tree。那么Why Namespace?不用会死吗?答案是:不会。但,但是。我要开始念书了(摘自《C#基于工程化的实现与扩展》):

尴尬的现实状况:

是否有很好的命名空间规划是工程化代码与非工程化代码一个明显的区别。

尤其对于大型的组织而言,如果涉及的产品线、项目、公共平台很多,如何通过命名空间把所有的代码资源有效地组织起来,恐怕是实施项目前腰考虑的主要问题。作为一个树形体系,最好有组织级统一的分类标准,目的很明确----用的时候很容易找到。

无论如果,为了您所带领的团队现在做的工作在以后能更容易地被应用,或者仅仅为你自己的职业生涯好好“储蓄”,在动笔编写第一行程序之前,先规划好命名空间吧。

可参考的建议来自Design Guideline,示例代码如下:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

例如:Microsoft.WindowPhone.DirectX

一个大型软件企业,总体命名空间的规划如下:

Company.Application

Company.Foundation

Company.Framework

Company.Utility

Company.Training

Application:代表项目或产品

Foundation:代表公共库,类似Enterprise  Library之类的公共基础库、基于企业设备和操作系统平台的通用的图形处理引擎等,但都是纯粹的Class Library,没有UI元素。

Framework:组织通用的框架,基于Foundation之上,面向某个开发领域补充的Class Library和控件,其本身不能独立运行,但完全可以集成在具体的项目或产品中,比如通用的授权框架,完全AJAX化的前后端组建、报表和打印中间件。

Utility:企业内部各种工具,比如现场故障排查工具、Dump和日志分析工具。

Training:完全面向培训用途,是对企业自身Application、Foundation、Framework(甚至Utility)使用的Examples。

当然这是作为C#的空间调用关系,如果仅是web前端的话,应当把CLR部分去掉,如下:

 

不论您最终如果定义命名空间,其实它体现的是您意志中对代码资源的规划。

Who Namespace?

其实早在KMDjs出现之前,google开发团队早就意识到了Namespace的重要性,就弄个类似的东西。不过实现极度蹩脚。那就是老早以前,其代码被喷无数,但依然大名鼎鼎的google-closure-library。比如打开其date.js,可以看到:

provide是暴露的东西,require是依赖的东西。

写那么多不累吗?从上面其实就可以体现Class Base的重要性,但是我会另开一文详细谈下Why Class ?

微软的winjs比google进步了不少,至少意识到了namespace和class的重要性:

 

但winjs还是被kmdjs甩开十条街,因为其没有从工程化的角度考虑问题。

如果你一辈子就切个页面写个焦点图或者打算一辈子切个页面写个焦点图,请无视命名空间,继续require,继续export,继续切页面,写焦点图,继续拿着刚好能糊口的薪水,继续过着买两部iPhone6就月光的日子,庸庸碌碌得打发完一辈子宝贵的时光。

弃暗投明

再给自己一次重生的机会,转生入口:https://github.com/kmdjs/kmdjs

AMD and CMD are dead之Why Namespace?的更多相关文章

  1. AMD and CMD are dead之KMD规范

    What's KMD? 乱世出英雄,KMD名字的由来充满了杀气. Kill AMD and CMD KMD为替代混乱的AMD和CMD世界而生,一统天下.或者让这个混乱的世界更加混乱,导致: KMD A ...

  2. AMD and CMD are dead之js模块化黑魔法

    var define, require, define2, require2; typeof JSON != "object" && (JSON = {}), fu ...

  3. AMD and CMD are dead之KMDjs集成Blob一键下载全部build包

    更新 不zuo,[A/C]MD就不会死,所以kmdjs赢来来其伟大的版本0.0.6,该版本主要的更新有: 移除去了kmdjs.get(..).then的支持,只支持kmdjs.get(-,functi ...

  4. AMD and CMD are dead之KMD.js之懒

    缘由 "懒"在软件设计中,有着重大的意义.最常见的两种"懒",便是: 懒得计算 懒得加载 "懒得计算"常见于服务器端: 比如Multipla ...

  5. AMD and CMD are dead之KMD.js版本0.0.2发布

    更新 正式从UglifyJS切换至UglifyJS2 增加依赖可视化功能 压缩代码更加方便 统一风格:如main的class名也不能省略 优化了kmdjs管道 修复了无数bug 通过src开启debu ...

  6. AMD and CMD are dead之KMDjs内核之分号

    在老版本的kmdjs中,强制了分号的要求.但是总感觉不爽,因为在开发Ket - Kmdjs Extension Tools的时候,总需要导入一些开源的库,然后痛苦就来了,总是报错,一查,就是缺少分号! ...

  7. AMD and CMD are dead之KMDjs内核之依赖分析

    有人说js中有三座大三:this.原型链和scope tree,搞懂了他们就算是js成人礼.当然还有其他不同看法的js成人礼,如熟悉js的:OOP.AP.FP.DOP.AOP.当然还听说一种最牛B的j ...

  8. AMD and CMD are dead之KMDjs在JS工程化的努力

    总览 kmdjs发布了最接近最终版本的0.0.4版本https://github.com/kmdjs/kmdjs,你已经完全可以在项目中使用.我已经无法用语言形容其完美程度.借用我发的微博:   模块 ...

  9. AMD and CMD are dead之JS工程化终极解决方案KMD.js版本0.0.1发布

    回顾 经过两天晚上疯狂的开发调试,伴随着大量掉落的头发和酸痛的颈椎,KMD.js赢来了第一个稳定版本.在此期间KMD规范也有所修改和完善. 这两天主要完成的功能有: 按需加载 版本控制 模块管理 便捷 ...

随机推荐

  1. [译]AngularJS sercies - 获取后端数据

    原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...

  2. 人之初,性本动 - G2 2.1 发布

    前言 随着可视化进入深水区,G2面临了越来越多交互上的需求.动画是提升交互必不可少的一部分,也是之前G2的薄弱环节.这个版本里我们开发并替换了动画底层,统一了时间轴,使G2的动画性能大大提升,并提供了 ...

  3. SSIS Design1: 源数据提取

    数据量的大小由两个方面决定:行的宽度和数据行的数量,为了减少ETL运行的时间,可以从源数据的提取上做优化,从数据源的输入上控制数据的质量和大小,减少转换和IO. 一,减少行的宽度 1,只加载需要的数据 ...

  4. Sql Server系列:视图

    视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态生成. 1. 视图的概念 视图是从一个或者多个表中导出的, ...

  5. PinnedHeaderListView实现删除

    项目中用到四个List集合展示一个页面,并且每个页面都会有一个标题栏.找了半天资料决定用PinnedHeaderListView开源项目.最后需求又来了,需要一个删除的功能,又去网上找资料,发现没有实 ...

  6. 应用程序框架实战二十一:DDD分层架构之仓储(介绍篇)

    前面已经介绍过Entity Framework的工作单元和映射层超类型的封装,从本文开始,将逐步介绍仓储以及对查询的扩展支持. 什么是仓储 仓储表示聚合的集合. 仓储所表现出来的集合外观,仅仅是一种模 ...

  7. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  8. ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题

    首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

  9. mysql悲观锁总结和实践--转

    原文地址:http://chenzhou123520.iteye.com/blog/1860954 最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科): ...

  10. ios 静态库冲突的解决办法

    最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理 ...