小编aha*_*ese的帖子

面向协议的编程和委托模式

一个WWDC 2015年会议的视频介绍的想法面向协议编程,我想通过我的未来应用这种技术.在过去的几天里,我一直在玩Swift 2.0,以便了解这种新方法,并坚持尝试使用Delegate Pattern.

我有两个协议定义了我项目中有趣部分的基本结构(示例代码是无意义但描述了问题):

1)一个委托协议,它使一些信息可访问,类似于UITableViewController的dataSource协议:

protocol ValueProvider {
    var value: Int { get }
}
Run Code Online (Sandbox Code Playgroud)

2)实体的接口协议,它使用上面的信息(这里是"协议优先"方法的想法发挥作用):

protocol DataProcessor {
    var provider: ValueProvider { get }
    func process() -> Int
}
Run Code Online (Sandbox Code Playgroud)

关于数据处理器的实际实现,我现在可以在枚举,结构和类之间进行选择.我希望如何处理信息有几种不同的抽象级别,因此类似乎最适合(但我不想让这个最终决定,因为它可能在将来的用例中改变).我可以定义一个基本处理器类,在此基础上我可以构建几个特定于案例的处理器(结构和枚举不可能):

class BaseDataProcessor: DataProcessor {
    let provider: ValueProvider

    init(provider: ValueProvider) {
        self.provider = provider
    }

    func process() -> Int {
        return provider.value + 100
    }
}

class SpecificDataProcessor: BaseDataProcessor {
    override func process() -> Int {
        return …
Run Code Online (Sandbox Code Playgroud)

delegates design-patterns protocols ios swift

9
推荐指数
1
解决办法
457
查看次数

Flutter中的嵌套数据和BLoCs

我的Flutter应用程序具有以下一般结构:

  1. 初始屏幕显示联系对象列表.用户可以点击提示的联系人
  2. 一个详细信息屏幕,让用户可以看到整个联系信息,并暂时修改任何详细信息.用户可以
  3. 在不保存更改的情况下关闭屏幕,或
  4. 点击保存按钮,永久更新联系人,完成后返回初始屏幕.

我正在使用FireStore.该列表是使用Stream<QuerySnapshots>,当用户点击一个项目时,应用程序的路由器解析路由名称(例如/contacts/123),创建相应的DocumentReference并将其转发到详细信息屏幕的初始化程序,然后初始化程序DocumentReference.get用于加载详细信息并DocumentReference.updateData保存更改.工作精美 - 但只是一个概念的证明.

现在我想隐藏FireStore以及BLoC背后的剩余业务逻辑.这导致了一些问题:

  1. 据我所知,将业务逻辑保留在UI之外意味着我应该坚持命名路由,并让详细屏幕以某种方式使用路由详细信息通过BLoC检索相关联系人数据.这是真的,这是什么最好的解决方案?
  2. 如何使用BLoC订阅嵌套数据?我希望详细信息屏幕能够观察数据变化,以便我可以警告用户数据是否过时.streamOfContact(contact) -> Stream<Contact>禁止在BLoC(类似的东西)上使用函数,那么我如何用Sinks做到这一点?或者通常有不同的方法来做到这一点而不破坏BLoC模式?我对这一切都很陌生,所以很可能我忽略了一些重要的东西.
  3. 类似的问题:我如何更新特定联系人?

我在网上找到的教程只处理根数据(例如将购物车项目添加到购物车,处理用户身份验证,......),但我还没有看到展示嵌套数据的示例.任何帮助都非常感谢!

dart flutter

9
推荐指数
1
解决办法
1613
查看次数

根据Dart / Flutter中的过滤器更新流

我有一个BLoC,它使用原始输入Stream(产生JSON对象列表)并将其转换为使用的可用对象StreamTransformer。UI将显示该列表。用户可以应用过滤器(本身是流到BLoC中的流),以便BLoC用相应的where(...)语句更新输入流转换器。

问题是:当过滤器更改时,UI不会更新,因为输出流取决于JSON输入流(而不是过滤器流)的事件。我的假设是我需要创建自己的流,将输入事件和过滤器事件都转发到该流中,或者我需要在转换后的输入流上重复最后一个事件,以便转换器有机会将其拾取。如何正确完成?一个例子会很有帮助!

stream dart flutter

3
推荐指数
1
解决办法
1774
查看次数

标签 统计

dart ×2

flutter ×2

delegates ×1

design-patterns ×1

ios ×1

protocols ×1

stream ×1

swift ×1