有关业务划分与基类的问题

lw1a2 2008-03-10 09:18:16
有两个业务类A和B,它们之间在业务上是没有关系的。

但是它们在业务流程上是近似的:比如,第一步校验数据,第二步文件操作,第三步写数据库。

于是这两个就存在相同的代码。

现在有两个方法来设计这两个类:

1)A和B从同一个基类派生,基类封装公共的代码,A和B分别实现自己特有的代码
缺点是这个基类不伦不类,不符合IS-A的标准

2)A和B分别独立
缺点是存在冗余代码,维护起来不方便

请问,这种问题一般的处理原则和方法是什么
...全文
107 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
abupie 2008-03-11
  • 打赏
  • 举报
回复
首先“任何情况都不能用继承”,这种思想是错的,否则,面向对象也没有必要实现继承了。
只是说IsA和HasA在都能实现的时候,选择HasA比IsA要好。

就楼主的这个情况,其实就是设计模式中的“模板模式”,用继承封装相同的流程,其实是比较好的方法。请参阅设计模式的相关章节。
lw1a2 2008-03-11
  • 打赏
  • 举报
回复
现在是这样,我们项目组负责实现A、B这两个模块(分别是两个DLL)

如果将公共的部分提出来,单独放在一个DLL里(里面除了公共基类还有一些宏什么的)不知道改怎么命名

不能叫的太大(例如XXXCommon),因为只有两个模块用

而且,要考虑到将来用户会单独安装A或者B模块的需求
babyvox1999 2008-03-11
  • 打赏
  • 举报
回复
葫芦鬼 2008-03-11
  • 打赏
  • 举报
回复
将相同操作的部分进行封装成C。
A/B与C是has-A的关系。
赞同3楼观点。
yqw945 2008-03-10
  • 打赏
  • 举报
回复
我以前遇到过一个类似的例子

A,B,c...多种表单他们要实现的操作流程都大体相同,数据结构不同。

当时我们的做法是采用第二种方法分别独立定义表单类。

按照软件工程的思想第一种方法有内容耦合的嫌疑,这就是说C类的对象完全可以不通过正常接口进入A类,这是不符合现实逻辑的
huang_yu_qiang 2008-03-10
  • 打赏
  • 举报
回复
赞同用方法一,因为:
1. 维护工作量占软件生命期的70%以上。
2. "IS A"关系有时候是不明显的,流程一致也是一种"IS A"关系啊,就看你怎么理解了。
lw1a2 2008-03-10
  • 打赏
  • 举报
回复
模板基本上不太可能

使用第一种方法的话,岂不是把两个逻辑上无关的类耦合起来了?
  • 打赏
  • 举报
回复
我赞同第一种.
要么用class封装好功能.
A和B都有这个class成员
独孤过儿 2008-03-10
  • 打赏
  • 举报
回复
要是我,我就选择第一种方法!但是要高度的抽象出A和B的共同特征,这样的基类才是一个设计良好的基类
星羽 2008-03-10
  • 打赏
  • 举报
回复
是否可以考虑用模板??

相似代码占的百分比?

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧