| name | architecture |
| description | MVVM pattern, Clean Architecture, Repository pattern, dependency injection, SOLID principles. |
| version | 2.0.0 |
| sasmp_version | 1.3.0 |
| bonded_agent | 06-architecture |
| bond_type | PRIMARY_BOND |
| atomic | true |
| single_responsibility | App architecture & design patterns |
| parameters | {"pattern":{"type":"string","enum":["mvvm","clean_architecture","repository","di"],"required":false},"complexity":{"type":"string","enum":["simple","medium","complex"],"default":"medium"}} |
| retry | {"max_attempts":2,"backoff":"exponential","on_failure":"suggest_simpler_pattern"} |
| logging | {"level":"info","include":["pattern_type","layer","dependencies"]} |
App Architecture Skill
Quick Start
MVVM Pattern
@HiltViewModel
class UserViewModel @Inject constructor(
private val repository: UserRepository
) : ViewModel() {
private val _state = MutableLiveData<UiState>()
val state: LiveData<UiState> = _state
fun loadUser(id: Int) {
viewModelScope.launch {
_state.value = repository.getUser(id)
}
}
}
Repository Pattern
interface UserRepository {
suspend fun getUser(id: Int): User
}
class UserRepositoryImpl(
private val dao: UserDao,
private val api: UserApi
) : UserRepository {
override suspend fun getUser(id: Int): User {
return dao.getUser(id) ?: api.fetchUser(id)
}
}
Dependency Injection (Hilt)
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Provides
fun provideUserRepository(dao: , api: ): UserRepository {
UserRepositoryImpl(dao, api)
}
}