方案设计
环信文档
docs-im-beta.easemob.com/document/io…
代码结构
环信主要使用的类
与环信对应的body model
方案实现
消息收发显示
会话列表
标准化设计
网易云信
对于一个消息流交互层方案,主要考虑几个方面:
-
规范的消息流结构:提供消息流视图结构规范化的构建方式
-
标准的消息交互能力:统一消息交互能力,业务方按需使用,快速集成
-
业务拓展性:针对数据源、消息交互能力提供业务灵活拓展点
-
业务接入成本:内置通用交互方案,降低业务接入成本
设计愿景:提供标准化的能力,同时对拓展开放。
我们期望一套通用的消息流能力,能够在方案上标准化。这里的标准化,主要包含消息流结构构建的标准化,以及消息交互能力的标准化。同时,方案需要在交互能力上适应不同业务场景,因此采用依赖注入的方式,提供业务定制能力。 按照职能划分,将框架整体分为了两层:
-
消息流结构层:负责消息流结构的构建,定义消息视图、布局、数据上的规范,提供业务层分别在「消息」、「会话」两个维度的配置能力。
-
消息交互层:提供消息能力、消息流、消息数据方面的交互能力,向下依赖交互接口,内置标准交互能力的同时,也支持业务按需注入交互实现。
抽象工厂模式
抽象工厂模式又称为 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)
}
}