2015年5月20日星期三

.NET框架面向对象分层的个人想理 - 孙凯旋

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
.NET框架面向对象分层的个人想理 - 孙凯旋  阅读原文»

总结成以下几条:

公用层

代码公用并且与第三方DLL和业务逻辑无关的 独立出来

逻辑层

1、代码公用与业务逻辑相关的,在逻辑层为作一个独立接口

2、代码逻辑独立接口化

3、代码逻辑半独立抽像化

4、功能完全独立模块化(可以独立出逻辑层)

控制层或后置类

1、业务逻辑层数据收集起来扔给VIEW

2、视图层显示逻辑控制起来(比如404页面跳转,TRY CATCH结果返回处理 ,根据不同逻辑显示哪些模块)

视图层

1、只有绑定没有逻辑

2、JS CSS分离出来

--------------------------纯属个人理解,欢迎大家吐嘈---------------------------------


本文链接:.NET框架面向对象分层的个人想理,转载请注明。

由Collections.unmodifiableList引发的重构 - 学会坚持  阅读原文»

今天阅读源码的时候,无意中看到了Collections.unmodifiableList的用法,因为以前没有这样做过,所以查询了他的API,是这样写的

public static <T> List<T> unmodifiableList(List<? extends T> list)

参数:list--这是一个不可修改视图是要返回的列表中。

返回值:在方法调用返回指定列表的不可修改视图。

1、用法探讨:

1 public class CollectionsListDemo {
2 public static void main(String[] args) {
3
4 List<String> list = new ArrayList<String>();
5 list.add("aa");
6 list.add("bb");
7
8 System.out.println("初始化前: "+ list);
9
10 //实现 unmodifiable
11 List<Character> immutablelist = Collections.unmodifiableList(list);
12
13 //修改 list
14 immutablelist.add("zz");
15 }}
16
17 结果:
18
19 初始化前:: [aa, bb]
20
21 Exception in thread "main" java.lang.UnsupportedOperationException

2、继续追踪,到底什么场景遇到呢?重构是怎么写的的?

在《重构——改善既有代码的设计》一书中,有一种重构手法叫Encapsulate Collection ,(封装集合),
定义是:让函数返回这个集合的副本,并在这个类中提供添加/移除集合的副本
为了演示该重构手法
这本书介绍的是:我们经常用集合,Collection,可能是Array,ArrayList,set,vector保存一组实例,这样的类通常也会提供针对该集合的取值与设值函数
但是集合的处理方式和其他种类略有不同,取值函数不应该返回集合本身,因为这会让用户得以修改集合的内容而集合拥有者去一无所知,这样会对用户暴露过多的对象的内部结构信息。如果一个取值函数确实要返回多个值,他应该避免用户直接操作对象内保存的集合,并隐藏对象内与用户无关的的数据结构
此外,不应该为这个集合提供一个设置函数,但是应该提供对象内集合本身添加/删除的函数,这样,集合拥有者(对象)就可以控制集合元素的添加与删除
如果做到了上边的一点,集合就很好的封装起来,这样就降低了集合拥有者和用户之间的耦合度
常用到的做法:
(1)加入为集合添加/移除元素的函数
(2)将保存的集合的字段初始化一个空的集合
3、下面对上边的内容的例子介绍:
原来我这样写的:
1 import java.util.List;
2
3 public class Student
4 {
5 private String userName ;
6
7 private List<String> courses ;
8
9
10 public Student (String userName , List<String> courses)
11 {
12 this.userName = userName;
13 this.courses = courses;
14 }
15
16 public String getUserName()
17 {
18 return userName ;
19 }
20
21 public void setUserName(String userName)
22 {
23 this.userName = userName;
24 }
25
26 public List<String> getCourses()
27 {
28 return courses ;
29 }
30
31 public void setCourses(List<String> courses)
32 {
33 this.courses = courses;
34 }
35
36
37
38 }

重构后,按照上面介绍的原则,这样重构:

1 import java.util.ArrayList;
2 import java.util.Collections;
3 import java.util.List;
4
5 public class Student
6 {
7 private String userName ;
8
9 private List<String> courses ;
10
11 public Student (String userName , List<String> courses)
12 {
13 this.userName = userName;
14 this.courses = courses;
15

阅读更多内容

没有评论:

发表评论