【关于类设计的问题】不知道该怎么去设计

lrj2005 2009-04-13 06:52:55
我做的一个模块(模块M)保存文件索引等信息,这个模块要和其他模块A,B,C交互(通过socket,接口已经定义好),现在M模块只是保存其他模块发送过来的消息,或者给其他模块提供消息,现在不是很清楚这样的类该怎么设计?请各位指点一下,多谢
...全文
133 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin12345 2009-04-13
  • 打赏
  • 举报
回复
看<<设计模式>>
hylove9494 2009-04-13
  • 打赏
  • 举报
回复
学习!
arong1234 2009-04-13
  • 打赏
  • 举报
回复
这东西哪是三言两语说得清的,找本类似于UML建模的书看看,顺便看看你同事现有代码慢慢琢磨。不要指望外边有个专家,2天教会你编码,这是不可能的,如果真这么容易,你也不会到现在还不会了,因为所有的简单的方法都会被放到课本并教给你。
theone11 2009-04-13
  • 打赏
  • 举报
回复
设计模式里面不是有一种Observer模式么?

另外,没有必要一开始就追求类的设计良好吧,整体架构把握好就行了,可重用不过就是那浮云啊……
fairchild811 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Dinelgua 的回复:]
由于模块M与其它模块交互都是通过socket 且接口已经定义号
那么模块M与其它模块在类关系上的耦合基本被解除掉了 除了接口相关的
那么模块M内部的类设计 就很简单了
建议

1  socket通信类 -- 负责socket连接数据收发
2  协议解析类    -- 负责解析收发数据的意义
3  模块索引类    -- 记录文件索引数据
[/Quote]

这样应该算是大方向有了吧
ryfdizuo 2009-04-13
  • 打赏
  • 举报
回复
10楼的建议可取,
设计类没有必要局限于MFC
只是谈一些思想...
mengde007 2009-04-13
  • 打赏
  • 举报
回复
10楼,既然不懂MFC,那就不要平感觉说说,具体的了解才是硬道理。大部分书说不行就不行??既然设计出来就有用武之地。
kiffa 2009-04-13
  • 打赏
  • 举报
回复
CArchive和CObject是什么?google一下似乎是MFC,完全不会,无法评论。

但一般来说若没有足够合理的理由,都不推荐用强耦合的继承关系。而且继承不是为了重用已有的代码,而是为了被重用。从CObject派生给我的感觉就像从std::string派生一样,至少大部分书上都说这是个馊主意,再次声明:我不懂MFC,只是凭感觉说说。

楼主的感觉挺对,除非必要,否则成员函数过多的大类一般都属于不良设计。以下是一些建议:
1,确定各种单一职责,用小类去完成单一职责。
2,用类和类之间的组合去完成整体功能。
3,或者抽象出一个高层的管理类来提供抽象接口给客户,通过组织各种低层小类来完成具体的工作。
4,多画画类间关系的草图,观察一下相互之间的依赖性,寻求更好的设计。
5,结合实际情况考虑重用、扩展、易测试性的需求,在灵活实现和复杂度之间选择平衡点。
6,条件允许就迭代,先做了再说,大不了扔掉重来。
7,细节方面:namespace、Pimpl惯用法等等很多,靠平时积累。

因为需求不是很明确,所以无法给出合适的具体方案,先按9楼说的做也不错。
Dinelgua 2009-04-13
  • 打赏
  • 举报
回复
由于模块M与其它模块交互都是通过socket 且接口已经定义号
那么模块M与其它模块在类关系上的耦合基本被解除掉了 除了接口相关的
那么模块M内部的类设计 就很简单了
建议

1 socket通信类 -- 负责socket连接数据收发
2 协议解析类 -- 负责解析收发数据的意义
3 模块索引类 -- 记录文件索引数据
wanghao111 2009-04-13
  • 打赏
  • 举报
回复
class M
{
//保存其他模块发过来的消息
//处理消息
//给其他模块发送的消息
]
Sco_field 2009-04-13
  • 打赏
  • 举报
回复
对照自己的功能,看 《模式设计》中有没有适合自己的
mengde007 2009-04-13
  • 打赏
  • 举报
回复
可以从CObject派生一个类,专门用于序列化数据。
mengde007 2009-04-13
  • 打赏
  • 举报
回复
这一般要用CArchive类
lrj2005 2009-04-13
  • 打赏
  • 举报
回复
因为是新手,不知该怎么样对这样的类进行封装,见笑了,如果弄成一个类的话,里面封装的方法太多了,感觉这样不对,就是不知道该对什么样的数据封装
  • 打赏
  • 举报
回复
这么抽象...
你先把模块M的具体功能列出来,然后写呗.
gao125210 2009-04-13
  • 打赏
  • 举报
回复
up
liliangbao 2009-04-13
  • 打赏
  • 举报
回复
帮顶~

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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