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

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

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

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

ps : 我使用的是C++ 。
...全文
264 11 打赏 收藏 转发到动态 举报
写回复
用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或者自己定义的一种格式),用来解释输入的含义,这样如果输入的格式发生了变化,只需要修改输入格式描述文件即可。
不需要开发,0行代码写接口服务,sql编程,只要会sql就会写接口服务,让后端变得更简单,简单4步短短5分钟,立马上手,java小白也可以写接口。订阅课程后可以免费获取发布版进行使用和测试。 0行代码写服务的需要来源案例一,当时有个项目,有400张表,都是管理系统,单表维护的内容较多,当时的项目团队是13人,前后端都写,那时候还没有springboot,用的是ssm,mybatis刚出来,有了替代hibernate的趋势,ifelse写了一堆又一堆,实体类也是,当时的后端分了7层☒,天天加班干这活,复制粘贴,很容易犯错,实体类多人引用修改,真的是废了很大的劲……案例二,也是一个比较大的项目,两千万多万那种,当时为了拿项目,需要快速实现原型给客户看,要求比较高,虽说是原型但是数据全部需要实时,这时候就需要大量编写数据接口,同样编写接口这件事难度倒是不大,但是量大,编写过程手写很容易出错……案例三,以前管理的团队主要做移动端开发,里面的项目会涉及到推送,管理系统,数据采集与同步,总之很多内容,需要前后端通吃,我不仅需要出方案,设计原型,设计数据库,出报价,沟通需求,还要写后端框架,数据接口与数据采集,开发前端(web端),移动端,管理所有项目,但是那时候招的人只会写移动端,实在是忙不过来,我就想能不能有个框架让不会写java的人能写接口,因为写移动端sqlite总是会用的,也就是说写sql不是难点……基于以上三点需求的积累,我利用业余时间写了一个后端框架,完成了这样的需求,刚开始是需要写三行代码完成一个接口,经过后面优化,现在不写代码也可以实现……  本框架涉及的知识点比较多,目前提供最基础版供大家学习和使用,后期逐步推出框架具体的教程和功能内容,下期我们讲如何在实际项目中通过部署版如何完成所需要的接口编写,欢迎大家订阅。

64,662

社区成员

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

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