医生端iOS IM

187 阅读2分钟

方案设计

环信文档

docs-im-beta.easemob.com/document/io…

代码结构

环信主要使用的类

与环信对应的body model

方案实现

消息收发显示

会话列表

标准化设计

网易云信

对于一个消息流交互层方案,主要考虑几个方面:

  1. 规范的消息流结构:提供消息流视图结构规范化的构建方式

  2. 标准的消息交互能力:统一消息交互能力,业务方按需使用,快速集成

  3. 业务拓展性:针对数据源、消息交互能力提供业务灵活拓展点

  4. 业务接入成本:内置通用交互方案,降低业务接入成本

设计愿景:提供标准化的能力,同时对拓展开放。

我们期望一套通用的消息流能力,能够在方案上标准化。这里的标准化,主要包含消息流结构构建的标准化,以及消息交互能力的标准化。同时,方案需要在交互能力上适应不同业务场景,因此采用依赖注入的方式,提供业务定制能力。 按照职能划分,将框架整体分为了两层:

  • 消息流结构层:负责消息流结构的构建,定义消息视图、布局、数据上的规范,提供业务层分别在「消息」、「会话」两个维度的配置能力。

  • 消息交互层:提供消息能力、消息流、消息数据方面的交互能力,向下依赖交互接口,内置标准交互能力的同时,也支持业务按需注入交互实现。

抽象工厂模式

抽象工厂模式又称为 Kit 模式,属于创建型模式。

它提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类

抽象工厂模式包含如下角色:

  • AbstractFactory:抽象工厂声明了一组创建各种抽象产品的方法
  • ConcreteFactory:具体工厂
  • AbstractProduct:抽象产品
  • Product:具体产品是抽象产品的多种不同类型的实现

示例:

protocol AbstractFactory {
    func create() -> AbstractProduct
}

class AppleFactory: AbstractFactory {
    func create() -> AbstractProduct {
        return ApplePhoneProduct()
    }
}

class HuaweiFactory: AbstractFactory {
    func create() -> AbstractProduct {
        return HuaweiPhoneProduct()
    }
}

protocol AbstractProduct {
    var phone: String { get }
}

class ApplePhoneProduct: AbstractProduct {
    var phone: String {
        return "Apple"
    }
}

class HuaweiPhoneProduct: AbstractProduct {
    var phone: String {
        return "Huawei"
    }
}

enum Brand {
    case apple
    case huawei
}

class MyPhoneFactory: AbstractFactory {
    var barnd: Brand

    init(barnd: Brand) {
        self.barnd = barnd
    }

    func create() -> AbstractProduct {
        switch barnd {
        case .apple:
            return AppleFactory().create()
        case .huawei:
            return HuaweiFactory().create()
        }
    }
}

class Manager {
    func method() {
        let factory = MyPhoneFactory(barnd: .apple)
        let product = factory.create()
        print(product.phone)
    }
}

IM规划流程