首页 新闻 会员 周边 捐助

关于实体类的使用

0
悬赏园豆:80 [已解决问题] 解决于 2015-02-06 21:22

请问各位:

现有类Employee,属性有Id和Name。

Ceo类继承自Employee类,同时加入自己的属性。

Cto类也派生自Employee类,同时也加入自己的属性。

 

下面这个方法:DeleteEmployeeById(Employee emp);

可以对今后拓展自Employee的类使用。

 

那么假如有一些方法内使用到了Ceo或Cto中自己的属性,也就是说,需要使用非继承来的属性。

那么是否这个方法就只能对Ceo或者Cto以及继承他们的类拓展了呢?

 

若Ceo和Cto不可被继承,那么这些方法就不存在兼容性了吗?

 

需要怎么设计才合理呢?

TheBlackPearl的主页 TheBlackPearl | 初学一级 | 园豆:7
提问于:2015-02-05 21:51
< >
分享
最佳答案
0

说白了,就是一个抽象工厂的设计模式。

收获园豆:30
上帝之城 | 老鸟四级 |园豆:2549 | 2015-02-05 22:22

其实我想知道,对一族类型的最子级的函数,就是那些使用派生类属性的函数,是不是就不存在复用的可能了呢。

就好比OralceDataAccess和SqlDataAccess的自身的特性,无法在DbDataAccess中使用一样。没有好的解决办法。

TheBlackPearl | 园豆:7 (初学一级) | 2015-02-05 22:39

@DeadGardens: 特定的函数用于特定的对象,如果你非要这么做,用泛型吧,泛型可以逆变。

上帝之城 | 园豆:2549 (老鸟四级) | 2015-02-05 22:43

@DeadGardens: 不是继承来的就是应该不能复用!你要先判断功能是共性还是个性,面向对象设计有自己的原则,例如狗有的哺乳动物的基本特征这是继承,猫和狗都会叫但叫得不一样这是多态,你非让狗长个犄角,这是乱搞。写代码不是复用的越多越好,不要为了复用而复用,你写一个超级万能的大方法可能是你业务逻辑的瓶颈,很多不必要的逻辑耦合在一起,改动一点却发现牵一发而动全身。

C#开发人员 | 园豆:181 (初学一级) | 2015-02-05 23:04

@上帝之城: 我试试,主要是现在有一族对象,但是很多函数都是基于派生类的。

比如AddXXX(XXX),AddYYY(YYY),AddZZZ(ZZZ),XXX和YYY还有ZZZ都继承AAA,给我感觉这里使用继承的更大作用是代码复用,而不是为了今后拓展,很纠结。

TheBlackPearl | 园豆:7 (初学一级) | 2015-02-05 23:07

@C#开发人员: 你说的很对,我有些了解了。

可以使用多态来解决这个问题,然后在使用一个工厂类去创建。

我的初衷只是想把代码写的能向后拓展。谢谢你了。

TheBlackPearl | 园豆:7 (初学一级) | 2015-02-05 23:11
其他回答(4)
0

关于API设计,一般若类之间不存在继承关系,但接口功能相似,泛型接口是个比较理想的选择。

API设计的常见规范是,输入参数越抽象越好,返回的东西越具体越好。关于输入参数(父类)和返回参数(子类),可以参考协变和逆变。

收获园豆:30
JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 09:04
0

我感觉你是想用泛型接口,你去查查看

收获园豆:20
刘宏玺 | 园豆:14020 (专家六级) | 2015-02-06 10:24
0

下面这个方法:DeleteEmployeeById(Employee emp);

可以对今后拓展自Employee的类使用。【拓展是什么意思?继承吗?】

 

那么假如有一些方法内使用到了Ceo或Cto中自己的属性,也就是说,需要使用非继承来的属性。

那么是否这个方法就只能对Ceo或者Cto以及继承他们的类拓展了呢?【拓展指什么?】

 

若Ceo和Cto不可被继承,那么这些方法就不存在兼容性了吗?

 

你能把你想要的东西表达清楚吗?

ChuckLu | 园豆:514 (小虾三级) | 2015-02-10 19:46
0

继承的大忌就是,不要以为代码看上去很多地方都差不多就是来个继承,搞都后面越来越多个性化的时候,基类堆满了逻辑代码;而是要看对象的性质,看看在某种环境下是不是属于同类别的,是就可以继承,

lawbc | 园豆:63 (初学一级) | 2015-02-13 09:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册