在最近的项目中遇到一个问题,因为项目保密,只能说一些大致的意思:
有A、B、C三个界面。其中A是一个ListBox,用于查看保存的某些数据,而B界面就是查看这些数据的详细情况。从A和B都有一个按钮来对A中某个数据进行相同的处理来进入C界面,所以对A和B中的这两个响应函数基本是相同的,但是在A和B的View中必须都存在一份,是否有比较好的方法来处理这种重复代码

解决方案 »

  1.   

    "从A和B都有一个按钮来对A中某个数据进行相同的处理来进入C界面"
    把上面的代码写成一个公共函数,全局也行,只要A和B都能调用他就行了.
      

  2.   

    写成全局的我还不如将A类的一个指针传给B类,然后在B类的函数中直接调用,好像这叫委托。
      

  3.   

    干脆把所有对数据的处理都封装到一个类M里面去,A要用的时候调用M,B要用的时候也调用M。
    M里面把所有的数据操作都写全了,要兼顾A和B类操作的不同。例如A要取得简要信息 就提供一个GetSimpleInfo();
    B要用详细信息就提供一个GetEntireInfo();
    A与B都会用到的直接定义一个函数就行了。在创建类的时候可以考虑将A,B的句柄传进去,这样就可以做到在M类中完成窗口的一些操作了。
      

  4.   

    业务规则与界面分离你的那个数据处理应该就是业务处理了,显然应该有个处理数据的对象,负责维护数据,包括建立、删除和处理等工作,而所谓的A和B从里面取出感兴趣的数据进行显示,至于以何种形式,可以调用数据处理对象的相关接口当然如果为了抽象成类,还有种办法,就是建立全局静态类,把一些零散或者无法归类的函数做成静态,便于绘制UML图
      

  5.   

    面临和楼主差不多的需求,也正在困惑中
    目前的思路是通过doc/view结构实现
    将数据和对数据的操作存于一份doc中,A、B、C三个视图都关联这份doc
    任何一个view对doc的修改都触发另两个视图的更新
    现在对doc/view的具体实现理解的还不是很透彻,仍然很疑惑
    望达人详解是否可行
      

  6.   

    其实处理也很简单,就是判断条件是否符合。当然,是调用下层的函数。对于不满足的情况应该就不再进入C界面,并且弹出Message Box,但是若放在业务处理层的话那弹出Message Box的代码应该属于UI层的,然后进入C的代码也属于UI层的,所以
    放在业务处理层也不好。
    当然,在业务处理层的函数返回值可以设为枚举类型,返回错误码,然后对错误码选择不同的处理方式,那我在两个UI界面还是要维护两份相同的错误码处理函数,如果添加了一种case我还是要在两个地方都修改。