美文网首页
iOS 开发面向对象设计的六大设计原则 - 单一职责(Singl

iOS 开发面向对象设计的六大设计原则 - 单一职责(Singl

作者: DingGa | 来源:发表于2023-05-15 23:46 被阅读0次

单一职责原则(Single Responsibility Principle, SRP)是面向对象设计的 SOLID 原则中的第一个,意指一个类或者模块只应该负责一项职责。这样可以让代码更好地组织,更易于理解和维护。

在 iOS 开发中,可以通过以下几个实践来遵循单一职责原则:

拆分视图控制器 (View Controllers):经常会看到一个视图控制器负责过多的任务,比如获取数据、设置视图、处理用户输入等。可以将这些职责拆分到其他类中,例如创建一个专门获取数据的类(DataProvider),一个处理用户输入的类(InputHandler),等等。

使用扩展 (Extensions):Swift 提供了扩展机制,可以将一个类或者结构体的功能拆分到不同的扩展中。每个扩展负责一个特定的功能,这样就能遵循单一职责原则。

使用协议 (Protocols):协议可以定义一组关联的方法、属性,然后由具体的类、结构体或者枚举去实现。这样可以将复杂的功能拆分成一系列小的、独立的部分。

下面是一个 ProfileViewController 未遵守单一职责原则的示例。在这个示例中,ProfileViewController 负责获取用户数据、配置和显示视图,以及响应用户交互。

class ProfileViewController: UIViewController {
    var profile: Profile?

    override func viewDidLoad() {
        super.viewDidLoad()

        loadProfile()
    }

    private func loadProfile() {
        // Fetch profile data from server or local database
        // ...

        // Update views with profile data
        // ...
    }

    @IBAction func editProfileButtonTapped(_ sender: Any) {
        // Navigate to edit profile screen
        // ...
    }

    private func updateProfile(_ profile: Profile) {
        // Update profile data on server or local database
        // ...
    }
}

在这个示例中,ProfileViewController 承担了太多的职责。这可能会导致 ProfileViewController 代码量过大,难以理解和维护。同时,如果需要修改获取用户数据的方式、显示数据的方式或者处理用户交互的方式,都可能需要修改 ProfileViewController 的代码,这可能会引入 bug 或者影响其他功能。遵守单一职责原则可以帮助我们避免这些问题。

我们可以将这些责任分离,让 ProfileViewController 只负责配置和显示视图,创建一个 ProfileManager 来负责获取和处理用户数据,以及一个 ProfileRouter 来负责处理用户交互。
ProfileManager 负责获取和更新用户资料,ProfileRouter 负责处理导航(用户交互),ProfileViewController 负责配置和显示视图。这样每个类都只有一个职责,符合单一职责原则。

// ProfileManager 负责获取和处理用户数据
class ProfileManager {
    func fetchProfile(completion: @escaping (Profile?) -> Void) {
        // Fetch profile data from server or local database
        // ...
    }

    func updateProfile(_ profile: Profile, completion: @escaping (Bool) -> Void) {
        // Update profile data on server or local database
        // ...
    }
}

// ProfileRouter 负责处理用户交互
class ProfileRouter {
    weak var viewController: UIViewController?

    func navigateToEditProfile(_ profile: Profile) {
        // Navigate to edit profile screen
        // ...
    }
}

// ProfileViewController 只负责配置和显示视图
class ProfileViewController: UIViewController {
    var profileManager = ProfileManager()
    var profileRouter = ProfileRouter()
    var profile: Profile?

    override func viewDidLoad() {
        super.viewDidLoad()

        profileRouter.viewController = self

        loadProfile()
    }

    private func loadProfile() {
        profileManager.fetchProfile { [weak self] profile in
            self?.profile = profile

            // Update views with profile data
            // ...
        }
    }

    @IBAction func editProfileButtonTapped(_ sender: Any) {
        if let profile = profile {
            profileRouter.navigateToEditProfile(profile)
        }
    }
}

相关文章

  • JAVA设计模式

    面向对象设计的六大设计原则 1、单一职责原则(Single Responsibility Principle, S...

  • 设计模式

    设计原则: 面向对象需要遵循的六大原则: 单一职责原则(SingleResponsibilityPrinciple...

  • 面向对象的六大原则

    设计模式基础 面向对象的六大原则 单一职责原则(Single Responsibility Principle, ...

  • 设计模式总结

    一、面向对象的设计六大原则 单一职责原则(Single Responsibility Principle, SRP...

  • 面向对象六大原则

    设计模式的六大原则:(面向对象的六大原则) 一、单一职责原则:Single Responsibility Prin...

  • 设计模式六大原则

    设计模式六大原则 一、面向对象设计六大原则 面向对象的关键在于封装,封装好了才能很好的复用,达到单一职责和开放扩展...

  • 《Android源码设计模式解析与实战》读书笔记(一)

    面向对象的六大原则《Android源码设计模式解析与实战》PDF资料下载 一、单一职责原则 单一职责原则的英文名称...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • iOS 六大设计原则

    iOS六大设计原则:单一职责原则(Single Responsibility Principle)、开闭原则(Op...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

网友评论

      本文标题:iOS 开发面向对象设计的六大设计原则 - 单一职责(Singl

      本文链接:https://www.haomeiwen.com/subject/yipvsdtx.html