对于应用程序而言,日志是非常重要的功能,通过日志,我们可以跟踪应用程序的数据状态,记录Crash的日志可以帮助我们分析应用程序崩溃的原因,我们甚至可以通过日志来进行性能的监控.总之,日志的好处很多,特别是对Release之后的线上版本进行异常的跟踪. 日志存储的分类 在平常开发时,我们通常喜欢在Debug模式下进行调试,通过断点,可以跟踪数据的变化.除了调试,另一种直观的方式是使用控制台输出,比如Java的system.out.println(),.NET的Console.WriteLine()…
『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化设计的思路 不管是开发客户端应用程序还是开发服务器端应用程序,『组件』这个词我们并不陌生.不管是在iOS中的xib,还是在AngularJS的Component,或者后端开发的 User Control,可复用的组件是面向对象开发的基础.所以在Unity 3D 框架设计时,组件化是核心的概念.那么如…
对于客户端应用程序,免不了和远程服务打交道.设计一个良好的『服务层』能帮我们规范和分离业务代码,提高生产效率.服务层最核心的模块一定是怎样发送请求,虽然Mono提供了很多C#网络请求类,诸如WebClient,HttpWebRequest,但考虑到跨平台,这些类不一定适用.不过不用担心,Unity 5.x提供了新的与网络相关类UnityWebRequest用来替代原先的WWW,这是官方推荐的,也是最佳选择. 使用Token进行身份验证 首先我们必须要考虑的是,怎样和Web服务安全的通信.没错,肯…
谈到 『Repository』 仓储模式,第一映像就是封装了对数据的访问和持久化.Repository 模式的理念核心是定义了一个规范,即接口『Interface』,在这个规范里面定义了访问以及持久化数据的行为.开发者只要对接口进行特定的实现就可以满足对不同存储介质的访问,比如存储在Database,File System,Cache等等.软件开发领域有非常多类似的想法,比如JDBC就是定义了一套规范,而具体的厂商MySql,Oracle根据此开发对应的驱动. Unity 中的Repositor…
MVVM回顾 经过上一篇文章的介绍,相信你对MVVM的设计思想有所了解.MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在. View只关心怎样渲染,而ViewModel只关心怎么处理逻辑,整个架构由数据进行驱动.不仅View与ViewModel彼此解耦,ViewModel与ViewModel之间也是解耦的. 通过消息订阅-发布机制,解决了ViewModel之间的强依赖关系. 先回顾一下我们已完成的功能,Framework中最核心就是BindableProperty…
想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临.你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧.领会了Boss的意图之后,漫长的排查问题开始了.你会写日志,或者是其他工具来追踪原因.那么如何以一种优雅的形式,并且不侵入业务代码的形式来跟踪呢?这正是本文的内容. 跟踪问题 通过观察,你发现方法Do执行缓慢,可能有性能问题,因为这是一个线上的版本,你无法进行Debug,所以你通过日志的形式来追踪执行步骤: class Foo1 { vo…
什么是 『动态数据集合』 ?简而言之,就是当集合添加.删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面.有经验的程序员脑海里迸出的第一个词就是 ObservableCollection.没错,它在WPF中盛行其道,通过它开发者可以很方便的达到动态更新界面.要在Unity 3D中使用ObservableCollection还是有些许困难的,因为Mono并不提供ObservableCollection类.但实际上,自己动手去构建一个『动态数据集合』也非难事,核心在于怎样去传播通知.这也是…
在我们设计和开发应用程序时,经常要用到控件.比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件.属性可以更改它的外观,比如背景色,标题等,而事件可以丰富控件的行为,比如最常见的『按钮点击』,谁也不能确定点击之后将发生什么事,是连接数据库呢还是弹出警告框,在不同的场景下,『按钮点击』 的行为往往呈现不一致.所以,与其举棋不定,还不如把处理委托给开发者,这就是『OnClick』事件. SubView行为多变性 在上篇文章中,我阐述了为什么…
当你开发一个客户端应用程序的时候,往往一个单页会包含很多子模块,在不同的平台下,这些子模块又被叫成子View(视图),或者子Component(组件).越是复杂的页面,被切割出来的子模块就越多,子模块越多,彼此之间需要同步的数据和状态就越频繁,即易产生耦合.那么如何保证在复杂业务情况下,各个子模块之间可以随意通信并保持弱耦合关系,这正是本文所讨论的. 耦合的产生 试想一下,你有这样一下需求,点击 View A中的按钮,View B也需要做出相应的改变. 这不是很简单吗.脑海里迅速出现两种解决方案…
初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到很好的实现. MVVM 设计模式顾名思义,通过分离关注点,各司其职.通过 Data Binding 可达到数据的双向绑定,而命令 Command 更是将传统的 Code Behind 事件独立到 ViewModel 中. MVVM 设计模式在 WPF 中的实现 在WPF中,你会像如下这样去定义一个专…