Re‑engineering a Live Desktop App: How EasiNote Evolved Its Architecture
This article chronicles how a one‑person development team at Seewo built and continuously refactored their WPF‑based desktop suite—EasiShow, EasiMeeting, and EasiNote—by adopting MVVM, Prism, pre‑compilation, DAG startup, and other techniques to improve modularity and performance while the product kept evolving.
A One‑Person Team
The Seewo software suite started as a single‑person effort to create value‑added applications for interactive smart boards running Windows, leading to products like EasiShow, EasiMeeting, and EasiNote.
Getting on Track
Developers quickly adopted the MVVM pattern, which is well‑suited for data‑driven client UI development and helps decouple UI from business logic. Early versions of EasiNote migrated to an MVVM architecture.
What is EasiNote? It began as a whiteboard application and later became a comprehensive teaching tool.
Architecture Design
Pure MVVM alone cannot sustain a large application; it only separates UI from business logic. In 2014, Seewo introduced a proper software architecture based on the Prism framework, which extends MVVM with region management, event aggregation, and dependency injection via Unity or MEF.
While Prism improved modularity, it also increased startup time by nearly fourfold, revealing performance trade‑offs.
Evolution of Architecture
With the release of “Seewo Whiteboard 5” (formerly EasiNote 3), the team reduced reliance on Prism to improve performance, implementing many features themselves while still preserving essential decoupling.
The product also began exposing common components as NuGet packages, eventually accumulating over 66 internal components and around 100 public .NET packages.
New Ideas and Technologies Sprouting
Despite early performance issues, the modular architecture allowed the team to experiment with new concepts—such as AOP transparent proxies, multi‑process IPC, and a pre‑compile framework that moves dependency discovery to compile time, dramatically cutting startup latency.
Source Packages
To mitigate the impact of many assemblies on startup, source code from multiple NuGet packages was merged into a single assembly, improving launch speed.
SourceYard creates source code packages.
dotnet‑campus/SourceYard: a NuGet package that bundles source code.
Pre‑compile Framework
By compiling dependency discovery ahead of time, modules that adopt the pre‑compile framework see their startup time drop from hundreds of milliseconds to near zero.
Course pre‑compile framework presentation at Microsoft Tech & Ecosystem Conference 2018.
dotnet‑campus/SourceFusion: a Roslyn‑based pre‑compile framework for high‑performance .NET code.
DAG Startup Process
All startup code is modeled as tasks (synchronous or asynchronous) with explicit dependencies, forming a directed acyclic graph (DAG) that enables maximal parallel execution and easy bottleneck identification.
MSTestEnhancer
The team created MSTestEnhancer, a more intuitive and maintainable unit‑testing extension that focuses on contract‑style tests.
Stop struggling with naming—use MSTestEnhancer for contract‑only tests.
dotnet‑campus/MSTestEnhancer repository.
Dependency Tree
A custom dependency‑tree mechanism restricts injectable types during discovery, simplifying the DI API while still leveraging pre‑compilation to avoid runtime performance penalties. This feature is slated for open‑source release by the end of 2019.
Changing Engines While the Car Is Running
Continuous refactoring remains essential as Seewo’s software scale grows; the team emphasizes the ability to replace components on a live, evolving product—much like swapping an engine in a moving car.
Reference materials include articles on C# assembly count impact on startup performance, SourceYard, SourceFusion, and MSTestEnhancer.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
