website refactor
This commit is contained in:
36
apps/website/lib/contracts/view-models/ViewModel.ts
Normal file
36
apps/website/lib/contracts/view-models/ViewModel.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* ViewModelBase contract
|
||||
*
|
||||
* Base class for all ViewModels.
|
||||
*
|
||||
* Based on VIEW_MODELS.md:
|
||||
* - Client-only classes
|
||||
* - Fully prepared UI state
|
||||
* - Never serialized
|
||||
* - Never passed to Templates
|
||||
* - Compose Display Objects for reusable formatting
|
||||
* - Expose UI-specific computed properties
|
||||
*
|
||||
* Based on WEBSITE_CONTRACT.md:
|
||||
* - ViewModels are client-only
|
||||
* - Must not expose methods that return Page DTO or API DTO
|
||||
*
|
||||
* Architecture Flow:
|
||||
* 1. PageQuery returns Page DTO (server)
|
||||
* 2. Presenter transforms Page DTO → ViewModel (client)
|
||||
* 3. Presenter transforms ViewModel → ViewData (client)
|
||||
* 4. Template receives ViewData only
|
||||
*
|
||||
* ViewModels provide UI state and helpers.
|
||||
* Presenters handle the transformation to ViewData.
|
||||
*/
|
||||
|
||||
export abstract class ViewModel {
|
||||
/**
|
||||
* Optional: Validate the ViewModel state
|
||||
*
|
||||
* Can be used to ensure the ViewModel is in a valid state
|
||||
* before a Presenter converts it to ViewData.
|
||||
*/
|
||||
validate?(): boolean;
|
||||
}
|
||||
Reference in New Issue
Block a user