You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
motief/.mindmodel/patterns/module-singletons.md

41 lines
1.2 KiB

---
title: Module Singletons Pattern
category: patterns
---
# Module Singletons Pattern
## Rules
- Module-level singletons (e.g., db = MotionDatabase()) are acceptable but should be created carefully:
- Avoid expensive initialization at import time.
- Provide a way to construct with a test DB path or to reinitialize in tests.
- If a singleton holds resources (DB connections, sessions), ensure safe shutdown on program exit.
## Examples
### database.py - Safe class initialization
```python
class MotionDatabase:
def __init__(self, db_path: str = config.DATABASE_PATH):
self.db_path = db_path
# If duckdb is not available, operate in lightweight file-backed mode
self._file_mode = duckdb is None
self._init_database()
```
### similarity/lookup.py - Local instances
```python
db = MotionDatabase(db_path=db_path) if db_path else MotionDatabase()
if hasattr(db, "get_cached_similarities"):
rows = db.get_cached_similarities(...)
```
## Anti-Patterns
### Bad: Heavy initialization at import time
**Problem**: Creating connections and performing heavy schema migrations during import.
**Remediation**: Move heavy init to an explicit initialize() method and keep import fast.