Katana Guidelines

本文档收集了这些年来我们使用Katana定义的最佳实践和准则。

目标

指导方针

1.使用管理器封装逻辑

2.事件观察者

3.避免复杂的副作用

4.利用封装,模块化和可见性修改器

5.文件

6.项目文件结构

项目中定义和共享准则和最佳实践的优点:

1. 当做一件事有多种相同的方法时,选择一种方法并保持一致可以让每个人立即了解事情是如何工作的,以及如何向应用程序或库引入更改,即使他们并不熟悉代码库。

2. 通过遵循共享的模式,我们可以在假设某些事情是以特定的方式完成的情况下实现工具。

3. 在审查Pull请求时,可以利用指导方针来提供有效的反馈。

4.指南所保留的统一的书面知识,新手们可以领先一步。


Guidelines

使用管理器来封装逻辑

为了实现代码的尽可能高的模块化和可重用性,我们定义了对象,我们称之为Manager。Manager负责处理业务逻辑的特定部分。例如,健身应用可能需要一个登录管理器、一个计划生成器,甚至需要更通用的逻辑来执行API调用或跟踪用户指标。

依赖容器负责启动这些管理器,并将它们暴露给Katana的Side Effects。以下是创建管理器时需要遵循的一些指导方针: 

1.管理者是“被动的”,他们被Katana的 Side Effects所调用,他们不应该以任何方式与武士刀交互(也就是说,他们不能分派)

2.管理器既不能访问存储getState,也不能访问分派

3.管理器不应该包含状态。函数执行计算所需的所有信息都作为参数传递。

4.管理者可能需要使用其他管理者来实现他们的部分逻辑。我们称这些下属管理者为依赖关系。在初始化管理器时,依赖项应该作为参数传递。

在命名约定方面,作为管理器的类应该使用Manager后缀命名。举个具体的例子,Login不是一个有效的管理器名,而LoginManager是。


Event Observers

Katana 提供了一个拦截器,可以用来观察以下事件:

1.状态变化,

2.一个状态更新器或一个副作用已经被发送,

3.通知是否已经被发布

有时这是不够的,我们需要观察外部世界,并把我们从这个观察中得到的信息带回Katana的世界。正如指南(1)中所讨论的,管理器是应用程序的被动成员,因此它们不能分派。为了解决这个特定的用例,我们引入了event observers。这些类是由依赖容器创建和拥有的,它们唯一且唯一的职责是监听来自外部世界(例如,Firebase、Websockets等等)的事件,并在这个事件之后在Katana世界中分派一些东西。

虽然分开管理者(Manager)和Observers 可能看起来很奇怪,但这实际上有助于保持每个部分的简单和一致。对于简单的情况使用管理器,对于更复杂的情况使用event observer。

在命名约定方面,作为eventtobservers的类应该使用Observer后缀命名。举个具体的例子,HealthKit不是一个有效的观察者名,而HealthKitObserver是。


Avoid complex Side Effects(避免复杂的Side Effects)

在编写应用程序的逻辑时,可能会创建一些高度灵活的Side Effects,这些Side Effects需要多个输入(即,实现Side Effects的结构有几个参数),并根据这些输入实现不同的东西。

逻辑被封装在分组的、可重用的函数中。这意味着您应该尽量使Side Effects简单,并尽可能接近管理器功能和分派的简单链接。

关于在另一个Side Effects中发送一个Side Effects,应该尽可能避免,因为这会使整个逻辑更加难以遵循。如果您最终处于这种情况,请尝试查看您的代码,并考虑更多地利用管理员。


Leverage encapsulation, modularisation and visibility modifiers(利用封装、模块化和可见性修饰符)


应用程序是由相互协作的独立逻辑部分组成的。在编写应用程序逻辑时,应该创建名称空间(模块),反映这些名称空间中的划分和组状态更新器以及Side Effects。

Documentation


文档是应用程序中非常重要的部分。拥有出色的文档,其他开发人员可以轻松进入您的代码库,并更快地提高生产力。

上面一条准则定义了逻辑模块的公共接口的概念。在将该准则应用于代码时,还应确保正确记录了“公共接口”。好的文档应包括:

1.功能/副作用/状态更新程序的功能说明

2.参数说明

3.前提条件(如果有)

4.在编写代码时所做的假设

5.代码无法轻易推断出的任何其他信息,这些信息在使用代码或需要更改代码时都非常有用


Project files structure (项目文件结构)


ProjectName

    |-- Logic

          |-- AppDependenciesContainer.swift

          |-- Home

                |-- HomeDispatchable.swift  // side effects and state updaters       

          |-- Login

                |-- LoginDispatchable.swift // side effects and state updaters

                |-- LoginManager.swift

          |-- PlanGenerator

                |-- PlanGeneratorDispatchable.swift // side effects and state updaters

                |-- PlanGeneratorModels.swift

                |-- PlanGeneratorManager.swift

    |-- UI

          |-- Login

                |-- LoginVC.swift

                |-- LoginView.swift 

          |-- Home

                |-- HomeVC.swift

                |-- HomeView.swift   

                |-- HomeVM.swift

    |-- State

          |-- AppState.swift   

如您所见,主文件夹包含3个主文件夹:逻辑,UI和状态。

逻辑文件夹包含应用程序的所有逻辑(状态更新程序,副作用和管理器)以及依赖项容器。

即使所有逻辑都在一个文件中(例如Home.swift,它具有与Home视图控制器严格相关的副作用),也应该将该文件包含在文件夹中以方便搜索,而不必猜测它是文件夹还是文件夹。一份文件。总体逻辑应包含副作用,状态更新程序,管理器和与逻辑相关的模型。

State文件夹包含该状态一部分的所有结构。请注意,遵循 准则(4),您可能希望将状态与逻辑共同定位,以对代码实施某种信息隐藏技术(即,将某些变量设为私有或文件私有)。这是唯一允许的例外。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,598评论 1 180
  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS[https://github...
    香橙柚子阅读 8,429评论 0 35
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,700评论 0 5
  • 昨天,在回家的路上,坐在车里悠哉悠哉地看着三毛的《撒哈拉沙漠的故事》,我被里面的内容深深吸引住了,尽管上学时...
    夜阑晓语阅读 3,777评论 2 9
  • 一月四号的大沙有个想法。从昨晚到现在就一直围绕在脑子里。或许深受那些小说的影响,或许真的就是我自己脑子或者精神么有...
    一個人的大沙阅读 4,007评论 3 4