这个“关系”应该加吗?
2014-11-30 20:51
99 查看
概述
在做高校平台这块内容的时候,负责EF的封装,我们几个人在做好相应封装后,为了测试其功能,然后,又做了一个具体系统的一个架构,然后测试我们封装的东西,由于自己需要转到wf那里了,所以,这块内容需要和别人交接一下,在交接的过程中,讲解程序设计上出现了一个分歧,针对于设计上的分歧,本篇博客将围绕着两个问题来阐述这个分歧:为什么要这么设计和为什么不在BaseDal和IBaseDal之间添加一个实现关系。设计上的分歧
a、设计图b、右边的设计能实现?
从实现的角度上说能实现,因为我们就是根据右边的设计做出了一个Demo,然后,我们从面相对象的角度讲解右边的图可以实现。
抽象IBaseDAL这个公共接口,然后所有子接口都继承这个接口,那么,所有子接口就拥有了父接口中的所有声明的方法,从而达到不重复写相同代码的功能,实现代码复用的功能,这个也是抽象类的一个重要作用。
UserDAL实现IUserDAL接口,DepDAL实现IDepDAL接口,因为IUserDAL和IDepDAL继承了IBaseDAL,所以,UserDAL和DepDAL里面的具体实现中,一定会用相同方法和功能的代码,此时,我们把这些抽象到BaseDAL中,然后,UserDAL继承BaseDAL,就实现了我们右图设计的产生了,即:右边的设计从实现的角度上说可以实现。
c、为什么不用左边的设计?
为什么不用左边的设计,左边的设计一看就十分的了然了,之所以不用,是因为BaseDAL和IBaseDAL之间几乎不存在那种类型上的关系,仅仅存在的关系是,IBaseDAL中的方法,BaseDAL都实现了,这个丝毫不具有说服力,让我在设计的过程中添加这个实现关系,首先,我们要知道为什么要产生IBaseDAL,就是为了使自己接口不需要写重复性定义的方法了,然后,我们要清楚为什么要产生BaseDAL,同样的道理,是因为UserDAL和DepDAL中有公共功能的实现,所有,为了达到公用的目的才出现的,不是因为有了IBaseDAL,所以,才有了BaseDAL,没有IBaseDAL,BaseDAL仍可以存在,因为所有子类中可能有相同私有方法的存在,再来说,右边的设计对于我们面向对象的理解非常的有帮助,可以帮助我们加深对面向对象的理解。
另一方认为左边的这种方式更好,然后,从后期添加一个公共方法等方面说,这里我仍认为BaseDAL和IBaseDAL之间加了那条实现关系的线后,就不能称得上好的面向对象的设计。
总结
上面的图的两种设计方式,从实现上说都可以实现,我们双发也都认同这个,这个是非常成功的地方,但是,对于采取那种具体设计来说,那真的是仁者见仁,智者见智了,但是,我扔坚持右边的设计。
相关文章推荐
- 用安装python模块出现error: command 'gcc' failed with exit status 1 ,实际已经安装了gcc的,还是报错,然后发觉是failed不是not found,这说明这个错误个gcc没多大关系,应该是缺少某些功能模块,执行如下操作:
- 作为项目经理应该跟项目组成员保持上下级关系还是打成一片?
- 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的面向接口编程了吧。
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- rpm与dpkg yum与apt-get详解,一看这个就知道这些个关系了
- 张柏芝、谢霆锋、陈冠希近半年行踪关系图,这个图很厉害,可以作为思维导图的工具
- 友元关系与继承以及基类派生类定义构造函数时应该注意的事项
- Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)
- [转]关于GI/IR(我想理解这个应该具备一定财务知识才行)
- 我想大部分的WPF和SL开发者都应该对INotifyPropertyChanged这个接口再熟悉不过了。
- [JavaScript] JavaScript中的类型,竟然也有继承关系。好吧,这个以后得好好看
- 苹果应该尽快摘掉“乔布斯”这个标签
- int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- Win32时间类型FILETIME/SYSTEMTIME/WINDOWSTIME(FILETIME这个名字很奇怪,其实他跟FILE并没有直接关系,只是很多File的API中,都以这个为时间的类型)
- 去年的这个时候应该有很多园友在写总结吧
- 在这个浮躁的社会,很多人只是粘贴一份算法,跑一遍,就算懂了,我们应该沉下心来
- 字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零
- php采集程序,大概应该是这个思路
- 微信活动应该做到这个份的计划文档
- Merge Intervals 这个应该叫合并间隙?