[程式] 关于ue4中的目录结构与Module相依性

楼主: dorgonman (dorgonman)   2017-03-26 16:54:40
部落格版本:
http://dorgon.horizon-studio.net/archives/1152
欢迎对UE4有兴趣的伙伴们来到我们位于discord的讨论群一起讨论:
https://discord.gg/FanK6yc
欢迎讨论与指教 : )
=====================================
https://i2.wp.com/dorgon.horizon-studio.net/wp-content/uploads/2017/03/image-1.png
在用Editor加入程式码的时候,会发现上面有Public跟Private二个目录选项,见上图。到底它们的用途是什么?对于熟悉C++的人可能已经猜到原因:为了让Module“接口”跟“实作”的部份有着更明确的区分,我们将所有的.h档都放在Public;.cpp都放在Private。──大部份的情况是可以适用这个规则。只是这个目录架构并不是绝对,我们当然可以在Private中放.h档或在Public中放.cpp,甚至创立自己的目录结构,这在编译程式上并不会有任何的问题。
只是并不是所有的档案都适合放在Public中,要知道,UE4是用Module的概念来组成各个系统的功能。为了Module的维护性与使用端的简便,我们必须要想办法将实作的细节从使用端隐藏起来。
将档案放在Public中所代表的,就是任何人都能够随意的去include这个类别并使用里面的方法。这所造成的结果,会让我们没办法轻易的修改程式,例如更改类别中某个方法的名字。随意修改名子的后果,会造成继承该类别的物件无法编译,又若是所依赖的专案使用大量的Blueprint继承该类别,可想而知这些档案就会全部损坏而无法回复。
其实这边所提的就只是物件导向中‘封装’的概念,只是这里从是档案目录结构的面向来思考。要怎么设计Module里面的目录组成方式,就端看这个Module的目的与设计者的巧思。理论上放在Public目录下的类别必须要具有稳定性,不管是类别的名字还是所开放方法的参数。
当然,若是我们所实作的是末端的Game Module,没有其他的Module参照到我们的话,不管怎么组织目录都不会有太大的影响。
另外我们在引擎中还会看到许多Module建立了一个叫Classes的资料夹,如Figure 28。
https://i2.wp.com/dorgon.horizon-studio.net/wp-content/uploads/2017/03/image-2.png
Figure 28 Engine Module定义了Classes、Private、跟Public三个目录结构。
Public跟Private我们可以理解用途,但为什么多了一个Classes?根据官方的回答,在以前所有的UObject都只能放在Classes这个目录下面。现在当然没有这个限制,为了历史的兼容,这个目录也跟Public一样自动被设定进include搜寻路径之中。
本系列文章为个人原创,未经授权,谢绝转载
作者: coolrobin (泳圈)   2017-03-26 19:37:00
作者: cowbaying (是在靠北喔)   2017-03-27 00:58:00
看起来PUBLIC的东西比较像接口或是ABSTRACT这类的东西
作者: Frostx (Naga)   2017-03-27 08:59:00
作者: windkey (揪噜噜)   2017-03-27 22:10:00
感谢分享!!

Links booklink

Contact Us: admin [ a t ] ucptt.com