On Tuesday, 12 June 2012 at 07:04:15 UTC, Henrik Valter Vogelius
Hansson wrote:
Hi!
I'm new to D and trying everything out. Got the basics down
which are very straightforward and similar to other languages.
My professional background is primarily in C/C++-variants and
Ruby if it helps.
I have a problem with how modules, packages and files work. I
don't really know how I am supposed to organize my code. I like
namespaces from C++ which is probably my curse. What I want to
write is code similar to this:
MyClass obj = new MyClass();
SomePackage.SecondClass secondObj = new
SomePackage.SecondClass();
Problem here is that SecondClass is a module. Is there some
nifty trick I can do here to solve this? I tried with just
having one module file which would hold all it's classes and
functions but that backfired very quickly as you can imagine
since it grew too large too quickly for most simple things.
I am open to any suggestions of course which would make it
simple for me to have a good structure with my files and also
make my code easily readable. Though if possible I would like
anything that goes under the package/module can somehow be
placed in it's own folder.
A module is a file, which can contain multiple
functions/classes/etc. A package is a folder with files. You
cannot put multiple modules in a file like C++ namespaces.
Generally, I create multiple modules in a single package, and
only use multiple packages when I have too many modules.
Here's a sample file structure:
src
- ddi
- color.d
- csv.d
- io.d
- main.d
- msg.d
A larger project, SDC, has 15 modules in the main package, and
six subpackages with on average five modules inside them. I like
the rule-of-15 in whether something is too big, though that is
personal taste and you might like more structure than I do.
In this case, have SomePackage be some_module, and have
SecondClass be inside of some_module.d:
auto obj = new MyClass();
auto secondObj = new some_module.SecondClass();
It's convention to _always_ use lower case, due to different
filesystem's rules on case.
Hope this helps,
NMS