One of the most touted rules of OOP is to keep classes small. This means that in a significantly sized project there are bound to be thousands of classes.Logically it seems to make sense to combine related classes into various subsystems (or various levels of subsystem). My understanding of Demeter's law here is that a class in subsystem X shouldn't directly talk to a class in subsystem Y; instead subsystem Y should provide a faade to abstract the details of individual classes within it. However, in a complex application that faade must by definition be a large class. with many methods, even though it doesn't really do much.So should I be using faade classes (presumably at several levels) to maintain a hierarchical structure of subsystems, or should I treat each class as a separate entity and use it directly?
How to structure classes in a large codebase
code organization