zoukankan      html  css  js  c++  java
  • [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

    “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

    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)

    https://www.destroyallsoftware.com/talks/boundaries

    8. Improving Immutable Object Initialization in Objective-C

    http://holko.pl/2015/05/12/immutable-object-initialization/

    AHKBuilder

    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/

    14. ConsistencyManager-iOS

    https://github.com/plivesey/ConsistencyManager-iOS

    A library that manages consistency of immutable models https://plivesey.github.io/Consistenc…

    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

     

     
  • 相关阅读:
    常见协议基础知识总结--FTP协议
    DG增量恢复
    DG备库无法接受主库归档日志之密码文件
    Oracle密码概要文件,密码过期时间180天修改为3天,相关用户密码是否过期
    ORA-15025 搭建DG环境,restore controlfile报错,提示oracle无法使用ASM存储
    Deinstall卸载RAC之Oracle软件及数据库+GI集群软件
    增加临时表空间组Oracle11g单实例
    安装12C小问题及pdb表空间配置
    判断子表外键约束参数类型
    创建small表空间size32G报错ORA-01144
  • 原文地址:https://www.cnblogs.com/cwgk/p/9007000.html
Copyright © 2011-2022 走看看