【问题标题】:iOS Cross Cutting ConcernsiOS 横切关注点
【发布时间】:2014-08-09 00:12:55
【问题描述】:

我正在开发一个 Swift 应用程序,它允许用户保存有关其个人资料的各种设置。在我的代码中,有时了解这些设置/首选项对于应用程序的业务逻辑很重要。其中之一是用户工作的地方(他们的工作,(它是 sqllite 数据库中的一行,以 ID 作为主键)。允许用户在任何给定时间在应用程序中选择一个(并且只有一个) . 把它想象成个人资料 - 他们可以从事许多工作,但只能选择一个。

以下是了解工作场所ID 配置文件很重要的场景:

  1. 在我的 sqllite 数据库中,根据当前选择的工作 ID(所以不是数据库中的 ID,而是他们当前选择的 ID)检索工作/班次信息。我将其传递到我的查询中。
  2. 在 NSDate 扩展函数中,当我去确定一些关于他们的开始日期的事情时,我需要检索他们当前选择的配置文件,并将其用于计算。
  3. 在特定视图模型中,当我想显示/隐藏某些字段时。
  4. 在警报视图中显示与其当前工作场所相关的内容。

现在我认为快速而肮脏的方法是在实用程序类中为您的 nsuserdefaults 创建一个包装类。当然,您的所有信息都存储在 sqllite 中,但您当前选择的应用程序偏好设置在 nsuserdefaults 中,因为我可以更改它(它会更改)。这将与我的其他横切关注点(例如日志记录/错误处理)平行,我可以在其中使用类似的实用程序类来完成我的所有工作。

我可能会从应用程序的每一层调用此帮助程序/实用程序类这一事实似乎是一个典型的危险信号,您不会这样做。无论是日志记录,还是获取信息的用户服务。

我很想知道在这种情况下其他人在做什么。当您需要整个应用程序中的 nsuserdefaults 时,答案是“谁在乎,只需创建一个实用程序类并在需要的地方调用它”?或者是否有其他人在精心设计的 iOS 应用程序中遵循的最佳实践?我知道 AOP 是人们倾向于推荐的东西。这在 iOS 中占有一席之地吗?

非常感谢stackoverflow :)

【问题讨论】:

  • 为什么需要一个包装器或一个实用程序类来使用整个应用程序中的 NSUserDefaults?您可以在每个类中使用 NSUserDefaults,而无需任何类型的包装器。
  • 我想让所有的东西都用一行代码来获取/设置,并且函数的命名更符合我的应用程序(即我设想执行 UserSettings.GetCurrentWorkplace() 或 UserSettings.CurrentWorkplace等)

标签: ios architecture swift ios8 cross-cutting-concerns


【解决方案1】:

允许用户在任何给定时间在应用程序中选择一个(且仅一个)。

这告诉我你想创建一个单例类。每次您想更改配置文件时,您都会点击单例类并设置它。该类封装了所有逻辑以获取/设置您需要的任何内容,以及访问器函数。这就是我多年来在我的 ObjC 代码中所做的事情,它对我很有帮助。它非常容易调试,其余代码无需了解配置文件管理(除非是您选择配置文件的 UI 部分)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2011-08-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多