摘要:
本篇体验在Axure中自定义部件,并熟悉Widget Interations and Notes面板,Widget Properties and Style面板,Widget Manager面板。 在Axure中如何自定义部件Widget呢? 点击"Widgets"面板中的"Options"下的"Create Library",点击"完成"Axure随即启动打开一个Widget的编辑器,在...
阅读全文
posted @ 2015-08-29 22:53
Darren Ji
阅读(1162)
推荐(0)
摘要:
首先认识Axure RP Pro 7.0软件的默认界面布局。最上面的是工具栏区域,左侧上方的是网站地图区域(sitemap),左侧中部的是部件区域(Widgets),左侧下方的是模板区域(Masters),中间上方的是页面区域,中间下方的是页面设置区域,右侧上方是部件属性区域,右侧下方是动态面板区域。 依次点击"Publish","Preview"或直接按快捷键F5或直接按工具栏里的预览按...
阅读全文
posted @ 2015-08-28 17:50
Darren Ji
阅读(1091)
推荐(0)
摘要:
本篇摘自:InfoQ的微信公众号 在设计API的时候考虑的问题包括:API所使用的传输协议、支持的消息格式、接口的控制、名称、关联、次序,等等。我们很难始终作出正确的决策,很可能是在多次犯错之后,并从中吸取经验,才能够接近正确的决策。而通过迭代的方式,只要有足够的机会,就能在API设计方面接近完美。 一个公开的API就像砖石,它是永恒不变的。(引自Joshua Block) 要知道...
阅读全文
posted @ 2015-08-26 09:19
Darren Ji
阅读(765)
推荐(2)
摘要:
ASP.NET Web API本质是由一个进程托管的一组类,需要宿主,这个宿主可以是ASP.NET应用程序,可以是MVC项目,可以是控制台应用程序,也可以是自己定制的宿主。 在VS2012中创建一个"ASP.NET MVC4 Web应用程序",选择"Web API"模版,会为我们自动添加一些相关组件。 App_Start下的WebApiConfig类包含一个Register方法,这在方...
阅读全文
posted @ 2015-08-23 10:02
Darren Ji
阅读(1522)
推荐(2)
摘要:
当需要描述多个对象之间的互动,可以考虑使用序列图。 在建模项目下添加一个名称为"Basic Flow"的序列图。 比如描述客户是如何在MVC下获取到视图信息的。 备注: ● 通常是从用户的角度开始时序图的● 把粒度控制在必要的环节 参考资料:https://channel9.msdn.com/Blogs/clinted
阅读全文
posted @ 2015-08-14 11:40
Darren Ji
阅读(518)
推荐(0)
摘要:
如果想描述项目组件的关系,可以考虑使用UML组建图。 在建模项目下添加一个名称为"Applicaiton Component Structure"的UML组建图。 添加各个组件,并添加依赖关系。 在必要的时候,给组件添加备注。 如果想给依赖关系备注,需要在Name属性中设置。 可以为组件添加接口。 备注: ● 明确项目中的可执行程序和组件● 明确各个组件的依赖...
阅读全文
posted @ 2015-08-14 11:18
Darren Ji
阅读(1774)
推荐(0)
摘要:
当需要描述项目的架构或技术栈的时候,可以考虑使用层关系图。 在解决方案下添加一个名称为"TailspinToys.DesignModel"的建模项目。 在新建的建模项目下添加一个名称为"Application Architect"的层关系图。 添加各个层,并添加依赖关系。 备注: ● 一个层表示一个职责● 尽量减少层之间的依赖关系 参考资料:https://cha...
阅读全文
posted @ 2015-08-14 10:49
Darren Ji
阅读(1244)
推荐(0)
摘要:
当希望描述某个流程的时候,用活动图表示。 在项目中添加一个名称为"Shopping"的文件夹。 把"Orders Model"这个UML类图拖放到Shopping文件夹中。 先创建一个有关购物的活动图。 在Shopping文件夹下创建一个名称为"Browse Toys"的UML活动图。 把一个初始节点拖动到主界面,这个点表示活动开始的地方。 拖动若干个操作到界面上。 ...
阅读全文
posted @ 2015-08-14 10:01
Darren Ji
阅读(1225)
推荐(0)
摘要:
右键解决方案,添加一个名称为"Domain Model"的UML类图。 首先站在整体的角度添加类,先不要任何属性。 添加Customer对Wishlist的关联,把"属性"中"Second Role"项中的"Is Navigable"设置为False。 添加Cusomter对Shopping Cart的关联,把"属性"中"Second Role"项中的"Is Navigabl...
阅读全文
posted @ 2015-08-13 15:52
Darren Ji
阅读(1389)
推荐(1)
摘要:
在"在Visual Studio中使用用例图描述系统与参与者间的关系"中,使用用例图表示参与者与系统的关系,本篇体验参与者与用例(参与者要做的事情)的关系。 首先创建有关Customer参与者的UML用例图。 在解决方案下创建一个名称为"Customer"的UML用例图。 打开"UML模型资源管理器",把其中的"Customer 参与者"拖动到右侧的主界面。 在主界面添加若干个用例...
阅读全文
posted @ 2015-08-13 14:47
Darren Ji
阅读(3938)
推荐(0)
摘要:
"用例图"用来描述谁用系统,用系统做什么。用例图不涉及使用细节,只用来描述使用人员和系统的关系,也不涉及行动的顺序。一起来体验。 使用Visual Studio 2012创建解决方案。 创建一个空白、名称为"TailspinToys"的解决方案。 右键解决方案,点击"添加","添加新项目",选择左侧的"建模项目",命名为"TailspinToys.AnalysisModel"。 ...
阅读全文
posted @ 2015-08-13 11:42
Darren Ji
阅读(2633)
推荐(0)
摘要:
在面对相互独立的数据或者相互独立的任务时,也许正是Parallel登场的时候。 比如说有一个盒子的集合,分别让盒子旋转一定的角度。 void RotateBox(IEnumerable boxes, float degree) { Parallel.ForEach(boxes, box => box.Rotate(degree)); } 如果并行任务中的一个任务出现异常,需要...
阅读全文
posted @ 2015-08-09 11:09
Darren Ji
阅读(1045)
推荐(0)
摘要:
本篇体验如何等待所有异步任务完成、等待任意一个异步任务完成,以及异步任务完成时的处理。 等待一组任务的完成使用Task.WhenAll方法。 Task task1 = Task.Delay(TimeSpan.FromSeconds(1)); Task task2 = Task.Delay(TimeSpan.FromSeconds(2)); Task task3 = Task.Delay(...
阅读全文
posted @ 2015-08-09 09:17
Darren Ji
阅读(2274)
推荐(0)
摘要:
在异步编程中,有时候希望把进度展示出来,借助IProgress可以实现。 IProgress只提供了一个方法void Report(T value),通过Report方法把一个T类型的值报告给IProgress,然后IProgress的实现类Progress的构造函数接收类型为Action的形参,通过这个委托让进度显示在UI界面中。 首先写一个方法,使用Report方法报告进度。 ...
阅读全文
posted @ 2015-08-08 19:04
Darren Ji
阅读(3516)
推荐(2)
摘要:
Task.FromResult用来创建一个带返回值的、已完成的Task。 场景一:以同步的方式实现一个异步接口方法 比如有一个接口包含异步方法。 interface IMyInterface { Task DoSthAsync(); } 现在,需要以同步的方式实现该接口方法DoSthAsync,但要返回异步的结果。这正是Task.FromResult的用武之地。 public...
阅读全文
posted @ 2015-08-08 08:44
Darren Ji
阅读(3602)
推荐(0)
摘要:
如果想让程序异步等待一段时间,可以考虑使用Task.Delay方法。 比如,在单元测试中模拟一个异步操作。 static async Task DelayedResult(T result, TimeSpan delay) { await Task.Delay(delay); return result; } 又比如,当我们需要远程下载内容,由于远程服务器的状态未必稳...
阅读全文
posted @ 2015-08-07 17:05
Darren Ji
阅读(937)
推荐(0)
摘要:
当有大量的数据需要处理或者有大量任务需要完成,而且每块数据或每个任务是彼此独立的,这时候可以考虑使用并行编程。现代计算机都是多核的,并行编程可以提高CPU利用率以提高吞吐量。 Parallel.Invoke形参能接收一个Action数组。 static void Main(string[] args) { Test(); ...
阅读全文
posted @ 2015-08-07 16:15
Darren Ji
阅读(775)
推荐(0)
摘要:
在.NET异步编程中,通常使用async和await这对黄金搭档,返回类型使用Task或Task。在方法前面加async表示这个方法运行异步,在方法内使用await表示执行一个异步等待。 下面是一个简单例子: static void Main(string[] args) { Doth(); Console....
阅读全文
posted @ 2015-08-07 12:43
Darren Ji
阅读(3140)
推荐(1)
摘要:
我们知道,使用string.Format方法可能会存在装箱的情况。比如如下: static void Main(string[] args) { string s = string.Format("拼接{0}和{1}", 1, 2); Console.WriteLine(s); Conso...
阅读全文
posted @ 2015-08-02 07:39
Darren Ji
阅读(1363)
推荐(0)
摘要:
沉浸就是让人专注在当前的情境下感到愉悦和满足,而忘记真实世界的情境。心流理论能有力解释人们废寝忘食地投入一件事情的状态。 心流理论的核心就是说当人的技能与挑战最佳匹配时能达到心流状态。比如玩一个游戏,如果游戏太难,游戏者会感到焦虑;如果游戏太容易,游戏者会感到无聊;当游戏者觉得有能力挑战游戏时,才会投入地玩游戏。 通过怎样的方式才能达到沉浸式体验呢?一个是通过感官体验,比如座过山车,一...
阅读全文
posted @ 2015-07-30 09:16
Darren Ji
阅读(1564)
推荐(0)
摘要:
很多事其实不存在唯一的答案,在这里,有关你,有关我,有关工作。关于平台好平台的诞生一定有它的时代和行业背景,符合了某种大势,顺势而为,让某些方面变得更好。好平台让技术与市场挂钩,市场利润和技术人员收入成正比。好平台是以事件为驱动的,为了完成一件彼此确信的事,平等、自由地工作。现在,在一个固定时间来到...
阅读全文
posted @ 2015-07-25 18:13
Darren Ji
阅读(773)
推荐(0)
摘要:
平常用Inject比较多,今天接触到了Castle Windsor。本篇就来体验其在ASP.NET MVC中的应用过程。 Visual Studio 2012创建一个ASP.NET MVC 4网站。 通过NuGet安装Castle Windsor。 在当前项目下创建一个名称为"IOC"的文件夹。 在ASP.NET MVC中,每次请求,DefaultControllerFacto...
阅读全文
posted @ 2015-07-20 19:10
Darren Ji
阅读(3806)
推荐(4)
摘要:
今天在项目中遇到了使用switch语句判断条件,但问题是条件比较多,大概有几十个条件,满屏幕的case判断,是否有更优雅的写法替代switch语句呢? 假设有这样的一个场景:商场经常会根据情况采取不同的打折方案,如果打折方案比较少,可以考虑使用switch语句作判断。但如果有几十甚至几百种打折方案的时候,用switch语句就不够优雅。 先来一个打折接口。 public inter...
阅读全文
posted @ 2015-07-16 15:53
Darren Ji
阅读(11020)
推荐(1)
摘要:
在.NET中,虽然CLR的GC垃圾回收器帮我们自动回收托管堆对象,释放内存,最大程度避免了"内存泄漏"(应用程序所占用的内存没有得到及时释放),但.NET应用程序"内存泄漏"的问题还是会存在,如果不加以注意,"内存泄漏"时有发生。 有关流以及Reader或Writer引起的内存泄漏 比如,把文件读取到流中: public static string ReadFile() { va...
阅读全文
posted @ 2015-07-16 11:51
Darren Ji
阅读(3902)
推荐(1)
摘要:
本篇接着"从Web Service和Remoting Service引出WCF服务"中有关WCF的部分。 运行宿主应用程序。 运行Web客户端中的网页。 输入内容,点击按钮,能获取到WCF所提供的服务。 现在,WCF的接口如下: namespace HelloWcf { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IF...
阅读全文
posted @ 2015-07-11 15:11
Darren Ji
阅读(727)
推荐(0)
摘要:
本篇体验使用WCF实现2个服务。一个使用HTTP通讯,一个使用TCP通讯。 大致思路是: → 创建WCF服务以及接口,写2个接口→ 实现2个接口→ 为WCF创建一个控制台项目的宿主,配置App.config,开启宿主→ 创建一个Web客户端,创建对WCF服务的引用→ 在Web客户端,调用WCF服务,即调用WCF的代理类的实例方法 打开Visual Studio 2013,创建一个类...
阅读全文
posted @ 2015-07-11 13:05
Darren Ji
阅读(4368)
推荐(2)
摘要:
本篇先通过Web Service和Remoting Service创建服务,抛砖引玉,再体验WCF服务。首先一些基本面: 什么是WCF? Windows Communication Foundation,微软的平台,用来搭建分布式的、互操作的应用程序。 什么是分布式应用程序? 如果把计算机看成是节点,分布式应用程序跑在2个或2个以上的节点上。比如,一个应用程序运行在一台电脑上,另一...
阅读全文
posted @ 2015-07-08 14:27
Darren Ji
阅读(1191)
推荐(1)
摘要:
报错:未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试 → 尝试以"管理员身份"运行程序,不行。→ 点击菜单下的"运行",输入"cmd",来到控制台。→ 输入"netstat -a"查看端口是否被占用,发现应用程序中所使用的端口已被占用。→ 更改应用程序的端口,问题解决。
阅读全文
posted @ 2015-07-08 10:52
Darren Ji
阅读(19682)
推荐(0)
摘要:
在"ASP.NET MVC与Sql Server交互, 插入数据"中,在Controller中拼接sql语句。比如: _db.InsertData("insert into Product(Name,quantity,Price) values('"+productVm.Name+"','"+productVm.Quantity+"','"+productVm.Price+"')"); ...
阅读全文
posted @ 2015-07-06 21:56
Darren Ji
阅读(2867)
推荐(1)
摘要:
在"ASP.NET MVC与Sql Server建立连接"中,与Sql Server建立了连接。本篇实践向Sql Server中插入数据。 在数据库帮助类中增加插入数据的方法。 public class SqlDB { protected SqlConnection conn; //打开连接 public bool OpenC...
阅读全文
posted @ 2015-07-06 18:40
Darren Ji
阅读(5990)
推荐(3)
摘要:
用惯了使用Entity Framework连接数据库,本篇就来体验使用SqlConnection连接数据库。 打开Sql Server 2008,创建数据库,创建如下表: create table Product ( Id int identity(1,1) not null primary key, Name nvarchar(50) null, quantity ...
阅读全文
posted @ 2015-07-06 17:10
Darren Ji
阅读(19261)
推荐(3)
摘要:
Builder模式也可以造车。 对于Builder模式来说,首相要把要造的车确定下来: public class Car { public string Model { get; set; } public string Engine { get; set; } public string Transmission { get; ...
阅读全文
posted @ 2015-07-03 18:45
Darren Ji
阅读(678)
推荐(0)
摘要:
可以用抽象工厂模式来造车。 车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类: public abstract class Car { public string Model { get; set; } public string Engine { get; set; } ...
阅读全文
posted @ 2015-07-03 17:48
Darren Ji
阅读(1020)
推荐(0)
摘要:
扩展数据库的时候面临诸多挑战。 搜索 当搜索量很少的时候,搜索是简单的事。 当搜索量上来,比如达百万级的时候,可以把搜索内容按某种顺序排列。比如在字典中,按字母顺序排列。 并发 如果100万人需要同时用这本字典,这就是并发。 如何解决这个问题呢? 把这本字典复制100万份,专业术语叫"主从复制"。 再把100万份复制字典放到每个人的手头,专业术语叫"分布式策略...
阅读全文
posted @ 2015-07-02 09:39
Darren Ji
阅读(469)
推荐(0)
摘要:
当把一个脚本附加到一个GameObject上的时候,这个GameObject就有了脚本组件。 通过GameObject的属性获取组件 比如如下: [RequireComponent(typeof(Rigidbody))] public class PhysicCtrl : MonoBehaviour{ public Rigidbody rb; void Start()...
阅读全文
posted @ 2015-07-02 09:01
Darren Ji
阅读(1317)
推荐(0)
摘要:
Canvas是所有ui元素的父物体。 当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem。 在Canvas的Render Mode中有三个选择: 1、Screen Space - Overlay 屏幕最上层,主要是2D效果。2、Screen Space - Camera 绑定摄像机,可以实现3D效果...
阅读全文
posted @ 2015-06-26 14:32
Darren Ji
阅读(4302)
推荐(0)
摘要:
在Unity3D中,一个物体通常包含一个Collider和一个Rigidbody。Collider是碰撞体,一个物体是Collider,才可以进行碰撞检测。Collider组件中的"Is Trigger"属性项被勾选上时,这个物体就变成碰撞检测体。 物体有了Rigidbody组件,才会具备一些物理属性,比如重量、阻力、旋转阻力,等等。"Use Gravity"项表示是否有自然引力。"Is ...
阅读全文
posted @ 2015-06-26 10:24
Darren Ji
阅读(1278)
推荐(0)
摘要:
在脚本的生命周期中,有Awake, Start, FixedUpdate, Update, LateUpdate等方法,其实这些属于MonoBehaviour类的事件响应方法,是MonoBehaviour类的事件响应方法的一个子集。 在MonoBehaviour类中,也可以分为"启动与刷新函数"和"交互函数"。 我们可以把Reset,Awake, Start这3个启动方法,以及Fixe...
阅读全文
posted @ 2015-06-25 08:21
Darren Ji
阅读(1655)
推荐(0)
摘要:
创建一个Unity项目。 在"Project"窗口中,在"Asserts"中,添加"_MyScene"文件夹。 点击"File"中的"Save Scene",给Scene命名,并保存到"_MyScene"文件夹。 创建一个类型为"Plane"的GameObject,并调整其大小。 创建一个类型为"Cube"的GameObject,并适当调整大小。 使用脚本控制物体组件的En...
阅读全文
posted @ 2015-06-24 12:30
Darren Ji
阅读(15385)
推荐(0)
摘要:
本篇实现一个球体在固定区域移动撞击Cube的游戏。 首先有1个Plane当作地面,1个Sphere当作球体,4个Cube当作墙,12个Cube当作被撞击物体,另外还有球体的撞击计算,在撞击的过程适时显示撞击的球体数,12个Cube被撞击后提示游戏结束。 创建项目,创建背景和球 创建一个项目,名称为"MyRollBall",选择项目所在文件,选择"3D"项,点击"Create pr...
阅读全文
posted @ 2015-06-24 10:44
Darren Ji
阅读(8040)
推荐(0)