层与层之间的数据交互问题
最近在做ipad的MVC开发框架当设计接口函数时发现层与层之间的数据交互是以前没有考虑清楚的。在分层架构中要尽量减小层与层之间的耦合,层与层之间的通讯需要考虑正常数据的传输,一般采用DTO数据传输对象来实现,需要考虑业务逻辑错误,比如说:用户Session失效,用户名密码错误等,一般在通讯协议中会定义不同的错误代码表,需要考虑程序异常,在Java实现中一般采用异常处理。归纳起来在层与层之间传输的数据包括3种类型:正常返回数据/错误处理提示/程序异常。
层与层之间的通讯方式也可以分为几种:最常见的是基于方法调用,逐层进行方法调用,通过方法的返回值传递业务数据和异常。另外还可以采用基于消息的通讯方式,层与层之间采用命令(Command)方式发起请求和处理感兴趣的命令和数据。两种方式都面临处理上面的3种数据传输的问题,大家是如何来做的呢?
首先,基于命令的模式看起来对这三种数据的处理是非常容易的,命令发布者可以把这3类数据封装成统一的消息,消息订阅者只需要根据消息类型进行处理即可。而基于方法调用的模式相对来说就比较复杂一些了,在Java实现中一般采用方法返回值来处理正常数据的传输,通过异常来处理错误信息和程序异常信息。那么在ios开发中又是如何来实现的呢?
如果是基于命令模式的实现ios和java应该没有太大的区别,在方法调用的实现方式上就显得大为不同。首先从接触ios开发以来发现ios开发中很少使用异常处理,而是通过函数返回BOOL值来判断函数执行的结果。通过阅读文档发现ios提供了一种叫做“Error handling Programming”的技术来实现函数中对异常和错误的处理。总体来看在ios开发中处理层与层的数据交互方面感觉还是很困难的,可能是做java比较久的缘故吧。
总结一下目前见到的几种ios开发中实现方式:
1.看到更多的程序都是业务逻辑和显示都写在UIViewController中,通过共享变量的 方式来实现数据交互,这种模式简单适合小的项目开发。
2.稍好一点的将交互数据提取出一个单独的类,在类中持有数据和状态以及错误代 码,通过共享类变量来达到数据交互的目的。
3.将错误信息和正常数据封装在一个DTO中返回。
4.将NSError作为参数放在函数最后,通过NSError返回错误信息,也就是Error handling Programming方法。
几种方法相比较而言Error handling Programming方法更加OO一些,方法2应用更广泛一些。个人而言更推荐使用Command模式来实现层与层之间的数据交互。