美文网首页
访问控制和代码组织

访问控制和代码组织

作者: 小橘子成长记 | 来源:发表于2018-07-11 11:44 被阅读12次

swift类型的属性,方法初始化方法可以是公开的,甚至是一些内部类型。这些元素被称为代码的接口。

随着代码复杂性的增加,在软件设计方面,控制这些接口成为一个重要的问题。你可能希望给你的代码创建一个担当“助手”的方法或属性,这个“助手”可以追踪到内部状态,但是你又不希望这个“助手”成为你代码的一部分。

swift通过一个叫“访问控制”的重要区域解决这个问题。这个区域可以让你控制代码中可见的接口。访问控制让你,还有库的作者,向用户隐藏代码实现的复杂性。有时隐藏内部状态,好像没有变化一样。你的公共接口应该始终保持这样。防止直接访问类的内部状态,并维持不变是一种基本的软件设计理念,他被称作封装。在本章节你会了解什么是访问控制,如何解决和应用他。

由于缺乏访问控制而引起的问题

想象一下,某个时间,你写了一个银行的库,这个库将帮助你的客户(其他银行)编写他们的银行软件。

在playground中,写一个协议

/// A protocol describing core functionality for an account
protocol Account {
  associatedtype Currency
  var balance: Currency { get }
  func deposit(amount: Currency)
  func withdraw(amount: Currency)
}

这个代码是创建一个Account协议,协议描述任何帐户应该具有存款、取款和检查资金余额的功能。

现在添加一个符合标准的类型,代码如下:

typealias Dollars = Double
/// A U.S. Dollar based "basic" account.
class BasicAccount: Account {
  var balance: Dollars = 0.0
  func dposit(amount: Dollars) {
    balance += amount
  }
  func withdraw(amount: Dollars) {
      if amount <= balance {
        balance -= amount
       } else {
        balance = 0 
        }
      } 
    }

BasicAccount遵循协议Account,通过对balance进行相加,相减,实现了deposit(amount:) 和withdraw(amount:) 方法,Dollars类型,是double的别名。

虽然这个代码很简单,但是你还是会发现一个问题,balance这个属性在Account协议中是只读的,换句话说它只定义了get。然鹅,BasicAccount要求balance是可变的,当资金增加或减少的时候,去更新balance。

啥也不能阻挡别的代码直接修改balance的值。

// 创建一个新的账号 account
let account = BasicAccount()
// 增加或减少资金
account.deposit(amount: 10.00)
account.withdraw(amount: 5.00)
// ... 或者做一些自己想做的事情!
account.balance = 1000000.00

即使你很谨慎的设计Account协议,只让他减少或增加资金,但是BasicAccount的实现却可以直接修改balance的值,任何代码都可以。

幸运的是你可以使用访问控制,限制代码对其他类型、文件甚至软件模块可见的范围。

相关文章

  • 访问控制和代码组织

    swift类型的属性,方法初始化方法可以是公开的,甚至是一些内部类型。这些元素被称为代码的接口。 随着代码复杂性的...

  • Swift 访问权限问题

    访问控制 访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别 Swift中访问控制模型基于模块和源文件,...

  • Swift编程二十七(访问控制)

    案例代码下载 访问控制 访问控制限制从其他源文件和模块中的代码访问部分代码。此功能使可以隐藏代码的实现细节,并指定...

  • 25 Access Control 访问控制

    访问控制限制从其他源文件和模块中的代码访问代码的部分。该特性使您能够隐藏代码的实现细节,并指定可以访问和使用代码的...

  • Swift学习笔记二十之访问控制

    1、访问控制:swift中可以对各种类型进行访问控制,从而隐藏代码的实现细节,为其他人访问代码提供接口 //访问控...

  • Swift3.x - Open、Public、 Internal

    访问控制(Access Control)访问控制将限制其他源文件或者组件的代码访问你的代买块!这将可以实现隐藏代码...

  • Swift3.0的Access Control(访问控制)

    访问控制能够限制你的代码从其他文件和模块中访问,这个特性能够让你隐藏你具体的实现,并且也可以让代码能够访问和使用。...

  • Swift 访问控制权限

    Swift 访问控制权限 访问控制可以限定其它源文件或模块对你代码的访问。这个特性可以让你隐藏代码的实现细节,并且...

  • 三:身份与访问管理

    1 控制对资产的访问 资产可以包括信息、系统、设备、设施和人员信息: 组织的信息包括与其相关的所有数据,访问控制试...

  • MQTT MOSCA ACL

    MQTT ACL 1、ACL 访问控制列表a、用户控制b、发布控制c、订阅控制 客户端代码 自定义访问控制列表 ...

网友评论

      本文标题:访问控制和代码组织

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