Gains:
0. dependency management. by good dependency (dependency brings in coupling) Management (interface-oriented, depend on dependency action, dependency injection, IOC, design pattern ), we can restrict the dependency between two modules/classes the least.
1. testability. Test code is about how your client uses your class. If it's easy to write (cover as your cases as possible), the design of the class is good.
2. debugability. LINQ is not good support...
3. Trace breakpoint can be further making use.
4. Tools
-- View C # class: Object Browser; // comment can help generating a metadata XML document for a assembly; Class View; There is way to collapse a class to see its intefrace only;
-- Find out why your solution keeps out of date: change a XML node in vs to enable further info output; debugview is a tool to better view debug info ??
5. Other
-- Everyone knows more on some aspect than others, while a sure thing is that: on some other aspects, you know less.
-- Metadata :??? For persistence and for reflection ??
6. external/internal beauty of code
-- External: Comments, design, etc everything you can see by viewing the source code.
-- Internal: performance, capacity, Security, Stability