平日

(Button和EditText的)观察者模式

昨天遇到bug,看了下Button和EditText的观察者模式,觉得非常繁琐,理解成本很高。
原来大致是这样的:
Button实现Observer接口里的update()方法:

平日_第1张图片
同时给Button和Verifier添加观察者

添加的观察者可以是自己实现Verifiable类,里面定义一些规则;也可以传一个实现了Verifiable的控件,比如EditText。这样的话注意上面蓝色的选中的代码,会把observer同时加到Button和EditText里。调用addObserver把规则加到那个控件自身的验证列表里去(是一个LinkedHashSet),然后那个控件就会在自己发生某些变化的时候(比如onTextChanged, onFocusChanged)去update:

平日_第2张图片
EditText调用Button的update

平日_第3张图片
Button的Update

这只是一部分了,你可以在控件里添加observer,也可以在业务里添加;到现在仍觉得很绕。过度设计说的就是这个吧,简单问题复杂化,逻辑过于分散,滥用interface。所谓「观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。」这种说法,我是没有体会到。

四种LaunchMode

http://www.cnblogs.com/xiaoQLu/archive/2011/09/29/2195742.html

--

数据库模型设计三范式

1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;

数据库设计一般满足第三范式就够了 。

不符合第三范式的例子:

学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字"学号";

存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

  • 存在问题:

数据冗余:有重复值;

更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况

修正:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。


reference:
http://www.jb51.net/article/19312.htm
http://www.2cto.com/database/201404/291443.html

你可能感兴趣的:(平日)