Unity客户端架构设计心得
移动游戏开发的历史及现状 国内的游戏市场,在12年以前还是以PC为主,主要有以下原因: 基础设施跟不上,都是2G,3G。2013年年底才正式发放4G网络。 移动设备性能不高,多数还是以打电话为主。而且 …
移动游戏开发的历史及现状 国内的游戏市场,在12年以前还是以PC为主,主要有以下原因: 基础设施跟不上,都是2G,3G。2013年年底才正式发放4G网络。 移动设备性能不高,多数还是以打电话为主。而且 …
摘录自:https://semver.org/lang/zh-CN/ 摘要 版本格式:主版本号(MAJOR).次版本号(MINOR).修订号(PATCH),版本号递增规则如下: 给定版本号MAJOR. …
内聚强度 内聚类型(由高到低) 描述 功能内聚(Functional cohesion,最高) 完成一个单一功能,各个部分协同工作,缺一不可 依序内聚性/顺序内聚(Sequential cohesio …
系统负责的内容 界面开发【显式】 模块间数据的传播,或者是模块间调用的方式【隐式】 各解决方案的接入(总线)【隐式】 版本发布【隐式】 更新策略及方案【隐式】 系统的现状 需求迭代速度快 已有的多个模 …
在开发中会遇到这种情况 功能模块负责人,会有些经常使用的功能,封装一下放到公共库 发现一个不错的功能组件,放到项目公共库中 感觉原来的API不好(命名,参数太多等等),自己封装一个放入公共库 现有的A …
前言:当编写系统模块时,都会注意高内聚、低耦合、单一等等原则,虽然这些原则并非强制性,但是它对后续扩展有很好的指导性建议。但这些仅仅是微观上的,在宏观上也是需要类似这种指导性建议。这也是我们需要对架构 …
单例作为一种可供全局使用的唯一对象,而被普遍使用。但是能够这么做不代表就应该这么用。 单例在带来便利的同时也应该受到约束,如果一个单例遍布每个模块各处,这本身就是错误的使用方式,其缺点如下: 如果需要 …
定义 服务定位模式(Service Locator Pattern)指的是在组合根以外的地方,以不确定的一群不稳定依赖对象,作为依赖需求组件提供给应用程序使用。 更多解释详见服务定位模式-维基百科 p …
在编码时,只要在需要时进行New操作,不仅可以节省编码的时间,还可以直接获取当前需要的具体依赖项,但是事物总有两面性,在带来便利的同时,频繁的New操作也给维护带来不小的危害。 最主要的危害就是对依赖 …
定义 在软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中经常出现但又低效或是有待优化的设计模式[1][2],是用来解决问题的带有共同性的不良方法。 摘录自反面 …
定义 所谓迁移性(Transitivity)是数学上的概念,在具备迁移性的关系中,A与B相关、而B与C又相关的话,那么认为A就会与C相关。 在讨论依赖关系的问题中,有时也会应用这种概念,来验证模块的或 …
定义 在计算机科学,面向对象编程中,是由一群对象彼此相互关联、形成一个关系网络所构成的,这些对象彼此要不是存在着直接关联,要不就是透过一连串间接关联,串联在一起。对象与对象之间所构成的关系图,称之为对 …
概念上的区别 抽象是含有,接口是能够。 抽象更多描述的是一个交集、根基的概念,而接口更多表达的是一种功能,一种可随时增删的能力。 接口是首选 语法上接口可以多重继承 使用接口更利于编写 组合优于继承( …
定义 在面向对象编程领域,上帝对象(God object)是一个了解过多或者负责过多的对象。 上帝对象是 反模式(anti-pattern) 和 代码异味(code smell)的例子。 全能的上帝 …
我需要一个汉堡 当我们去快餐店向服务员说明一个需要一个汉堡时,服务员会向我们提供一个已经加工完成的汉堡。可能每次提供的汉堡都有稍许不同,例如肉质、温度、面包的厚度、有无圆葱等等,但是他都符合汉堡的基本 …
以下为《编写高质量代码:改善C#程序的157个建议》作者【陆敏技】的读书总结,添加了笔者自己的理解或示例。 90:不要为抽象类提供公开的构造方法。abstract class MyAbstractCl …
以下为《编写高质量代码:改善C#程序的157个建议》作者【陆陆敏技】的读书总结,添加了笔者自己的理解或示例。 首先简述几个概念: FCL:(Framework Class Library)即Frame …
定义 DIP原则定义中核心的两句描述为如下两条: 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口(抽象)。 抽象接口(抽象)不应该依赖于具体实现。而具体实现则应该依赖于抽象接口(抽象) …
什么是接口 除MSDN文档中的描述外,对于实例化此接口的类来讲,这个接口属于这个类的抽象,或者说一部分功能的抽象,但是对于接口的使用方来讲,还会新增一条含义,那就是依赖的增加,增加此抽象对应的依赖。 …
初识 其定义为:派生类(子类)对象可以在程序中代替其基类(超类)对象。 最初接触里氏替换时,我们往往以继承的方式来达到复用的目的,但是其能带来复用的特点仅仅是表现,而非本质。或者说这是利用里氏替换的特 …
开放和关闭到底是什么 我们可以看一下对于开闭原则的定义: 软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的。 或者更简洁:对扩展开放,对修改关闭。 其实我们可以把扩展和修改 …
什么是稳定性依赖原则? 稳定依赖原则(SDP)组件结构依赖图中各组件的 I 指标必须按照其依赖关系方向递减。 稳定性指标如何计算? Fan-in:入向依赖,外部类依赖于此组件内部类的数量。 Fan-o …
其原则主张方法应给分为两类: 查询:方法返回结果,但不改变任何系统状态(无副作用)。 命令:方法没有结果,但会改变系统状态。 此原则带来的优点如下 查询类型的方法,对于调用者来讲不用在顾虑各个查询方法 …
占个位置 更多文章详见主页:www.aihailan.com 阅读量: 1,733
在构造函数中的初始化,一般都是此类或结构必须涉及的依赖关系及数据。 从依赖关系的角度看,在构造中集中处理有如下好处 可以清楚的知道此类或结构中所需的依赖关系 一次性进行判空处理,避免后续使用的多次判空 …
interface,也就是常说的接口,使用它的地方有两处 接口的调用方(各种Manager) 接口的实现方(实例) 接口的归属应该是属于前者,也就是接口的调用方。 归其原因,要从使用接口的原因说起,使 …
在一个模块或者类运行时,总会涉及某些依赖项,从变动的角度看,分为两种:稳定依赖性和不稳定依赖性。 稳定依赖性 开发已经完成 运行环境确定或者对运行环境的变动不敏感,例如:只在某些机器某些版本的系统上运 …
什么是时序耦合 在两个或更多的类型、成员之间,必须先调用一个才能调用另一个。这种必须按照特定顺序调用的耦合关系叫做时序耦合。 哪些情况会遇到时序耦合 读取json、excel等数据时,必须先调用Ini …
你在说什么? 创世记第11章1-9句记录了“巴别城”的故事。当时地上的人们都说同一种语言,当人们离开东方之后,他们来到了示拿之地。在那里,人们想方设法烧砖好让他们能够造出一座城和一座高耸入云的塔来传播 …
什么是组合根 定义:指的是在应用程序中的单一逻辑区块位置,在这会将各个模块组合起来。 组合根指的不是一个方法、也不是一种类别,而是一种概念。 为什么要有组合根 在没有组合根时,我们对于依赖的“New” …
快、稳、轻、简、美、优 总共这个6个阶段 快 为了实现而实现,速度第一位,能运行即可 稳 保证少出BUG,不出BUG 轻 拆分、精简代码,体量减少 简 简单易懂 美 快、稳、轻、简 浑然一体 优 如果 …
软件的首要技术使命:管理复杂度。— 史蒂夫·迈克康奈尔《代码打全(第2版)》 SOLID原则 搬砖方法论:Single Responsibility Principle(单一职责原则、SR …
语言的差异 前言:语言本身是一件非常不稳定的表达工具,这也是为什么我们在沟通中需要观察对方的表情、肢体动作、给予的隐喻、提供的图像来进一步确定对方想表达的意思,加之语言的使用者和接收者因文化、职业、经 …
构造注入(Constructor Injection) 方法注入(Method Injection) 属性注入(Property Injection)又称为:Setter Injection 定义 C …
主要参考 代码整洁之道(Robert C. Martin力作,韩磊献译) 前言:假设你是位医生,病人请求你再给他做手术前别洗手,因为那会花太多时间,你会照办吗?本该是病人说了算;但医生却绝对应该拒绝遵 …
前言:为了防止累成狗或者变成狗,我们要加倍努力,早日成为大佬咸鱼翻身~~~ 本篇主要是在前两篇基础上的补充说明,概述笔者在这个示例中为什么会这样设计,如何取舍。 Unity 之 经典优秀框架 Pure …
前言:为了防止累成狗或者变成狗,我们要加倍努力,早日成为大佬咸鱼翻身~~~ 上一次笔者写过一篇Unity 之 经典优秀框架 PureMVC (4.1.0版本)解析 (上) 应用篇,这边是对框架内部实现 …
前言:笔者已经整整两个月没有写博客了,大家想问是不是笔者懒惰了?这回还真不是,现在项目真的变成了9-9-6,回家已经11点多,笔者真的累成了狗,或者说变成了狗。所以说小伙伴们,为了不变成狗,还是要多多 …
前言,在游戏开发中,经常会听到MVC、MVP、MVVM 这类名词,对他们的第一印象多是为了解耦、提高扩展性而选择的软件架构模式,但分别深究它们的区别或优缺点,又往往不得要领,今天笔者就基于Unity游 …