设计,为了更好的应对变化

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010755087/article/details/70677345

什么是设计模式?

 1.是解决某些问题的办法
 2.不是凭空想象的,是经验的积累和总结

不可预测的变化。

   产品的上线只是第一步,维护和拓展才是我们花很长时间去做的。

  1.当前期设计不合理,后期维护出现重大问题如何处理?立即修复、接着挖坑、 推倒重做;

  2.你永远不可预知产品经理和老板的idea,被动的接受摆布去实现各种合理、不合理的需求;

  3.业务拓展,需求变更;

  ......

以上任何事件的发生就注定了我们要加班,有位司机说,半夜打车的不是喝酒就是搞IT的。

四个阶段

1.面向对象编程思想

   什么是面向对象?什么是封装、继承和多态,以及三个特点的表现形式,基础很重要。

2.划分抽象与具体

    如何更好的解决“变化”问题?答案是“提取抽象、隔离具体”。
    什么是“抽象”? 抽象就是不变的东西,一个数据表的操作,总会有增删改查,把他们作为接口,这是不变的。
    什么是“具体”? 具体是实际执行的,一个数据表的增删改查,用sqlserver、access还是oracle?可能会有变化。
    我们应该依赖于抽象编程,而不是依赖于具体编程。应该把程序中的共性抽象出来,并且把具体实现的部分隔离开来, 让他们都依赖于抽象,并且互不影响。这其实就是设计。 只有理解了“抽象”、“具体”、“隔离”这几个词儿,你才能真正理解设计模式

3.理解设计原则

   单一职责原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
   开放封闭原则:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
   里氏替换法则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
   依赖倒置原则:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
   接口分离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
   迪 米 特 法 则:一个软件实体应当尽可能少地与其他实体发生相互作用。

4.运用设计模式

  最后才是设计模式,设计模式其实是一些工具而已。就如功夫里的招式,没有内功的沉淀和修炼,也只不过是空架子。


有人说几行代码的事情为什么搞的那么复杂?正如标题所写设计,为了更好的应对变化。

当你设计出一套优秀代码时,你会因为它不加班,因为它得到同事的赞许,因为它爱上编程。


附一位国外大牛的话:模式从不保证任何东西,它不能保证你一定能够做出可复用的软件,提高你的生产率,更不能保证世界和平, 模式并不能替代人来完成软件系统的创造,它们只不过会给那些缺乏经验但却具备才能和创造力的人带来希望。

展开阅读全文

为了应对一种商品有多种售价

02-14

对于小商店的售价是经常变动的。每次扫描条码的时候,如果发现此种商品有两种或两种以上的售价,就把满足此条码的商品存放在一个临时表中。rnd是一个对话框,用于返回临时表中某一种商品所对应的多种售价中的一个。 把此对话框返回的售价存放在变量 ShouJia 中。 同时也取得临时表中的商品名称,把商品名称存放在变量 ShangPinMingCheng 中。rn最后用这两个变量和 CListCtrl 中的每条记录循环比较。ClistCtrl 对象的指针在下面的代码用 p 表示。 如果 CListCtrl 中是空的,则直接添加,如果不为空则循环比较。rn在比较中:如果控件中的商品名称等于临时表中的商品名称 并且 控件中的售价等于对话框中返回的售价,则把数量加一。如果不满足,则在控件的最后插入一条新记录。rn下面的代码的运行结果有毛病,清帮忙修正一下。rnrn运行结果:rn启动选择售价对话框,rn选择售价20,在第一行插入一条新记录 数量为一 ---- 结果正确rn选择售价20,使第一行的数量自增一 ---- 结果正确rn选择售价30,第一行记录消失,第二行产生新记录,数量为一 ----- 结果错误(不知为何第一行记录消失)rn选择售价30,第一行仍为空行,第二行的数量字段自增一个 ------ 结果错误(第一行仍然消失)rn选择售价[color=#FF0000]20[/color],前两行记录消失,第三行产生新记录,并且数量为一 ----- 结果错误(前面记录消失、数量在此处应为三)rnrnrn[code=C/C++] mysql_free_result(result);rn d.DoModal ();rnrn wchar_t ShouJia[100]; // 用于保存对话框返回的售价rn ::ZeroMemory (ShouJia,200);rn for(unsigned int i = 0; i<100; i++)rn rn ShouJia[i] = d.ShouJia[i] ;rn rnrn mysql_query(conn,"select distinct 商品名称 from LinShiBiao");rn result = mysql_store_result(conn);rn row = mysql_fetch_row(result);rnrn wchar_t ShangPinMingCheng[100]; // 用于保存临时表中的商品名称rn ::ZeroMemory (ShangPinMingCheng,200);rn ::MultiByteToWideChar (CP_OEMCP,0,row[0],-1,ShangPinMingCheng,100);rn mysql_free_result(result);rnrn rn rn if(p->GetItemCount () == 0) // 如果ClistCtrl 中没有记录rn rn p->InsertItem (0,L"");rn p->SetItemText (0,0,ShangPinMingCheng);rn p->SetItemText (0,1,ShouJia);rn p->SetItemText (0,2,L"1");rn rn elsern rn BOOL XiuGai = FALSE;rn for(unsigned int i = 0; i< p->GetItemCount (); i++)rn rn wchar_t mc[100];rn wchar_t sj[100];rn ::ZeroMemory (mc,200);rn ::ZeroMemory (sj,200);rnrn p->GetItemText (i,0,mc,100);rn p->GetItemText (i,1,sj,100);rnrn rn if( wcscmp(ShangPinMingCheng,mc)==0 && wcscmp(ShouJia,sj)==0 )rn rn wchar_t sl[100];rn ::ZeroMemory (sl,200);rn p->GetItemText (i,2,sl,100);rn int a = _wtoi(sl);rn a++;rn ::ZeroMemory (sl,200);rn wsprintf(sl,L"%d",a);rn p->SetItemText (i,2,sl);rnrn XiuGai = TRUE;rn break;rn rn rn if( XiuGai == FALSE )rn rn p->InsertItem (p->GetItemCount ()-1,L"");rn p->SetItemText (p->GetItemCount ()-1,0,ShangPinMingCheng);rn p->SetItemText (p->GetItemCount ()-1,1,ShouJia);rn p->SetItemText (p->GetItemCount ()-1,2,L"1");rnrn rn rn rnrn w = mysql_query(conn,"drop table LinShiBiao");rn if(w!=0)rn MessageBox(L"删除临时表失败");[/code] 论坛

如何设计不断变化的的动态报表?

05-02

有这样的一个应用,共有3个数据表,其中A表中存储所有的标准工资信息,有很多字段,B标准存储单位信息,C表中存储每个单位的工资项目信息,结构大致如下:rnA表rn---------------------------------------------rnID deptID usertype userID username A001 A002 A003 A004 A005 A006 A007 A008rnrnB表rn---------------------------------------------rnID deptID deptnamernrnC表rn---------------------------------------------rnID DeptID usertype code codenamernrn就是在C表中存储这左右单位不同人员类型的工资项目,二基本上各个单位的工资项目是不同的,现在如何按照不同的单位生成报表???? rnrn实例数据如下:rnA:rn1 1001 001 1001001 A 400 0 123 0 345 0 0 768rn2 1001 002 1001002 B 400 50 0 0 0 0 0 450rn3 1002 001 1002001 C 400 60 30 21 0 0 0 511rn4 1002 001 1002002 D 350 70 25 15 0 0 0 460rn5 1002 002 1002003 E 350 0 150 25 0 15 45 570rn6 1003 001 1003001 F 0 250 150 0 0 15 0 415rn-------------------------------------------------------------rnB:rn1 1001 单位一rn2 1002 单位二rn3 1003 单位三rn------------------------------------------------------------rnC:rn1 1001 001 A001 基本工资rn2 1001 001 A003 等级工资rn3 1001 001 A005 奖金rn4 1001 001 A018 实发工资rn5 1001 002 A001 基本工资rn6 1001 002 A002 岗位工资rn7 1001 002 A008 实发工资rn8 1002 001 A001 基本工资rn9 1002 001 A002 岗位工资rn10 1002 001 A003 等级工资rn11 1002 001 A004 交通费rn12 1002 001 A008 实发工资rn13 1002 002 A001 基本工资rn14 1002 002 A003 等级工资rn15 1002 002 A004 交通费rn16 1002 002 A006 高原补贴rn17 1002 002 A007 边远补贴rn18 1002 002 A008 实发工资rn19 1003 001 A002 岗位工资rn20 1003 001 A003 等级工资rn21 1003 001 A006 高原补贴rn22 1003 001 A008 实发工资rnrn现在要生成如下形式的报表:rnrn 单位一工资表rn类型:001rn----------------------------------------------rn序号 姓名 基本工资 等级工资 奖金 实发工资rn1 A 400 123 345 768rn 合计 400 123 345 768rnrn----分页------rn 单位一工资表rn类型:002rn----------------------------------------------rn序号 姓名 基本工资 岗位工资 实发工资rn1 B 400 50 450rn 合计 400 50 450rnrn----分页------rn 单位二工资表rn类型:001rn----------------------------------------------rn序号 姓名 基本工资 岗位工资 等级工资 交通费 实发工资rn1 C 400 60 30 21 511rn2 D 350 70 25 15 460rn 合计 750 130 55 36 971rnrn----分页------rn 单位二工资表rn类型:002rn----------------------------------------------rn序号 姓名 基本工资 等级工资 交通费 高原补贴 边远补贴 实发工资rn1 E 350 150 25 15 45 570rn 合计 350 150 25 15 45 570rnrn----分页------rn 单位三工资表rn类型:001rn----------------------------------------------rn序号 姓名 岗位工资 等级工资 高原补贴 实发工资rn1 E 250 150 15 415rn 合计 250 150 15 415rnrn该如何生成这些报表,能够同时预览和打印?????rn 论坛

没有更多推荐了,返回首页