Creating a class instance from a string with Object.factory() method requires the name of the module:

http://www.informit.com/articles/article.aspx?p=1381876&seqNum=6

module main;
Human person = cast(Human)Object.factory("main.Human");

However, if one rename the module (let's say into "newmain"), he also has to replace all the occurences of "main.Human" into "newmain.Human" inside the same source file.

The situation is somewhat worse if the default module name is kept, that is the name of the source file. Renaming the source file will instantly break use of the .factory() method and, if the programmer is not careful to test for !is null after each .factory(), things get easily corrupted.

For these reasons, classes that belongs to the current module should (well, it's a proposal) allow a faster creation method.

Proposals:

Object.factory("Human"); // idem as Object.factory("<module name>.Human");

or

Object.factory(".Human"); // idem as Object.factory("<module name>.Human");


or

Object.factory("module.Human"); // idem as Object.factory("<module name>.Human");

The third proposal is, however, a bit cumbersome since requires the compiler to reinterpret part of a string, but it takes advantage of the fact that one canot name a module "module".

This way, one could rename source files without worrying for this issue. More, maybe it is better for the Object.factory() method to throw an exception instead of simply returning a null pointer (this will be seen even if the programmer forgot to test for null and is an alternative solution to the above proposals).

Opinions?

Reply via email to