This module defines the core interfaces for the menu layer in the DTS Viewer component, establishing a contract between the view and view model following the MVVM (Model-View-ViewModel) pattern. It extends base abstractions (IBaseView, IBaseViewModel) to provide a minimal, focused interface hierarchy specifically for menu-related UI concerns—enabling separation of concerns, testability, and decoupled UI implementation while maintaining consistency with the broader codebase’s architectural patterns.
2. Public Interface
IMenuView Signature:public interface IMenuView : IBaseView Behavior: Represents the view layer for menu UI. It inherits from IBaseView, implying it adheres to the base view contract (e.g., lifecycle, binding context), but contains no additional members beyond inheritance. Its purpose is to serve as a typed marker interface for menu-specific views.
IMenuViewModel Signature:public interface IMenuViewModel : IBaseViewModel Behavior: Represents the view model for menu logic. It exposes a single read-only property View of type IMenuView, providing access to the associated view instance. This enables the view model to interact with or query the view when necessary (e.g., for coordination, state synchronization, or view-specific operations), while still maintaining separation of concerns.
3. Invariants
IMenuView must be implemented by any concrete class serving as the menu UI view.
IMenuViewModel implementations must provide a non-null View property referencing an instance of a type that implements IMenuView.
The View property in IMenuViewModel is expected to be set during initialization and remain stable for the lifetime of the view model (though not explicitly enforced by the interface).
Both interfaces extend IBaseView and IBaseViewModel respectively, inheriting all invariants and contracts defined in those base interfaces (not shown here, but assumed to be part of the DTS.Common.Base namespace).
4. Dependencies
Depends on:
DTS.Common.Base (specifically IBaseView and IBaseViewModel)
Depended on by (inferred):
Concrete implementations of IMenuView (e.g., WPF/WinForms/Xamarin UI controls)
Concrete implementations of IMenuViewModel (e.g., menu logic classes)
Framework or DI containers that resolve menu-related view/view model pairs
Higher-level components (e.g., shell or navigation services) that coordinate menu UI with other parts of the viewer
5. Gotchas
The interfaces are intentionally minimal—IMenuView has no members beyond inheritance, and IMenuViewModel only exposes the View property. Developers should not expect built-in command, data binding, or event handling contracts here; those would be defined in derived interfaces or concrete classes.
The View property in IMenuViewModel is not initialized by the interface itself; implementations must ensure it is set (likely via constructor or property injection) to avoid NullReferenceException at runtime.
No guidance is provided on how view/view model pairing is established (e.g., via DI, factory, or manual wiring), which may lead to inconsistency across implementations.