[Draft]iOS.Architecture.16.Truth-information-flow-and-clear-responsibilities-immutability
Concept: Truth, Information Flow, Clear Responsibilities and Immutability
1. Truth
1.1 Single Source of Truth
单一的事实/真想来源
Ref[2] Ref[3]
"One core principle that is good to keep in mind when modelling various states is to try to stick to
a “single source of truth” as much as possible. One easy wayto look at this is that you should never
need to check for multiple conditions to determine what state you are in." Ref[2]
1.2 Truth vs
Ref[1]
2. Information Flow (Data Flow)
3. Clear Responsibilities
4. Immutability
google "immutable object in objective-c"
4.0 Mutable vs Immutable Object
4.1 Why immutable object?
Value Object
“In computer science, a value object is a small object that represents a simple entity
whose equality is not based on identity: i.e. two value objects are equal when they
have the same value, not necessarily being the same object.
Value objects should be immutable: this is required for the implicit contract that
two value objects created equal, should remain equal. It is also useful for value objects
to be immutable, as client code cannot put the value object in an invalid state or
introduce buggy behaviour after instantiation.” Ref[9]
Value Object and Mantle
"For an Objective-C class to be used as a value object, it needs to be immutable,
support value equality, implement proper hashing, and support NSCopying.
Mantle provides the latter three just by subclassing MTLModel
. "
4.2 Immutability and Builder Pattern
Ref[4] Ref[5] Ref[8]
Too many parameters in initializer method
4.3 Builder Pattern in Objective-C and Swift
Objective-C Version
http://www.cnblogs.com/cwgk/p/9013260.html
Swift Version
Todo
4.4 Code Generation (DSL, ruby)
Ref[10]
4.5 Code Generation (remodel)
Ref[11] Ref[12]
Remodel Plugin
https://github.com/facebook/remodel/blob/master/PLUGINS.md
4.6 Code Generation (plank)
Ref[13]
4.7 Consistency
Ref[14]
Reference
1. Advanced iOS Application Architecture and Patterns
http://asciiwwdc.com/2014/sessions/229
2. Modelling state in Swift
https://medium.com/@johnsundell/modelling-state-in-swift-3751a4acb8f3
Rules:
A single source of truth
Making states exclusive
Rendering reactively
Handling state changes
Extracting information
3. Single source of truth
https://en.wikipedia.org/wiki/Single_source_of_truth
4. Immutability and Builder Pattern
http://kean.github.io/post/immutability-and-builder-pattern
- objc.io: Value Objects
- Wikipedia: Builder Pattern
- Wikipedia: Immutable Objects
- Concepts in Objective-C Programming: Object Mutability
5. Value Objects (Read Again)
https://www.objc.io/issues/7-foundation/value-objects/
6. Mutability, aliasing, and the caches you didn't know you had
https://garbagecollective.quora.com/Mutability-aliasing-and-the-caches-you-didnt-know-you-had
7. Boundaries (To Read)
A talk by Gary Bernhardt from SCNA 2012
https://www.destroyallsoftware.com/talks/boundaries
8. Improving Immutable Object Initialization in Objective-C
http://holko.pl/2015/05/12/immutable-object-initialization/
9. Simplifying Objective-C Value Objects with Mantle and the Builder Pattern (AAAA+)
https://spin.atomicobject.com/2015/11/02/objective-c-value-objects-mantle/
10. Objective-C Value Objects: Code Generation
https://spin.atomicobject.com/2015/12/16/objective-c-value-objects-code-generation/
11. Building and managing iOS model objects with Remodel
https://code.facebook.com/posts/1154141864616569/building-and-managing-ios-model-objects-with-remodel/
12. remodel
https://github.com/facebook/remodel
Remodel is a tool that helps iOS and OS X developers avoid repetitive code by generating Objective-C
models that support coding, value comparison, and immutability.
13. plank
A tool for generating immutable model objects https://pinterest.github.io/plank/
https://github.com/pinterest/plank/
https://github.com/plivesey/ConsistencyManager-iOS
15. iOS响应式架构
http://blog.mrriddler.com/2017/06/28/iOS响应式架构/
16. Single Source of Truth Principal in Software Development (Android)
https://www.youtube.com/watch?v=Ex9IT1bq0PQ
https://codingwithmitch.com/courses/android-local-database-cache-rest-api/demo/
In this course you'll learn how to build a local database cache with SQLite and Room.
The cache retrieves data from a REST API using Retrofit2. Architecture is MVVM.
17. Difference between Single Source Of Truth and Single Responsibility Principle?
https://softwareengineering.stackexchange.com/questions/284874/difference-between-single-source-of-truth-and-single-responsibility-principle
18. Understanding One Source of Truth for Analytics
https://blogs.workday.com/understanding-one-source-truth-analytics/
19. The Single Source of Truth
https://blog.buckets.co/the-single-source-of-truth-430b61d10e19
20. Why Single Source of Truth Data Systems Kill Team Collaboration
https://unito.io/blog/a-single-source-of-truth-data-system-kills-team-collaboration-heres-why/
21. Single Source of Truth
https://www.dragon1.com/concepts/single-source-of-truth
22. Single Source of Truth…and Why it Matters
https://medium.com/@elisavaccaro/single-source-of-truth-and-why-it-matters-a68e28b8c175
23. 应用架构指南
https://developer.android.com/jetpack/docs/guide
[Draft]iOS.Architecture.16.Truth-information-flow-and-clear-responsibilities-immutability的更多相关文章
- Risk Adaptive Information Flow Based Access Control
Systems and methods are provided to manage risk associated with access to information within a given ...
- iOS Architecture Patterns
By Bohdan Orlov on 21 Mar 2016 - 0 Comments iOS FYI: Slides from my presentation at NSLondon are ava ...
- iOS根据16进制的色号来设置颜色,适合封装工具类
iOS中有时候UI给的一个色号就像 #54e1b7 这个,而我们一般设置颜色都是根据RBG来设置的,所以这里需要把这个16进制的色号转为RGB值,这里我们就使用一下的方法来调用设置颜色. + (UIC ...
- iOS Architecture和Valid architectures
目前ios的指令集有以下几种: 1,armv6,支持的机器iPhone,iPhone2,iPhone3G及对应的iTouch 2,armv7,支持的机器iPhone4,iPhone4S 3,armv7 ...
- iOS Architecture
目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...
- [iOS]把16进制(#871f78)颜色转换UIColor
// // ViewController.m // text // // Created by 李东旭 on 16/1/22. // Copyright © 2016年 李东旭. All rights ...
- 【转】iOS中16进制转10进制
原文网址:http://www.voidcn.com/blog/u012198553/article/p-4976772.html /// 将十六进制的字符串转化为NSData - (NSData ) ...
- iOS开发-16进制颜色转换
项目中经常会用到颜色转换,有的是通过十六进制转成数字转颜色,想简单的点直接通过字符串转一下,简单扩展了一下分类UIColor,代码如下: +(UIColor *)colorWithHex:(NSStr ...
- IOS 颜色 16进制 转换
#define RGB(r,g,b) ([UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]) #define HEXTO ...
随机推荐
- phoenix 报错:type org.apache.phoenix.schema.types.PhoenixArray is not supported
今天用phoenix报如下错误: 主要原因: hbase的表中某字段类型是array,phoenix目前不支持此类型 解决方法: 复制替换phoenix包的cursor文件 # Copyright 2 ...
- consul的安装与使用
consul官网下载地址 https://www.consul.io/downloads.html 下载后解压 在bat文件中增加如下内容,就可以双击启动了 start consul agent -d ...
- mongo 数据查询
基本查询 方法find():查询 db.集合名称.find({条件文档}) 方法findOne():查询,只返回第一个 db.集合名称.findOne({条件文档}) 方法pretty():将结果格式 ...
- iOS解决cell重用问题
在写sina 微博界面的过程中使用到了cell,那么就是在cell上添加一些控件,但是由于每条微博的内容都是不同的,所以在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用 ...
- java序列化和反序列化中的serialVersionUID有啥用
1.什么是序列化和反序列化 序列化就是将java对象转成字节序列的过程:反序列化就是将字节序列转成java对象的过程. java中,序列化的目的一种是需要将对象保存到硬盘上,一种是对象需要在网络中传 ...
- 基于SSM的CRUD项目的详解
创一个maven工程 创建web的目录和web.xml------------右击项目,build projet--->configure project---->Project fac ...
- 阿里云安装mysql后查看不到初始密码的解决办法
在阿里云安装mysql后用grep 'A temporary password' /var/log/mysqld.log命令查看MySQL初始密码,毛线都没有看到,然后直接到/var/log/mysq ...
- JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法
今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法, 这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用! 例如AsyncTask,执行玩doInBac ...
- ArcGIS 要素类平移工具-arcgis案例实习教程
ArcGIS 要素类平移工具-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对整个要素类,按指定偏移距离,进行整体平移. 优点:使用 ...
- png 变透明
using System.Drawing Image image; image = Image.FromFile("d:\\1.png"); Bitmap bitma ...