社区
模式及实现
帖子详情
有关业务划分与基类的问题
lw1a2
2008-03-10 09:18:16
有两个业务类A和B,它们之间在业务上是没有关系的。
但是它们在业务流程上是近似的:比如,第一步校验数据,第二步文件操作,第三步写数据库。
于是这两个就存在相同的代码。
现在有两个方法来设计这两个类:
1)A和B从同一个基类派生,基类封装公共的代码,A和B分别实现自己特有的代码
缺点是这个基类不伦不类,不符合IS-A的标准
2)A和B分别独立
缺点是存在冗余代码,维护起来不方便
请问,这种问题一般的处理原则和方法是什么
...全文
107
10
打赏
收藏
有关业务划分与基类的问题
有两个业务类A和B,它们之间在业务上是没有关系的。 但是它们在业务流程上是近似的:比如,第一步校验数据,第二步文件操作,第三步写数据库。 于是这两个就存在相同的代码。 现在有两个方法来设计这两个类: 1)A和B从同一个基类派生,基类封装公共的代码,A和B分别实现自己特有的代码 缺点是这个基类不伦不类,不符合IS-A的标准 2)A和B分别独立 缺点是存在冗余代码,维护起来不方便 请问,这种问题一般的处理原则和方法是什么
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
模板基本上不太可能
使用第一种方法的话,岂不是把两个逻辑上无关的类耦合起来了?
珍惜生命远离CPP
2008-03-10
打赏
举报
回复
我赞同第一种.
要么用class封装好功能.
A和B都有这个class成员
独孤过儿
2008-03-10
打赏
举报
回复
要是我,我就选择第一种方法!但是要高度的抽象出A和B的共同特征,这样的基类才是一个设计良好的基类
星羽
2008-03-10
打赏
举报
回复
是否可以考虑用模板??
相似代码占的百分比?
Android代码-Android-Architecture
显示层(View Layer): Presenter 不再与 Activity/Fragment 一一对应,Presenter 按照
业务
模块
划分
功能,大大提高 Presenter 的复用性。Activity/Fragment 中可以实现多个 View,持有多个 Presenter 来完成
业务
...
PetShop4.0宠物商店+系统架构设计+中文注释源码+PDF中文详解
1、 将每一个“
业务
实体”抽象成“(瘦数据)类”,可以很好地“
划分
”各个“对象”,操作更加清晰 2、 用于在应用程序各层之间传递数据,被用做传输数据的“容器” 3、 这就是所谓的“建模”过程! 4、 Model...
应用OOP的设计过程演化(二)
在我上篇文章应用OOP的设计过程演化(一)里,结合了实例通过应用OOP和重构等技术,你已看到代码是怎样一步一步复活的。让最初死板的代码变得灵活、可扩展,设计的不断演化过程证实,代码...“既然抽象销售
业务
的
基类
springboot-wx:微信小程序-基于SpringBoot的实现Maven聚合,分为core核心模块,service服务模块,gateway对外网关模块,目前已经实现Shrio鉴权jwt监控鉴权,为小程序提供统一规范接口,以及小程序配套后台
代码模块的具体
划分
1.wx-apps-core一些基本的Core信息,登录校验,全局的常量,枚举类,base
基类
的抽取,通用的工具类的抽取,全局的响应状态码的定义,监听器容器初始化数据的加载配置和初始化拦截器登录信息的校验,系统...
浅谈通信服务
基类
设计
互联网时代,通信服务非常常见,看过一些开源工程、工作过公司的工程,对于应用层基础类的设计相对于通信库而言...一般通信服务工作处理流程都是从底层通信库接收
业务
数据包开始,经由底层回调应用层进行逻辑处理,最后
模式及实现
5,530
社区成员
4,169
社区内容
发帖
与我相关
我的任务
模式及实现
C/C++ 模式及实现
复制链接
扫一扫
分享
社区描述
C/C++ 模式及实现
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章