Game Development Reference
The core components should try to avoid external dependencies to other assemblies
at all costs, unless linking to another core component that contains required func-
tionality. Core components should also never contain any application entry points.
Optionally, you can also expose a COM interface from these core components if
your design warrants it, though I do present an alternative in the specific tool logic.
It is advisable that you assign a strong name key to the core component assemblies.
The only time you cannot do so is when the assembly references unsafe code, such
as an ActiveX object.
Specific Tool Logic
This module should contain all the logic that is unique to the tool you are building.
There is generally no code here that would be reused anywhere else, and typically
just the driver functions are implemented in this module. The specific tool logic
references whatever core components are needed for the tool, yet it does not
implement any entry points. This module can export a COM interface quite easily
to be called from unmanaged legacy applications.
Console Entry Point
Users prefer a rich GUI interface over a simple console one, but activities like batch
processing generally feed commands and parameters into command line tools in
an automated fashion. For that reason, it is important to support command line
access for a tool that could be used with batch processing later. Obviously, the
interface does not have to be fancy, but it should be clean enough that a user could
launch the console entry point manually and easily use the tool. Proper menu
descriptions and selection logic help out greatly in this regard.
Windows Entry Point
This entry point is relatively easy to construct if a decent console entry point has
been made. There are two main ways this entry point could be developed, but I
personally prefer the stackable method where the standard input, output, and
error streams are redirected from the console entry point. This method requires
less code, in that we are basically slapping a rich GUI interface on top of the con-
sole entry point.
The other approach for designing this entry point is through bypassing the con-
sole entry point and implementing similar logic that interfaces directly with the
specific tool logic.