xcode7 ios9 iOS中设计模式中委托模式(同一工作空间不同工程)异步调用
2016-06-14 00:00
501 查看
基于委托模式实现的分层架构设计图
云服务层——> 数据持久层(提供DAO对象和DAODelegate协议,使用MKNetworkKit/回调MKNetworkKit委托对象)——>业务逻辑层(提供BL对象和BLDelegate协议,实现DAODelegate协议/回调DAO委托对象)——>表示层(实现BLDelegate协议/回调BL委托对象)
类图
1、数据持久层
NoteDAO
//用来保存委托对象的属性
public var delegate:NoteDAODelegate!
// 查询所有数据的方法
// 查询所有数据的方法
public func findAll(){
let host = MKNetworkHost(hostName: HOST_NAME)
var param = [NSObject:NSObject]()
param["userName"] = USERNAME
param["passWord"] = PASSWRORD
let request = host.requestWithPath(HOST_PATH, params: param, httpMethod: "POST")
request.addCompletionHandler { (networkRequest:MKNetworkRequest!) in
let str = networkRequest.responseAsString
if str != nil || str != ""{
self.delegate.findAllFinished(str)
}else{
let err = NSError(domain: "DAO", code: 3, userInfo: [3:NSLocalizedDescriptionKey])
self.delegate.findByIdFailed!(err)
}
}
host.startRequest(request)
}
public var delegate:NoteDAODelegate! //用来保存委托对象的属性
public class var sharedInstance:NoteDAO{
struct Static{
static var instance:NoteDAO?
static var token:dispatch_once_t = 0
}
dispatch_once(&Static.token){
Static.instance = NoteDAO()
}
return Static.instance!
}
《协议》
NoteDAODelegate
@objc public protocol NoteDAODelegate {
// 成功查询所有数据的方法
func findAllFinished(str:NSString)
// 查询所有数据失败后调用的方法
func findAllFailed(error:NSError)
// 成功安装主键查询数据的方法
optional func findByIdFinished(model:Note)
// 按照主键查询数据方法失败
optional func findByIdFailed(error:NSError)
}
//实体类
2、业务逻辑层
public class NoteBL: NSObject,NoteDAODelegate {
public var delegate:NoteBLDelegate! //保持代理的一个引用
public func findAllNotes(){
let dao:NoteDAO = NoteDAO.sharedInstance
dao.delegate = self
dao.findAll()
}
// NoteDAODelegate委托方法
public func findAllFinished(str:NSString){
self.delegate.findAllNotesFinished!(str)
}
public func findAllFailed(error:NSError){
self.delegate.findAllNotesFailed!(error)
}
}
《协议》
import Foundation
@objc public protocol NoteBLDelegate {
optional func findAllNotesFinished(str:NSString)
optional func findAllNotesFailed(error:NSError)
optional func createNoteFinished()
optional func createNoteFailed(error:NSError)
optional func modifyNoteFinished()
optional func modifyNoteFailed(error:NSError)
optional func removeNoteFinished()
optional func removeNoteFailed(error:NSError)
}
3、表示层
class ViewController: UIViewController,NoteBLDelegate {
let bl = NoteBL()
var str:NSString!
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
bl.delegate = self
// Do any additional setup after loading the view, typically from a nib.
// 调用业务逻辑层的方法
bl.findAllNotes()
}
//业务逻辑层BLNoteDelegate的方法
func findAllNotesFinished(str:NSString){
self.str = str
self.textView.text = str as String
}
func findAllNotesFailed(error:NSError){
let errorStr = error.localizedDescription
print(errorStr)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
查询所有数据的时序图:
Client MasterViewController NoteBL NoteDAO
刷新画面触发查询 ——> 1:findAllNotes ——> 1.1:findAll
1.2.1:findAllNotesFinished < —— 1.2:findAllFinished: |
1.2.1:findAllNotesFailed < —— 1.2:findAllFailed: |
查询所有时序图是用户在加载主视图或刷新主视图触发的查询操作。
1⃣️:MasterViewController异步调用NoteBL类中的findAllNotes方法,接着中NoteBL类中异步调用NoteDAO类的findAll方法
2⃣️:如果成功,我们就会调用findAll方法,然后NoteDAO会回调NoteBL的findAllFinished:方法
3⃣️:如果失败,NoteDAO会回调NoteBL的findAllFailed:方法
4⃣️:在NoteBL中如果成功则回调MasterViewController的findAllNotesFinished:方法,更新表视图;
5⃣️:失败则回调 MasterViewController的findAllNotesFailed:方法 ,弹出警告对话框提示用户
云服务层——> 数据持久层(提供DAO对象和DAODelegate协议,使用MKNetworkKit/回调MKNetworkKit委托对象)——>业务逻辑层(提供BL对象和BLDelegate协议,实现DAODelegate协议/回调DAO委托对象)——>表示层(实现BLDelegate协议/回调BL委托对象)
类图
1、数据持久层
NoteDAO
//用来保存委托对象的属性
public var delegate:NoteDAODelegate!
// 查询所有数据的方法
// 查询所有数据的方法
public func findAll(){
let host = MKNetworkHost(hostName: HOST_NAME)
var param = [NSObject:NSObject]()
param["userName"] = USERNAME
param["passWord"] = PASSWRORD
let request = host.requestWithPath(HOST_PATH, params: param, httpMethod: "POST")
request.addCompletionHandler { (networkRequest:MKNetworkRequest!) in
let str = networkRequest.responseAsString
if str != nil || str != ""{
self.delegate.findAllFinished(str)
}else{
let err = NSError(domain: "DAO", code: 3, userInfo: [3:NSLocalizedDescriptionKey])
self.delegate.findByIdFailed!(err)
}
}
host.startRequest(request)
}
public var delegate:NoteDAODelegate! //用来保存委托对象的属性
public class var sharedInstance:NoteDAO{
struct Static{
static var instance:NoteDAO?
static var token:dispatch_once_t = 0
}
dispatch_once(&Static.token){
Static.instance = NoteDAO()
}
return Static.instance!
}
《协议》
NoteDAODelegate
@objc public protocol NoteDAODelegate {
// 成功查询所有数据的方法
func findAllFinished(str:NSString)
// 查询所有数据失败后调用的方法
func findAllFailed(error:NSError)
// 成功安装主键查询数据的方法
optional func findByIdFinished(model:Note)
// 按照主键查询数据方法失败
optional func findByIdFailed(error:NSError)
}
//实体类
2、业务逻辑层
public class NoteBL: NSObject,NoteDAODelegate {
public var delegate:NoteBLDelegate! //保持代理的一个引用
public func findAllNotes(){
let dao:NoteDAO = NoteDAO.sharedInstance
dao.delegate = self
dao.findAll()
}
// NoteDAODelegate委托方法
public func findAllFinished(str:NSString){
self.delegate.findAllNotesFinished!(str)
}
public func findAllFailed(error:NSError){
self.delegate.findAllNotesFailed!(error)
}
}
《协议》
import Foundation
@objc public protocol NoteBLDelegate {
optional func findAllNotesFinished(str:NSString)
optional func findAllNotesFailed(error:NSError)
optional func createNoteFinished()
optional func createNoteFailed(error:NSError)
optional func modifyNoteFinished()
optional func modifyNoteFailed(error:NSError)
optional func removeNoteFinished()
optional func removeNoteFailed(error:NSError)
}
3、表示层
class ViewController: UIViewController,NoteBLDelegate {
let bl = NoteBL()
var str:NSString!
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
bl.delegate = self
// Do any additional setup after loading the view, typically from a nib.
// 调用业务逻辑层的方法
bl.findAllNotes()
}
//业务逻辑层BLNoteDelegate的方法
func findAllNotesFinished(str:NSString){
self.str = str
self.textView.text = str as String
}
func findAllNotesFailed(error:NSError){
let errorStr = error.localizedDescription
print(errorStr)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
查询所有数据的时序图:
Client MasterViewController NoteBL NoteDAO
刷新画面触发查询 ——> 1:findAllNotes ——> 1.1:findAll
1.2.1:findAllNotesFinished < —— 1.2:findAllFinished: |
1.2.1:findAllNotesFailed < —— 1.2:findAllFailed: |
查询所有时序图是用户在加载主视图或刷新主视图触发的查询操作。
1⃣️:MasterViewController异步调用NoteBL类中的findAllNotes方法,接着中NoteBL类中异步调用NoteDAO类的findAll方法
2⃣️:如果成功,我们就会调用findAll方法,然后NoteDAO会回调NoteBL的findAllFinished:方法
3⃣️:如果失败,NoteDAO会回调NoteBL的findAllFailed:方法
4⃣️:在NoteBL中如果成功则回调MasterViewController的findAllNotesFinished:方法,更新表视图;
5⃣️:失败则回调 MasterViewController的findAllNotesFailed:方法 ,弹出警告对话框提示用户
相关文章推荐
- 升级开发者版本的Xcode,iOS,macOS...
- 自定义NavgationBar
- iOS打开系统相册显示中文方法
- ios中json解析出现的null问题
- iOS强制横屏API不起作用
- iOS开发bundle identifier修改不了(解决bundle ID无法修改的问题)
- iOS开发小技巧--定时器的使用技巧
- iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理
- iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)
- iOS 设计模式系列:Command – 命令模式
- iOS开发小技巧--实现毛玻璃效果的方法
- iOS开发--音乐文件播放工具类的封装(包含了音效的封装)
- iOS开发,音效的播放简单实现以及音效播放的简单封装
- iOS进阶收藏
- IOS开发多线程 - 多线程的简单介绍
- iOS音频播放、录音、视频播放、拍照、视频录制
- iOS开发--录音简单实现
- 关于Legacy Bios和EFI Bios的区别
- iOS日志输出宏
- Mac、Xcode快捷键——附截图