如何使写出的代码适应不断改变的需求

fx397993401 2012-06-22 11:30:25
本人现在在公司实习,leader 交给我项目中一个模块来做, 但是经常会变动一些需求, 程序要实现的功能没变,只是来源的数据格式会经常改变,所以我的代码在读入数据部分 经常修改 。

那么我现在就想问 “如何使写出的代码适应不断改变的需求 ”

这个平时应该加强哪方面的修炼,看些什么书?
在写代码的时候使用什么方法 。

ps : 我使用的是C++ 。
...全文
283 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-06-26
  • 打赏
  • 举报
回复
这个世界上唯一不变的就是变化。
ningto.com 2012-06-25
  • 打赏
  • 举报
回复
了解一下模板,泛型编程
fx397993401 2012-06-25
  • 打赏
  • 举报
回复
恩 谢谢 @ qq120848369
qq120848369 2012-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

变化点都是接口, 你一直抱着一种想法 : 这个点是不断变化的, 是做在DLL里的, 我怎么写才能实现呢?

于是你就会了.
[/Quote]

说的好像不太和谐, 应该说: 不变的是接口, 变化的是实现, 设计一个"以不变应万变的接口"就是一个优秀的设计.

C/C++都是一样的, 如果你非要从C++面向对象的角度入手, 可能过多的考虑多态, 其实你大可忘记C++。

一定要记住, 指针是C/C++里最牛X的抽象, 怎么玩好指针就是你需要考虑的.

所谓的C++继承在C里一样可以实现, 因为地址是地址, 内存是内存, 给你个结构体抽象的例子:

#define BASE_DATA int fd;int type;
struct parent{
BASE_DATA
};
struct child1 {
BASE_DATA
data of child1;
};
struct child2 {
BASE_DATA
data of child2;
};

怎么提供统一的接口?

struct child1 a;
struct child2 b
struct parent *p = (struct child1*)&a;
struct parent *p = (struct child2*)&b;

if (p->type == 1) {
} else if (p->type == 2) [
}
...
...
...

这是一种继承方面的抽象, 基类抽象出派生类的公共部分, 用基类指针抽象.
函数接口也是需要抽象的, 这种例子最典型的就是struct sockaddr, struct sockaddr_in, struct sockaddr_in6,struct sockaddr_storage。

如果数据变化点比较大, 封装可变的数据为void*, 提供不变的wrapper结构体。
qq120848369 2012-06-22
  • 打赏
  • 举报
回复
变化点都是接口, 你一直抱着一种想法 : 这个点是不断变化的, 是做在DLL里的, 我怎么写才能实现呢?

于是你就会了.
kevinyank 2012-06-22
  • 打赏
  • 举报
回复
使用面向对象的设计与分析方法。。。。。使用设计模式。。。推荐书籍《大话设计模式》《设计模式》
绝对是LZ所需要的!!!!
qq120848369 2012-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 3 楼 的回复:

引用 2 楼 的回复:

变化点都是接口, 你一直抱着一种想法 : 这个点是不断变化的, 是做在DLL里的, 我怎么写才能实现呢?

于是你就会了.


说的好像不太和谐, 应该说: 不变的是接口, 变化的是实现, 设计一个"以不变应万变的接口"就是一个优秀的设计.

C/C++都是一样的, 如果你非要从C++面向对象的角度入手, 可能过多的考……
[/Quote]

汗,强转是必须的,另外你要访问p->c2你也得把它强转成struct child2*才行。

fx397993401 2012-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

变化点都是接口, 你一直抱着一种想法 : 这个点是不断变化的, 是做在DLL里的, 我怎么写才能实现呢?

于是你就会了.


说的好像不太和谐, 应该说: 不变的是接口, 变化的是实现, 设计一个"以不变应万变的接口"就是一个优秀的设计.

C/C++都是一样的, 如果你非要从C++面向对象的角度入手, 可能过多的考虑多态, 其实你大可忘记C++。……
[/Quote]
然后我根据你的 写了个程序 ,这个在类型转换上有错误 , struct parent *p = (struct child2*)&b;

然后p 不能访问子类的数据


# include<iostream>

using namespace std;

#define BASE_DATA int fd;int type;
struct parent
{
BASE_DATA
};
struct child1
{
BASE_DATA
int c1;//data of child1;
};
struct child2
{
BASE_DATA
int c2;//data of child2;
};

int main()
{
struct child1 a = {1,1,2};
struct child2 b = {1,2,3};
struct parent *p = (struct parent *)&a; //这里改了下
//struct parent *p = (struct child2*)&b;

if (p->type == 1)
{
cout << p->fd<< endl;
}
else if (p->type == 2)
{
//cout << p->c2 << endl;
cout << p->fd << endl;
}

return 0;
}

fx397993401 2012-06-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

1. 了解一下设计模式对楼主这个问题应该有所帮助。比如要尽可能地隔离稳定的部分和变化的部分
2. 具体到楼主这个问题,建议有一个输入格式描述文件(比如可以用xml或者自己定义的一种格式),用来解释输入的含义,这样如果输入的格式发生了变化,只需要修改输入格式描述文件即可。
[/Quote]

恩 我现在就是在改 处理输入格式 的函数,但我感觉自己分离的不是很好 。
fx397993401 2012-06-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

使用面向对象的设计与分析方法。。。。。使用设计模式。。。推荐书籍《大话设计模式》《设计模式》
绝对是LZ所需要的!!!!
[/Quote]

你说的设计模式 是指 设计模式:可复用面向对象软件的基础 这个么
pathuang68 2012-06-22
  • 打赏
  • 举报
回复
1. 了解一下设计模式对楼主这个问题应该有所帮助。比如要尽可能地隔离稳定的部分和变化的部分
2. 具体到楼主这个问题,建议有一个输入格式描述文件(比如可以用xml或者自己定义的一种格式),用来解释输入的含义,这样如果输入的格式发生了变化,只需要修改输入格式描述文件即可。

65,186

社区成员

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

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