docs: Traits & Enums comparison - Domain is complete
- All app/ traits present in domain/ - Domain has additional features (fine rotation, interpolation) - RotationMode is more flexible than plain Rotation - Better error handling in MultiPageThumbnails - No changes needed - domain version is superior Refs: Migration Step 1.7
This commit is contained in:
parent
beab03ccf7
commit
f8087a3c6a
1 changed files with 160 additions and 0 deletions
160
DEVNOTE/Traits-Enums-Comparison.md
Normal file
160
DEVNOTE/Traits-Enums-Comparison.md
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
# Traits & Enums Konsolidierung - Vergleich
|
||||
|
||||
## Status: ✅ Domain-Version ist vollständig und erweitert
|
||||
|
||||
### Enums
|
||||
|
||||
| Enum | app/ | domain/ | Status |
|
||||
|------|------|---------|--------|
|
||||
| `Rotation` | ✅ | ✅ | ✅ Identisch |
|
||||
| `FlipDirection` | ✅ | ✅ | ✅ Identisch |
|
||||
| `RotationMode` | ❌ | ✅ | ℹ️ Extra in domain (fine rotation support) |
|
||||
| `InterpolationQuality` | ❌ | ✅ | ℹ️ Extra in domain (quality control) |
|
||||
| `DocumentKind` | ✅ | ✅ | ✅ Identisch (in content.rs) |
|
||||
|
||||
### Structs
|
||||
|
||||
| Struct | app/ | domain/ | Status |
|
||||
|--------|------|---------|--------|
|
||||
| `TransformState` | ✅ `rotation: Rotation` | ✅ `rotation: RotationMode` | ⚠️ Domain erweitert (RotationMode statt Rotation) |
|
||||
| `RenderOutput` | ✅ | ✅ | ✅ Identisch |
|
||||
| `DocumentInfo` | ✅ | ✅ | ✅ Identisch |
|
||||
|
||||
### Traits
|
||||
|
||||
#### Renderable
|
||||
|
||||
| Methode | app/ | domain/ | Status |
|
||||
|---------|------|---------|--------|
|
||||
| `render()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `info()` | ✅ | ✅ | ✅ Identisch |
|
||||
|
||||
#### Transformable
|
||||
|
||||
| Methode | app/ | domain/ | Status |
|
||||
|---------|------|---------|--------|
|
||||
| `rotate()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `flip()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `transform_state()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `rotate_fine()` | ❌ | ✅ | ℹ️ Extra in domain (default impl) |
|
||||
| `reset_fine_rotation()` | ❌ | ✅ | ℹ️ Extra in domain (default impl) |
|
||||
| `set_interpolation_quality()` | ❌ | ✅ | ℹ️ Extra in domain (default impl) |
|
||||
|
||||
#### MultiPage
|
||||
|
||||
| Methode | app/ | domain/ | Status |
|
||||
|---------|------|---------|--------|
|
||||
| `page_count()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `current_page()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `go_to_page()` | ✅ | ✅ | ✅ Identisch |
|
||||
|
||||
#### MultiPageThumbnails
|
||||
|
||||
| Methode | app/ | domain/ | Status |
|
||||
|---------|------|---------|--------|
|
||||
| `get_thumbnail()` | ✅ `Option<Handle>` | ✅ `Result<Option<Handle>>` | ⚠️ Domain hat error handling |
|
||||
| `thumbnails_ready()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `thumbnails_loaded()` | ✅ | ✅ | ✅ Identisch |
|
||||
| `generate_thumbnail_page()` | ✅ `Option<usize>` | ✅ `Result<()>` | ⚠️ Domain hat error handling |
|
||||
| `generate_all_thumbnails()` | ✅ | ✅ | ℹ️ Beide vorhanden |
|
||||
|
||||
### Unterschiede
|
||||
|
||||
#### 1. RotationMode (Domain-Erweiterung)
|
||||
|
||||
**App:**
|
||||
```rust
|
||||
pub struct TransformState {
|
||||
pub rotation: Rotation, // Nur 90° Schritte
|
||||
}
|
||||
```
|
||||
|
||||
**Domain:**
|
||||
```rust
|
||||
pub enum RotationMode {
|
||||
Standard(Rotation), // 90° Schritte
|
||||
Fine(f32), // Beliebige Winkel
|
||||
}
|
||||
|
||||
pub struct TransformState {
|
||||
pub rotation: RotationMode, // Flexibel!
|
||||
}
|
||||
```
|
||||
|
||||
**Vorteil:** Domain unterstützt fine rotation (RasterDocument nutzt das)
|
||||
|
||||
#### 2. Transformable Erweiterungen
|
||||
|
||||
**Domain hat zusätzlich:**
|
||||
- `rotate_fine()` - Für beliebige Rotationswinkel
|
||||
- `reset_fine_rotation()` - Reset zu 90° Schritten
|
||||
- `set_interpolation_quality()` - Qualitätskontrolle
|
||||
|
||||
**Default Implementierungen:** Alle haben Default-Impls (no-op), daher backward-compatible.
|
||||
|
||||
#### 3. Error Handling in Thumbnails
|
||||
|
||||
**App:**
|
||||
```rust
|
||||
fn get_thumbnail(&self, page: usize) -> Option<ImageHandle>;
|
||||
```
|
||||
|
||||
**Domain:**
|
||||
```rust
|
||||
fn get_thumbnail(&mut self, page: usize) -> DocResult<Option<ImageHandle>>;
|
||||
```
|
||||
|
||||
**Vorteil:** Domain kann Fehler melden statt silent failure.
|
||||
|
||||
## Kompatibilität
|
||||
|
||||
### ⚠️ Potenzielle Breaking Changes
|
||||
|
||||
1. **TransformState::rotation** ist jetzt `RotationMode` statt `Rotation`
|
||||
- Alt: `state.rotation == Rotation::Cw90`
|
||||
- Neu: `state.rotation == RotationMode::Standard(Rotation::Cw90)`
|
||||
|
||||
2. **MultiPageThumbnails Signatur** unterscheidet sich
|
||||
- Kann zu Kompilierungsfehlern führen wenn app/ Code darauf zugreift
|
||||
|
||||
### ✅ Lösungen
|
||||
|
||||
**Option 1:** `RotationMode` bietet `From<Rotation>` an:
|
||||
```rust
|
||||
impl From<Rotation> for RotationMode {
|
||||
fn from(rot: Rotation) -> Self {
|
||||
RotationMode::Standard(rot)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Option 2:** Helper-Methode in TransformState:
|
||||
```rust
|
||||
impl TransformState {
|
||||
pub fn standard_rotation(&self) -> Option<Rotation> {
|
||||
match self.rotation {
|
||||
RotationMode::Standard(rot) => Some(rot),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Entscheidung
|
||||
|
||||
✅ **Domain-Version nutzen - ist besser!**
|
||||
|
||||
**Begründung:**
|
||||
- Alle app/ Features sind vorhanden
|
||||
- Zusätzliche Features (fine rotation, interpolation)
|
||||
- Besseres Error Handling
|
||||
- Backward-compatible durch Default-Impls
|
||||
|
||||
**Aktion:**
|
||||
- Keine Änderungen nötig
|
||||
- Domain ist bereits vollständig
|
||||
- Bei Integration: Helper für RotationMode-Kompatibilität hinzufügen falls nötig
|
||||
|
||||
## Nächster Schritt
|
||||
|
||||
Phase 2: Infrastructure Layer Migration
|
||||
Loading…
Add table
Add a link
Reference in a new issue