一、什麼是Clean Architecture
Clean Architecture,即「乾淨架構」,是由 Robert C. Martin 等人提出的一套軟件開發架構思想。它旨在解決軟件開發中常見的耦合、依賴問題,使得軟件系統更容易維護和擴展。
核心原則是將軟件系統分為各層次,每個層次具有清晰的職責分離,從而實現可替換性、可測試性和可擴展性。整個架構遵循依賴倒轉原則(Dependency Inversion Principle)。
同時,為了保證代碼的可讀性和簡潔性,在實現過程中要儘可能地遵循 SOLID 原則(Single Responsibility、Open-Closed、Liskov Substitution、Interface Segregation、Dependency Inversion)。
二、Clean Architecture的核心思想
1、架構的分層
package com.example.cleanarchitecture
interface UserRepository {
fun getUser(userId: Int): User
fun saveUser(user: User)
}
interface UserPresenter {
fun getUser(userId: Int): UserViewModel
fun saveUser(userViewModel: UserViewModel)
}
class UserInteractor(
private val userRepository: UserRepository,
private val userPresenter: UserPresenter
) {
fun getUser(userId: Int) {
val user = userRepository.getUser(userId)
val userViewModel = UserViewModel(
user.id,
user.name,
user.avatarUrl
)
userPresenter.getUser(userViewModel)
}
fun saveUser(userViewModel: UserViewModel) {
val user = User(
userViewModel.id,
userViewModel.name,
userViewModel.avatarUrl
)
userRepository.saveUser(user)
}
}
2、層次之間的依賴關係
package com.example.cleanarchitecture
class UserController(
private val userInteractor: UserInteractor
) {
fun getUser(userId: Int): UserViewModel {
return userInteractor.getUser(userId)
}
fun saveUser(userViewModel: UserViewModel) {
userInteractor.saveUser(userViewModel)
}
}
3、數據流的單向性
package com.example.cleanarchitecture.data
@Entity(tableName = "user")
data class UserEntity(
@PrimaryKey val id: Int,
val name: String,
val avatarUrl: String
)
interface UserDao {
@Query("SELECT * FROM user WHERE id=:userId")
fun getUser(userId: Int): UserEntity
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun saveUser(userEntity: UserEntity)
}
class UserRepositoryImpl(
private val userDao: UserDao
) : UserRepository {
override fun getUser(userId: Int): User {
val userEntity = userDao.getUser(userId)
return User(
userEntity.id,
userEntity.name,
userEntity.avatarUrl
)
}
override fun saveUser(user: User) {
userDao.saveUser(
UserEntity(
user.id,
user.name,
user.avatarUrl
)
)
}
}
三、Clean Architecture的好處
1、可測試性
Clean Architecture的分層原則,使得各個模塊具有良好的職責分離和獨立性,從而可以更容易地進行單元測試、集成測試等等,保證代碼的穩定性和質量。
2、可維護性
Clean Architecture的依賴倒轉原則,使得整個架構更加靈活、可擴展。在需要改動某個模塊時,只需要關注該模塊的上下游依賴關係,而不需要對整個系統進行大的改動。從而節省了維護成本,提高了開發效率。
3、可替代性
Clean Architecture的分層原則,使得各個模塊具有良好的職責分離和獨立性。這就為模塊之間的替換提供了方便。對於某個模塊的實現,我們可以根據實際需求替換為其他更優秀的實現。這種方便性,也極大的增加了軟件系統的可維護性和可擴展性。
四、Clean Architecture的實踐建議
1、層次嚴謹
在實現Clean Architecture時,要保證各個模塊的職責分離、層次鮮明,不能出現跨層、混亂的現象。按照依賴倒置原則,各層次應該向下依賴,而不是向上污染。
2、業務無關性
在實現Clean Architecture時,要保證各個模塊的業務無關性。這樣可以讓整個系統具有更強的通用性和可重複利用性,從而提高軟件架構的質量。
3、編程規範
在實現Clean Architecture時,要保持代碼的可讀性和簡潔性,儘可能遵循 SOLID 原則。這樣可以讓代碼更加易於維護、擴展、重構。
五、結語
Clean Architecture是一套優秀的軟件開發架構思想,它具有良好的可測試性、可維護性、可替代性。在實現過程中,需要嚴格遵循架構原則、業務無關性、編程規範等,才能為軟件系統的發展提供更好的保障。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/247631.html