关注分离
2015-07-14 20:56
295 查看
正文:
Iuar Jacobson在《AOSD中文版》中写道:
“好的架构必须使每个关注点相互分离,也就是说系统中的一个部分发生了变化,不会影响其他部分。即使需要改变,也能够清晰地识别出那些部分需要改变。如果需要扩展架构,影响将会最小化,已经可以工作的每个部分都将继续工作。”
我们首先总结出Iuar jacoboson话中的三个关键点:
上述论述中的三句话:
“系统中的一个部分发生了变化,不会影响其他部分。”
“即使需要改变,也能够清晰地识别出那些部分需要改变。”
“如果需要扩展架构,将影响最小化,已经可以工作的每个部分都将继续工作。”
这篇文章中我们用amazeui中对实现按钮和小徽章样式的类命名规范作为范例,来分析amazeui是如何在类的命名中应用关注点分离(SOC)的。
下面首先介绍一下如果要在amazeui中实现按钮和小徽章分别要做哪些工作:
三个类的作用依次是将<a>标签设置为amazeui按钮样式,将按钮颜色设置为绿色,将按钮大小设置为lg码。
虽然不是必须的,但是am-btn最好在最前面。
三个类的作用依次是将<span>标签设置为amazeui小徽章样式,将小徽章颜色设置为绿色,将字号大小设置为lg码。
虽然不是必须的,但是am-badge最好在最前面。
也许大家没有用过amazeui,而且对上面代码也没有什么感触,那我就说一下我的理解:
假设我们要做一个框架(就叫Sornets框架吧=。=),只需要包含<span>标签小徽章和<a>标签按钮两个样式,那么我们可以将其分成button模块和badge模块。然后分别开发这两个模块,这两个模块可以单独拿出来使用(另一个模块的使用与否对当且模块没有任何影响),也就是说两个模块的耦合度为0。
这样,当我们需要增加Sornets框架的功能,比如要增加对图标(<i>)样式的支持,那么只需要再开发一个单独的icon模块出来就可以了;当我们需要button模块不但支持<a>标签,还要它支持input[type=submit]和input[type=reset]时,那么我们只需要单独修改button模块的代码,增加它的功能就好。
如果我们希望Sornets框架不再支持按钮样式呢?删除button模块就好了啊!
这在Sornets框架体量到达一定程度后简直会受益无穷!
那么这就完了吗?
Of Course Not!
我们知道了应当将代码分为不同的模块,那么,该遵循什么样的规则呢?
通过职责划分来分离关注点。
还是拿amazeui的CSS子系统来举例,在大的方面它以设置按钮样式和设置小徽章样式来划分模块的功能,而在模块内部,又根据修改样式的大小(size),颜色(color)分为不同的功能类。
可以利用软件系统各部分的通用性的不同进行关注点分离。
Iuar Jacobson在《AOSD中文版》中写道:
“好的架构必须使每个关注点相互分离,也就是说系统中的一个部分发生了变化,不会影响其他部分。即使需要改变,也能够清晰地识别出那些部分需要改变。如果需要扩展架构,影响将会最小化,已经可以工作的每个部分都将继续工作。”
我们首先总结出Iuar jacoboson话中的三个关键点:
上述论述中的三句话:
“系统中的一个部分发生了变化,不会影响其他部分。”
“即使需要改变,也能够清晰地识别出那些部分需要改变。”
“如果需要扩展架构,将影响最小化,已经可以工作的每个部分都将继续工作。”
这篇文章中我们用amazeui中对实现按钮和小徽章样式的类命名规范作为范例,来分析amazeui是如何在类的命名中应用关注点分离(SOC)的。
下面首先介绍一下如果要在amazeui中实现按钮和小徽章分别要做哪些工作:
/*实现按钮*/ <a class="”am-btn" href="”#”">Example</a>
三个类的作用依次是将<a>标签设置为amazeui按钮样式,将按钮颜色设置为绿色,将按钮大小设置为lg码。
虽然不是必须的,但是am-btn最好在最前面。
/*实现小徽章*/ <span class="”am-badge">Example</span>
三个类的作用依次是将<span>标签设置为amazeui小徽章样式,将小徽章颜色设置为绿色,将字号大小设置为lg码。
虽然不是必须的,但是am-badge最好在最前面。
也许大家没有用过amazeui,而且对上面代码也没有什么感触,那我就说一下我的理解:
假设我们要做一个框架(就叫Sornets框架吧=。=),只需要包含<span>标签小徽章和<a>标签按钮两个样式,那么我们可以将其分成button模块和badge模块。然后分别开发这两个模块,这两个模块可以单独拿出来使用(另一个模块的使用与否对当且模块没有任何影响),也就是说两个模块的耦合度为0。
这样,当我们需要增加Sornets框架的功能,比如要增加对图标(<i>)样式的支持,那么只需要再开发一个单独的icon模块出来就可以了;当我们需要button模块不但支持<a>标签,还要它支持input[type=submit]和input[type=reset]时,那么我们只需要单独修改button模块的代码,增加它的功能就好。
如果我们希望Sornets框架不再支持按钮样式呢?删除button模块就好了啊!
这在Sornets框架体量到达一定程度后简直会受益无穷!
那么这就完了吗?
Of Course Not!
我们知道了应当将代码分为不同的模块,那么,该遵循什么样的规则呢?
通过职责划分来分离关注点。
还是拿amazeui的CSS子系统来举例,在大的方面它以设置按钮样式和设置小徽章样式来划分模块的功能,而在模块内部,又根据修改样式的大小(size),颜色(color)分为不同的功能类。
可以利用软件系统各部分的通用性的不同进行关注点分离。
相关文章推荐
- POJ-1088
- 火狐浏览器同步问题
- POJ-3660(Cow Contest)——传递闭包
- background-origin 属性
- 单例模式
- FZU1515盒子中的气球,枚举法
- 解决PHP下json_decode返回NULL的问题。
- Openwrt增加内核模块
- 深入理解JavaScript原型链
- 面向对象编程之异常处理
- android layout parser
- OpenMeetings 3.0.6安装过程简述
- 深入理解JavaScript原型链
- grep命令小结
- C# 方法参数(默认参数)
- hdu 5280 Senior's Array(dp)
- css中单位px和em,rem的区别
- 【DP】poj1185
- ASCII码
- debug