搬砖方法论:保持整洁架构的常用准则
软件的首要技术使命:管理复杂度。— 史蒂夫·迈克康奈尔《代码打全(第2版)》 SOLID原则 搬砖方法论:Single Responsibility Principle(单一职责原则、SR …
软件的首要技术使命:管理复杂度。— 史蒂夫·迈克康奈尔《代码打全(第2版)》 SOLID原则 搬砖方法论:Single Responsibility Principle(单一职责原则、SR …
前言:Odin Inspector是Unity的一个插件,让您可以享受拥有强大,自定义和用户友好编辑器的所有工作流程优势,而无需编写任何自定义编辑器代码。 Odin包含许多功能,例如Static In …
移动游戏开发的历史及现状 国内的游戏市场,在12年以前还是以PC为主,主要有以下原因: 基础设施跟不上,都是2G,3G。2013年年底才正式发放4G网络。 移动设备性能不高,多数还是以打电话为主。而且 …
HybridCLR简介 官方链接:https://hybridclr.doc.code-philosophy.com HybridCLR是 Code Philosophy(代码哲学) 公司的代表作品, …
阅读量: 1,093
阅读量: 1,090
摘录自:https://semver.org/lang/zh-CN/ 摘要 版本格式:主版本号(MAJOR).次版本号(MINOR).修订号(PATCH),版本号递增规则如下: 给定版本号MAJOR. …
阅读量: 1,073
内聚强度 内聚类型(由高到低) 描述 功能内聚(Functional cohesion,最高) 完成一个单一功能,各个部分协同工作,缺一不可 依序内聚性/顺序内聚(Sequential cohesio …
置于用户控制之下 以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式 提供灵活的交互 允许用户交互可以被中断和撤销 当技能级别增加时可以使交互流水化并允许定制交互 使用户隔离内部技术细节 设计 …
系统负责的内容 界面开发【显式】 模块间数据的传播,或者是模块间调用的方式【隐式】 各解决方案的接入(总线)【隐式】 版本发布【隐式】 更新策略及方案【隐式】 系统的现状 需求迭代速度快 已有的多个模 …
阅读量: 882
阅读量: 848
阅读量: 845
阅读量: 820
阅读量: 862
阅读量: 880
阅读量: 830
阅读量: 899
阅读量: 921
阅读量: 922
占位 更多文章详见主页:www.aihailan.com 阅读量: 1,219
在分配前我们需要准备什么 首先只要还在工作,需求就会源源不断的出现,所以需求不断,时间一定的前提下,我们需要按照其优先级做优先级高的事情。 关于如何确定优先级,这个算是一个比较复杂的事情,其中涉及到组 …
在开发中会遇到这种情况 功能模块负责人,会有些经常使用的功能,封装一下放到公共库 发现一个不错的功能组件,放到项目公共库中 感觉原来的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 …
以下为Editor Inspector 常规扩展示例 对应工程Girhub地址 mono脚本 using System.Collections; using System.Collections.Ge …
定义 DIP原则定义中核心的两句描述为如下两条: 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口(抽象)。 抽象接口(抽象)不应该依赖于具体实现。而具体实现则应该依赖于抽象接口(抽象) …
【ExcelDataReader】 Github地址:https://github.com/ExcelDataReader/ExcelDataReader 此工具含有丰富的API可以便捷的对Excel …
什么是接口 除MSDN文档中的描述外,对于实例化此接口的类来讲,这个接口属于这个类的抽象,或者说一部分功能的抽象,但是对于接口的使用方来讲,还会新增一条含义,那就是依赖的增加,增加此抽象对应的依赖。 …
初识 其定义为:派生类(子类)对象可以在程序中代替其基类(超类)对象。 最初接触里氏替换时,我们往往以继承的方式来达到复用的目的,但是其能带来复用的特点仅仅是表现,而非本质。或者说这是利用里氏替换的特 …
开放和关闭到底是什么 我们可以看一下对于开闭原则的定义: 软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的。 或者更简洁:对扩展开放,对修改关闭。 其实我们可以把扩展和修改 …
什么是稳定性依赖原则? 稳定依赖原则(SDP)组件结构依赖图中各组件的 I 指标必须按照其依赖关系方向递减。 稳定性指标如何计算? Fan-in:入向依赖,外部类依赖于此组件内部类的数量。 Fan-o …
其原则主张方法应给分为两类: 查询:方法返回结果,但不改变任何系统状态(无副作用)。 命令:方法没有结果,但会改变系统状态。 此原则带来的优点如下 查询类型的方法,对于调用者来讲不用在顾虑各个查询方法 …
占个位置 更多文章详见主页:www.aihailan.com 阅读量: 1,700
在构造函数中的初始化,一般都是此类或结构必须涉及的依赖关系及数据。 从依赖关系的角度看,在构造中集中处理有如下好处 可以清楚的知道此类或结构中所需的依赖关系 一次性进行判空处理,避免后续使用的多次判空 …
interface,也就是常说的接口,使用它的地方有两处 接口的调用方(各种Manager) 接口的实现方(实例) 接口的归属应该是属于前者,也就是接口的调用方。 归其原因,要从使用接口的原因说起,使 …
在一个模块或者类运行时,总会涉及某些依赖项,从变动的角度看,分为两种:稳定依赖性和不稳定依赖性。 稳定依赖性 开发已经完成 运行环境确定或者对运行环境的变动不敏感,例如:只在某些机器某些版本的系统上运 …
什么是时序耦合 在两个或更多的类型、成员之间,必须先调用一个才能调用另一个。这种必须按照特定顺序调用的耦合关系叫做时序耦合。 哪些情况会遇到时序耦合 读取json、excel等数据时,必须先调用Ini …
你在说什么? 创世记第11章1-9句记录了“巴别城”的故事。当时地上的人们都说同一种语言,当人们离开东方之后,他们来到了示拿之地。在那里,人们想方设法烧砖好让他们能够造出一座城和一座高耸入云的塔来传播 …
什么是组合根 定义:指的是在应用程序中的单一逻辑区块位置,在这会将各个模块组合起来。 组合根指的不是一个方法、也不是一种类别,而是一种概念。 为什么要有组合根 在没有组合根时,我们对于依赖的“New” …
快、稳、轻、简、美、优 总共这个6个阶段 快 为了实现而实现,速度第一位,能运行即可 稳 保证少出BUG,不出BUG 轻 拆分、精简代码,体量减少 简 简单易懂 美 快、稳、轻、简 浑然一体 优 如果 …
语言的差异 前言:语言本身是一件非常不稳定的表达工具,这也是为什么我们在沟通中需要观察对方的表情、肢体动作、给予的隐喻、提供的图像来进一步确定对方想表达的意思,加之语言的使用者和接收者因文化、职业、经 …
构造注入(Constructor Injection) 方法注入(Method Injection) 属性注入(Property Injection)又称为:Setter Injection 定义 C …
无法提供摘要。这是一篇受保护的文章。
前言:广度优先搜索可回答两类问题, 从节点A触发,有前往节点B的路径吗? 从节点A触发,前往节点B的哪条路径最短? 如上图所示,我们需要从You的关系网找到海澜,我们先从一级关系网中搜索,如果一级没有 …
前言:此算法是解决从原点出发到其他节点的最短路径。但是也有此算法的限制条件和前提 路径是有方向且无环的 路径的消耗不为负数(权重不为负数) 题目:如下图所示,从起点为A,终点为F,路径每一条边上的数字 …
当重新创建、销毁、置空时,都会执行对应的Dispose操作 using Sirenix.OdinInspector; using UnityEngine; public class OnInspect …
在编译后的第一次绘制进行初始化设置。 using Sirenix.OdinInspector; using Sirenix.Utilities.Editor; using System; using …
StateUpdate可以使用在属性字段上,,属性的状态更新时,OnStateUpdate提供事件回调。回调频率每帧至少发生一次,即使属性不可见,也会调用回调。它相当于自定义一个更新回调函数,并且可以 …
OnCollectionChanged可以放在集合上,通过inspector更改集合提供事件回调。此外,它提供了CollectionChangeInfo结构,其中包含有关对集合所做的详细更改的信息。但 …
通过添加SearchableAttribute特性为其添加一个搜索框,可用于搜索对应的类或其子类的成员,但目前不可用于字典类型。 using Sirenix.OdinInspector; using …
这次笔者介绍Odin-Serializer来进行游戏中的数据序列化与反序列化,做了一个类似PlayerPrefs的简单示例方便大家参考 虽然Odin-Serializer也可进行Unity Objec …
一段算法的好坏,我们最直观的判断就是计算机执行的时间,点击运行,马上出现结果,如果出现卡段,或者很长时间才能出现结果,往往就会认为这是一个不好的算法,但是这些计算结果常会因为操作系统、硬件环境的不同而 …
一次偶然的机会和公司负责招聘的HR闲聊,有幸了解一些招聘选人方向的信息,当然作为交换我也说了一些作为应聘者的真实想法,以下是笔者整理的一些问题和对应的解答,希望能帮助作为读者的你。 1. 选简历的关注 …
官方地址点击进入 非常方便,即开即用。分为安装版和绿色版 阅读量: 1,994
做决策前人们往往摇摆不定或意气用事,不会根据当时的环境进行冷静分析作出判断,正因如此,其结果常常事与愿违,造成或多或少的损失乃至改变自己人生的轨迹。 以为笔者列出两条对决策非常有效的方法。其简单性和适 …
前言:关于跳槽的问题大家都不会避免,而且这种问问往往都很隐晦,大家都不喜欢放在桌面上谈起,今天笔者说一说基于以下几点,我所知道的跳槽的历程。 0.为什么跳槽 一般会有以下几种情况 钱给少了,薪水与同等 …
主要参考 代码整洁之道(Robert C. Martin力作,韩磊献译) 前言:假设你是位医生,病人请求你再给他做手术前别洗手,因为那会花太多时间,你会照办吗?本该是病人说了算;但医生却绝对应该拒绝遵 …
在日常开发中你是否有遇到如下情况 进入一个老项目对应的API不知道去哪里找 经常重复造轮子 功能相同但命名不同的API散落在程序库的各个角落 命名相近但功能不同的API充斥整个工程 陈旧准备废弃的AP …
一般的技术博客都会使用Markdown语法来编写。因为其中的语法使用可以显著的提高编写效率,后期的更改维护也比较方便,话不说多,下面是基于WP Githuber MD 插件中可使用的Markdown语 …
以下为笔者整理的一些在开发中提高工作效率的小技巧,希望能够给予你一些帮助和启示。 下班前的一小时不要向程序库提交代码。因为很有可能因为文件漏提交,逻辑错误等BUG造成程序库编译失败,阻碍其他同事开发进 …
Xind源文件下载地址Github点击下载 阅读量: 1,939
这是一款即开即用的统计插件,非常方便,在对应的操作面板还能对统计方式进行客制化的调整 后台操作面板 也可以定制对应的Icon,选中对应的图标,填写指定的名称即可 效果图 阅读量: 1,990
前言:为了防止累成狗或者变成狗,我们要加倍努力,早日成为大佬咸鱼翻身~~~ 本篇主要是在前两篇基础上的补充说明,概述笔者在这个示例中为什么会这样设计,如何取舍。 Unity 之 经典优秀框架 Pure …
前言:为了防止累成狗或者变成狗,我们要加倍努力,早日成为大佬咸鱼翻身~~~ 上一次笔者写过一篇Unity 之 经典优秀框架 PureMVC (4.1.0版本)解析 (上) 应用篇,这边是对框架内部实现 …
前言:笔者已经整整两个月没有写博客了,大家想问是不是笔者懒惰了?这回还真不是,现在项目真的变成了9-9-6,回家已经11点多,笔者真的累成了狗,或者说变成了狗。所以说小伙伴们,为了不变成狗,还是要多多 …
随着Unity2017的普及,使用.NET 4X的开发者也越来越多了,下面笔者给大家介绍一下在C# 6中的新功能主要是怕自己忘记,2333,有些功能还是很实用的~ 使用Unity版本2018.2.9f …
在学习C#的过程中,大家一定会听说过一些CLR、JIT、LR、什么堆栈分配、内存释放的东西,谈到大家对这些元素的理解,多数都是这些是操作系统里面的东西,值类型、引用类型会和堆栈相关,但是在问到这些提到 …
前言:在项目中,我们总会在组件或者Scriptable Objects中填写一些我们需要的字段,但是随着项目进度的不断进展,当时可能临时填写、不符合规则的字段会被遗弃在角落。这就成了一个定时炸弹,可能 …
前言:随着项目进度的不断开展,在工程文件里面或多或少总有那么几个重复文件,或者名称相同,或者MD5值相同(一样的文件复制多份但是名称不同) 笔者制作了这个基于Odin的一键查找工具,方便大家查找项目中 …
前言:在开发中有时处于性能原因或者业务需求,会批量处理UI中的Raycast Target选项 【Odin工具箱】这次集成Raycast Target批处理,不论实例物体(Hierarchy中)还是A …
特性在框架中的应用也是很普遍,只需要在相应的类、字段、属性、函数等上面加上这个特殊的小东西就会在相应的元素上面添加一些特殊的应用效果,下面就为大家简单的介绍下特性的原理和应用场景 在往期的博客中有介绍 …
反射反射,程序员的快乐 这句话想必大家都经常听过,基本上在绝大多数的框架和一些设计模式中都能看到反射的身影(MVC、IOC、AOP、O/RM), 反射:是.Net Framework提供的一个帮助类库 …
在前面两篇Unity C#基础之 多线程的前世今生(上) 科普篇和Unity C#基础之 多线程的前世今生(中) 进阶篇中,相信大家对多线程有了一定的了解,这篇再详细的聊一聊在使用多线程中需要注意的地 …
书接上回Unity C#基础之 多线程的前世今生(上) 科普篇,下面为大家介绍从.NET 1.X到4.X版本中多线程的示例,推荐使用.NET 3.X版本 注意:打印提示中信息很重要,反馈出线程ID和顺 …
多线程,项目中的应用不可缺少,能极大的提高程序的响应速度,但是也会提高内存和CPU的计算量(空间换时间),下面简单介绍下多线程从.NET 1.0版本到.NET 4.0版本的发展历程及使用示例 示例工程 …
从上家公司技术宅离职,出去玩了一段时间然后开始找工作,有幸接到以下公司的面试邀请,所以借此机会做了一下各公司的面试横评。 以下为笔者主观意见横评,仅供娱乐,如有雷同,纯属巧合。 评测时间段为2020. …