分享一个BookStore ios程序的例子
经过4天的开发,ios的网络书店基本完成了:
- 登陆注册
- 图书列表,下拉放开刷新,下拉到底查看更多,图片异步加载
- 我的信息,查看订单修改密码
- 查看图书详情
- 加入购物车
- 提交订单
- sqllite存放浏览日志,定时提交
- plist文件存放购物车
架构中最重要的元素:
- 模块化,纵向分割
- 层次化,横向分割
- 抽象和实现分离
- 解耦,同构组件如何通讯,异构组件如何通讯
- 职责分离
重构中:消除重复代码,消除魔数
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例》【全面避坑+最佳实践=健壮代码】

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2010-09-11 公司.NET 3.5培训资料分享