日期:2014-05-16  浏览次数:20357 次

请问在js编程中,什么是数据耦合?
“数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递”。
这是网上找的数据耦合的定义,我想问问这个定义中的两个模块指的是什么啊?
如果我想做一个创建和插入节点的功能,写一个创建节点的函数,再写一个插入节点的函数,这两个函数能算两个模块吗?
function create(id){
   var box=document.createElement("div")
   box.setAttribute("id",id)
   return box
}
function append(id){ 
   var box=create(id)
   document.body.appendchild(obj)
}
这个能说append函数中append和create数据耦合了吗?     

------解决方案--------------------
a访问b  那么 a和b 是耦合的


你那个就是 耦合的 因为 append中访问了 create

怎么解耦?

function create(id){
   var box=document.createElement("div")
   box.setAttribute("id",id)
   return box
}
function append(obj){ 
   document.body.appendchild(obj)
}

//调用
var box=create(id)
append(box);

那么现在 append 和 create 解耦了 互相不知道对方的存在
因为 调用代码(也叫 业务逻辑) 组织了他们的关系

------解决方案--------------------
模块是抽象的概念,LZ可以把你自己的两个函数看作两个模块,也可以把一组通用功能的集合看作一个模块。软件工程中的概念,本来就不好说~~

从定义上看,LZ的这两个模块确实是数据耦合了,数据耦合是不可避免的,尽量避免把参数当作函数内部的流程控制的开关变量,因为那样就是控制耦合了。

摘抄一段软工的耦合类型的介绍:
引用
耦合类型: 
    (1) 内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合 
             1. 一个模块直接访问另一个模块的内部数据; 
             2. 一个模块不通过正常入口转到另一模块内部; 
             3. 两个模块有一部分程序代码重迭(只可能出现在汇编语言中); 
             4. 一个模块有多个入口。 
  (2) 公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。 
  (3) 外部耦合: 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。 
  (4) 控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。 
  (5) 标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。 
  (6) 数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。 
  (7) 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。