本帖最后由 houhu_cs 于 2010-04-25 13:35:36 编辑

解决方案 »

  1.   

    http://blog.csdn.net/houhu_cs/archive/2010/04/25/5526516.aspx
      

  2.   

    在Delphi中要实现楼主的“原则”是很困难的,主要原因是Delphi没有真正意义上的友元,相互联系的各类如果分散到不同文件,就没法访问对方的私有成员了,如果把某些私有成员改为保护成员又可能不符合封装原则。
      

  3.   


    那我们可以用属性啊,变成getter和setter来控制对私有变量的访问。其实我觉得对一个类私有成员的访问很多时候往往破坏了封装,应该尽量减少。
      

  4.   

    首先我觉得楼主没理解清解耦的意思吧,把两个类从一个单元变成两个单元,这就叫解耦了?解耦主要是谈及类结构间的问题的,即使一堆类放在一个单元里,结构也可以是很松散的。我觉得单元划分主要是代码管理上的问题,除非当涉及到分接口包和实现包的时候,单元划分才会涉及到解耦的问题。但这时的解耦就不是楼上各位说的类的解耦了,是整个软件的模块解耦了。另外我觉得楼主最后举的例子也有点不恰当,在DELPHI里,没用到的代码是不会被编译进程序的,所以你完全没必要担心因为引用了F,没用B,却因为B而让程序体积增大。
      

  5.   

    是这么个道理,一堆类放在一个单元里结构可以是松耦合的。
        但对于其他引用这个文件的人来说,这个文件就相当于是封装了的,完全不知道是否耦合了。要么我就去读他的源码,要么我就不得不引用整个文件。
        我提议单一接口不是说一个接口放一个类,而是对外看来有且仅有一种职责,只有一个对外接口。不是不这样做文件内部就不耦合,只是说这样做能使结构更为清晰,有助于程序结构的解耦。
        还有一个问题就是:如果B中用到了F2文件,那为了把F文件加载进来能编译通过,我还要把F2加载进来。
      

  6.   


    我还有一个问题想请教一下。
        DELPHI的是不是和C++ 一样没有修改过的文件就不会再次编译成dcu,仅仅编译修改过的文件啊?如果是这样的话,那我修改B的话,得重新编译整个F文件。
      

  7.   

    没修改过的单元我记得是不会重新编译DCU的,除非你是选了BUILD。必要的编译是无法避免的。如果想减少编译的话,建议划分好哪些是常变部分,哪些是稳定部分。例如说接口是稳定的,实现是可变的。那么下次项目时,接口DLL(或BPL)就不用重新编译了。