《分析模式:可重用对象模型》学习笔记之四:企业财务分析中的观察和测量07

public DateRange gap(DateRange arg){
if (this.overlaps(arg)) return DateRange.EMPTY;
DateRange lower, higher;
if (this.compareTo(arg) < 0) {
lower = this;
higher = arg;
}
else {
lower = arg;
higher = this;
}
return new DateRange(lower.end.addDays(1), higher.start.addDays(-1));
}
public int compareTo(Object arg) {
DateRange other = (DateRange) arg;
if (!start.equals(other.start)) return start.compareTo(other.start);
return end.compareTo(other.end);
}
还有两个范围是否相邻。
class DateRange...
public boolean abuts(DateRange arg) {
return !this.overlaps(arg) && this.gap(arg).isEmpty();
}
还有一个范围是否落在另一个范围里面。
class DateRange...

public boolean partitionedBy(DateRange[] args) {
if (!isContiguous(args)) return false;
return this.equals(DateRange.combination(args));
}
public static DateRange combination(DateRange[] args) {
Arrays.sort(args);
if (!isContiguous(args)) throw new IllegalArgumentException("Unable to combine date
ranges");
return new DateRange(args[0].start, args[args.length -1].end);
}
public static boolean isContiguous(DateRange[] args) {
Arrays.sort(args);
for (int i=0; i<args.length - 1; i++) {
if (!args[i].abuts(args[i+1])) return false;
}
return true;
}


1.4 使用结果框架(Using the Resulting Framework)


这一章讲述的模式是第三章的扩展,主要讲述了几种计算测量,以及定量的测量和定性的测量如何通过Range 结合起来。本章的内容反映了一种尝试,那就是试图用医疗保健行业(Health Care)中适用的模式来解决企业金融分析的问题;同样,这些扩展也可同样反馈回原来的医疗保健行业。通过这样的扩展和反馈,作者希望更多有用的模式可以结合起来,从而可以得到更广泛的应用。


第五章讲述的是对象识别的问题,最常见的是用Name(名称)来识别对象,但任何有商业意义的属性都不适合作为对象的唯一标识,因为商业规则是不稳定的。关于这点可以参考Scott Ambler 的文章”Mapping Objects to Relational Databases”,笔者就不再详细介绍了。

对于对象相等的判断,可能会根据具体情况有所不同,例如,是判断ID 相等呢还是判断其他的属性相等,这一点是需要注意的。


第六章和第七章讲述的是Accounting(记账/帐务)模式,对这个模式Fowler 先生后来进行了改写,最新的英文原文在www.martinfowler.com,地址是http://martinfowler.com/apsupp/accounting.pdf,大家可以先去下载来看看,下次我再把笔记发过来。


对于模式的理解,如果有不同的意见,欢迎大家发邮件给我,windy.j@163.com;例如在“前言和介绍”里面有一个Mental Modal,当时我没有找到合适的译文,翻成了“精神模型或理论模型”,后来sciman 给我来信说翻译成“概念模型”比较贴切,谢谢sciman。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值