So we have this huge (is 11000 lines huge?) mainmodule.cpp source file in our project and every time I have to touch it I cringe.
As this file is so central and large, it keeps accumulating more and more code and I can’t think of a good way to make it actually start to shrink.
The file is used and actively changed in several (> 10) maintenance versions of our product and so it is really hard to refactor it. If I were to “simply” split it up, say for a start, into 3 files, then merging back changes from maintenance versions will become a nightmare. And also if you split up a file with such a long and rich history, tracking and checking old changes in the SCC
history suddenly becomes a lot harder.
The file basically contains the “main class” (main internal work dispatching and coordination) of our program, so every time a feature is added, it also affects this file and every time it grows. 🙁
What would you do in this situation? Any ideas on how to move new features to a separate source file without messing up the SCC
workflow?
(Note on the tools: We use C++ with Visual Studio
; We use AccuRev
as SCC
but I think the type of SCC
doesn’t really matter here; We use Araxis Merge
to do actual comparison and merging of files)
34 Answers
Merging will not be such a big nightmare as it will be when you’ll get 30000 LOC file in the future. So:
- Stop adding more code to that file.
- Split it.
If you can’t just stop coding during refactoring process, you could leave this big file as is for a while at least without adding more code to it: since it contains one “main class” you could inherit from it and keep inherited class(es) with overloaded functions in several new small and well designed files.