zoukankan      html  css  js  c++  java
  • 分享一个BookStore ios程序的例子

     

    经过4天的开发,ios的网络书店基本完成了:

    • 登陆注册
    • 图书列表,下拉放开刷新,下拉到底查看更多,图片异步加载
    • 我的信息,查看订单修改密码
    • 查看图书详情
    • 加入购物车
    • 提交订单
    • sqllite存放浏览日志,定时提交
    • plist文件存放购物车

     架构中最重要的元素:

    1. 模块化,纵向分割
    2. 层次化,横向分割
    3. 抽象和实现分离
    4. 解耦,同构组件如何通讯,异构组件如何通讯
    5. 职责分离

    重构中:消除重复代码,消除魔数

    BookStore应用虽然简单,但包括的内容不少

    • 分层架构
    • 层之间的通讯控制
    • 各种数据访问的演示

     

    分层架构如下:

    • Resources用于各种资源,比如图片、icon和多语言的文本
    • Core就是业务逻辑层用于管理数据访问层,以及作为数据的容器
      • Controller就是业务逻辑控制器,也可以命名为Service,每一种业务逻辑对应一种控制器
      • Entity就是数据实体,此外还用于description的生成以及序列化控制
    • Data就是数据访问层
      • 其中有本地的数据访问(包括UserDefaults、plist文件以及本地的sqllite)
      • 以及远程的数据访问(http+json)
    • UI就是前端
      • 包括ViewController
      • 对应的View
      • 封装的TableViewCell
      • ViewController之间通讯的协议
    • Utility中包括扩展、常量以及小工具

     

    层之间的通讯控制如下:

    • ViewController作为前端入口,直接和Controller通讯,其中VC->C是方法调用,而C->VC是NoficationCenter的消息通知,Controller之间采用的是方法调用
    • ViewController之间的通讯采用的是协议,效率高又可以解耦
    • Controller作为业务逻辑的入口,会调用本地数据访问服务和远程数据访问服务,对于后者BookController到BookService采用的是方法调用,返回采用的是回调Block
    • Service网络层采用异步OperationQueue,异步完成后调用Controller注册的回调方法,回调方法中再发通知,通知ViewController层
    • Service网络层有BaseService封装了网络的通用处理,会直接和BaseViewController进行互动,用于通用的一些等待和错误处理

    C层到VC层采用通知,VC层之间采用协议,VC到C层采用方法调用,C到S层采用方法调用,S到C层采用Block回调。

     

     

    代码下载:这里

    服务端程序(基于ASP.NET MVC)下载:这里

    数据库备份(基于MS SQL)下载:这里

      

    希望不要误导新手,高手路过帮忙看一下有什么可以改进的,特别是架构上。

    欢迎大家阅读我的极客时间专栏《Java业务开发常见错误100例》【全面避坑+最佳实践=健壮代码】
  • 相关阅读:
    <![CDATA[文本内容]]>
    Java对于表达式中的自动类型提升
    oracle循环语句
    Recastnavigation 创建 off-mesh link 的潜规则
    CritterAI 翻译 Configuration Parameters
    ndk-build 修改输出so位置 (change ndk-build output so lib file path )
    C# List<> Find相关接口学习
    C++ sizeof(struct) 的注意
    Unity使用Resources读取Resources路径下的二进制文件(Binary Data)必须使用 .bytes扩展名
    C++ ifstream ofstream 注意事项
  • 原文地址:https://www.cnblogs.com/lovecindywang/p/2680055.html
Copyright © 2011-2022 走看看