【问题标题】:How to do the following architecture with Swift (iOS). Added a Java code example如何使用 Swift (iOS) 完成以下架构。添加了 Java 代码示例
【发布时间】:2015-11-09 09:30:03
【问题描述】:

对于 iOS 应用程序,我的一位朋友想到了一种架构,用于处理现有的 3 层可变数据集。我们知道应该如何在 Java 中实现它,但不确定在 Swift 中是否推荐这样的方法。当然,在 Swift 中我们必须使用协议。

你们中的任何人都可以就我们如何使用 Swift 正确实现以下 Java 架构提供建议吗?

提前感谢您的想法!

Java 示例:

确定使用方法的通用接口:

public interface AbstractDataMapper<T> {
  public void create(T);
  public T read(string);
  public void update(T);
  public void delete(T);
}

一些实现接口并传递正确对象的抽象映射器类:

public abstract class AbstractClientMapper implements AbstractDataMapper<Client>{}
public abstract class AbstractProductMapper implements AbstractDataMapper<Product>{}
public abstract class AbstractOrderMapper implements AbstractDataMapper<Order>{}

使用接口方法的自定义实现扩展映射器的一些类。

public class MyClientMapper extends AbstractClientMapper {
  //override methods from interface
}

public class MyProductMapper extends AbstractProductMapper {
  //override methods from interface
}

public class MyOrderMapper extends AbstractOrderMapper {
  //override methods from interface
}

【问题讨论】:

  • 使用默认协议扩展和泛型,因此可以在“AbstractDataMapper”扩展中添加登录名,这样您就不必覆盖每个映射器中的方法,但我不知道您的客户、产品和订单是否结构/类有一些重要的区别。

标签: java ios swift protocols


【解决方案1】:

定义协议:

public protocol AbstractDataMapper: class {

    typealias T

    func create(object: T)
    func read(string: String) -> T
    func update(object: T)
    func delete(object: T)
}

使类符合协议

public class AbstractClientMapper: AbstractDataMapper {

    public typealias T = Client

    public func create(object: T) { }
    public func read(string: String) -> T { }
    public func update(object: T) { }
    public func delete(object: T) { }
}

public class AbstractProductMapper: AbstractDataMapper {
    public typealias T = Product

    //implement the rest of methods
}

public class AbstractOrderMapper: AbstractDataMapper {
    public typealias T = Order

    //implement the rest of methods
}

扩展您的课程:

public class MyClientMapper: AbstractClientMapper {

}

public class MyProductMapper: AbstractProductMapper {

}

public class MyOrderMapper: AbstractOrderMapper {

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2015-06-09
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多