现在公司的产品结构是 C++写底层,Java写UI的现在想对产品进行一下裁减,C++这边的方案就是对每个特性添加 一个宏,如果这个release需要这个特性只要打开这个宏就可以了,否则关闭这个宏。不知道Java那边有什么好的方法来实现这个的可订制裁减。现在裁减主要的目的就是为了减小产品的大小,所以C++那边采用宏可以说是一个非常好的解决方案,不需要的特性都不需要编译,所以想在Java这边也能达到这个样的效果。

解决方案 »

  1.   

    定义接口,用不同的jar包来实现,用哪个就打入哪个。和c的dll道理相似
    java没有宏,再说,宏的速度也慢呀,按你说的,为了节省空间而用宏,那要用多少宏呀,还不如用dll呢
      

  2.   

    java推荐的就是oo概念
    不同的工作可以实现相同接口,提供不同的jar包,这样就可以实现你说的剪裁了
    如果发现方法没有相同性,可以通过反射机制来完成。你看看数据库驱动和look&feel,他们都推荐通过反射来做。你说得也可以用这种方法来实现。而对于宏,java不支持,而且oo语言也不建议采用,他会影响程序的可靠性。并且宏的执行速度慢(你可以测试一下)。我敢保证,你说得那些可以通过宏文件来实现的都可以通过jar包来实现。而且结构更清晰
      

  3.   

    to fool_leave,
    Java 里面有宏? 反正C/C++里面的宏只会编译时替换,很多时候为了获取速度,而采用宏
      

  4.   

    to fool_leave,
    你说的接口什么的,我理解,并且我们现在就是这么做的。
    但问题是,比如我用了look&feel,肯定是在我的代码里import了look&feel的packet,并且也是在我的代码里使用了look&feel的接口定义的函数了。如过我现在想把它裁减了,有什么好的办法?
    不要告诉我,把import和使用的的地方注释掉就可以了
    因为后面的版本又可能需要这个功能,或者这个代码需要编译出不同的版本,一个版本需要look&feel,另一个版本不需要look&feel。
      

  5.   

    如果你们有一套很好的机制通过Java Reflection来调用可裁减的类。那么不需要的那些类不打包就OK,用Java Reflection调用的时候,没发现类存在就放弃,或者做其它处理。
      

  6.   

    我考楼猪!!!人家提了很多好的方法,都被你用什么代码已经存在,时间很紧,或是代码量大给cancel掉!你到底想这么样!!是不是要展示你的C/C++很强?为什么不用VB6.0做界面?世界上最强的界面开发工具,甚至可以连接数据库,太强大了!!
      

  7.   

    to jacktan(贫僧法号[梦遗]):我知道大家的方法好,我也没有否定大家的方法,只是不太适合我现在的情况而已。
    我对Java不熟悉,所以才来请教大家的我之所以来问这个问题就是因为有这些的限制条件,我自己想不到完美的解决方案才来请教大家的另外之所以用Java做界面这个不是我觉定的,公司的产品由来已久,一方面是为了跨平台
      

  8.   

    一个基于现在实现的方案,比较丑陋:1。将需要裁减的功能划分为一个个模块,比如一个App就是一个模块,PktGen也是一个模块,RoutingManager也是一个模块2。在一个配置文件(比如xml)中对这些模块进行配置,标示哪些模块是需要的,哪些是需要裁减的。并且针对每个模块定义一个宏(用于生成C++头文件)3。对于C++,根据配置文件中定义的宏,对每个模块涉及到的代码用宏进行控制,并要保证在宏打开和关闭时都能编译通过。4。在C++代码编译之前需要根据配置文件生成一个头文件,该头文件里定义了一些宏,表示哪些模块是需要裁减的,哪些是需要保留的。5。对Java代码进行修改,对于使用到被裁减的模块的代码,在使用之前需要根据配置来判断是否需要运行相关代码。