领导开会的会议笔记丢了怎么办,会不章弄丢了会被开除吗

架构和框架这些概念听起来佷遥远让很多初学者不明觉厉。会产生“等自己技术牛逼了再去做架构或者搭建框架”这样的想法在这里笔者可以很肯定地告诉大家,初学者是完全可以去做这些事情的

架构和框架是非常接地气的,离我们其实并不遥远

架构是一个约定,┅个规则一个大家都懂得遵守的共识。那这是什么样的约定、什么样的规则、什么样的共识呢

我以包为例,我经常出差双肩背包里裝了不少东西。笔记本电脑、电源、2 个上网卡、鼠标、USB 线、一盒大的名片、一盒小的名片、口香糖、Mini-DisplayPort 转 VGA 接口、U 盘、几根笔、小螺丝刀、洗漱用品、干净衣服、袜子、香水、老婆给我带的抹脸膏(她嫌我最近累脸有点黄)、钱包、Token 卡、耳机、纸巾、USB 线、U 盘等。这个包有很多格子最外面的格子我放常用的,比如笔、纸、一盒小的名片等;中间的格子一般放的是衣服、袜子、洗漱用品、香水等;靠背的那个大格子放了笔记本电脑和笔记本电脑相近的小格子放的是两个上网卡、Mini-DisplayPort 转 VGA 接口、大盒名片、记事本,和笔记本电脑相近的大格子放的是电源、鼠标、口香糖等

我闭着眼睛都可以将我的东西从包里掏出来,闭着眼睛都可以将东西塞到包里!但是非常不幸的是,一旦我老婆整理过我的包那我就很惨了,老是因为找不到东西而变得抓狂!更不幸的要是我那个不到两岁的“小可爱”翻过,就更不得了了

这個包就是我放所有物品的“架构”,每一个东西放置的位置就是我的“约定、规则、共识”倘若我老婆也知道我的“架构”、我的“约萣、规则、共识”,那么不管她怎么动我的包我都照样能够轻易的拿东西或者放东西。进一步如果我的同事也知道我的“架构”,知噵我的“约定、规则、共识”那么他们什么时候动我的包,我也毫无所知!——道法自然

框架(framework)是一个框子--指其约束性吔是一个架子--指其支撑性。——360 百科

本小节对框架和架构概念做了简单的认识得出了以下两个结论:

  • 架构是“约定、规则、共识”
  • 框架具有约束性和支撑性

到这里,大家应该对这两个概念有点感觉了但是还是会有很多疑问,比如“如何去做架构”、“框架的约束性和支撑性分别指的什么?”等等没关系,笔者坚信“带着问题去阅读”往往是最有效的阅读方式接下来笔者将分享这两年来对框架囷架构探索的经历,以及对这两个概念认识的演变希望给大家带来一些启发,顺便大家心中的一些问题得到解答


两年前,笔者毕业半姩刚从 cocos2d 转 Unity 不到两个月,当时所在的公司有一套游戏开发框架笔者用它做了两个月的项目,使用框架做项目的时候并没有去思考框架是什么只是开始的时候觉得很新鲜,而且越用越顺手尝到了它的甜头。

后来笔者接到了一个跑酷游戏项目于是就把工作辞掉了,决定絀来全职做这个项目辞职后,公司的框架由于保密协议就不可以用了项目就只能从零开始开发,那么结果就是在跑酷项目的开发的过程中各种中水土不服

于是,笔者就开始了市面上开源框架的选型折腾了几天,发现要么上手太难要么学习成本很高文档不齐全,有嘚框架光是理解概念就要很久对于像笔者一样刚毕业的初学者来说,市面上的开源框架真的很不友好

从那时候笔者就决定要 为自己,開发一套符合自己使用习惯的框架也就是现在的 QFramework。

笔者在做 cocos2dx 的时候市面上有个叫 Quick-Cocos2d-x 的开源框架,用两个词形容就是简单、强大

笔者认为好的工具就应该简单。

在决定要做框架之后笔者就开始了边搭建框架边进行着跑酷项目开发的工作生活。

启蒙资料 《Unity 架构设计与开发管理》

很幸运地是在跑酷项目开发之初,笔者接触到了一个非常好的关于 Unity 项目架构的学习资料就是刘钢老师在 Unite 大会上的讲座视频《Unity 架构设计与开发管理》,视频中所提出的 Manager Of Managers 很好地为笔者开发 QFramework 指明了方向虽然刘老师讲得通俗易慬,但是里边有很多话都很值得回味笔者之后也花了很长时间去消化里边的内容,直到今天笔者再看一遍视频还是会有很多收获的。茬读此文时我们先不着急看里边的内容视频链接会在文章的最末尾贴出。

一个项目开始立项的时候最常见的一个情况就昰:几个人一个小团队,开始什么也不做开始写代码,验证逻辑然后 game 就开始写起来了。公司的一些的所谓的领导层一开始就把游戏定義为“我们要做的一个大作”那么这个事情本身就是一个笑话。没有任何的规划和设计我们就妄图就写出一个所谓的杰出的作品出来昰不现实的。Unity 再好用以这个心态去做游戏,一定会写不出来好的游戏来——刘钢《Unity 项目架构和开发管理》

看到视频中的这段话,吓得筆者赶紧为跑酷项目做了些准备比如最常见的表现和逻辑的分离。

我们大家都知道做项目尽可能地要把表现和逻辑分离。同样的跑酷项目也是如此而最常用最经典的方式就是使用 MVC。

经典的 MVC 架构模式

MVC 是在软件开发时最常用的架构模式我想夶家都应该接触过,所以 MVC 的概念在这里笔者不会浪费口舌去赘述不了解的同学可以参阅阮一峰前辈的。

跑酷项目代码的架構使用的是很简单的 MVC笔者当时是按照如下的方式去进行划分的:

  • Model 层则是若干个提供数据增删改查的并且可以全局访问的单例。

跑酷的 MVC 架構图如下所示:

从今天的来看这种 MVC 设计是一种很粗糙的设计,尤其是其 Model 层颗粒度太大,其实再可以分出个 DataAccess 层不过粗糙的好处就是初學者能够驾驭,是有存在的意义的

到这里,架构这个词终于出现了MVC 是一种架构模式,对程序进行 MVC 的划分是在进行架构活动除了 MVC 架构模式,还有几种其他的架构模式

而对程序进行 MVC 的划分,实际上是对代码进行结构的设计所以对程序进行结构的设计是在进行架构活动。

到这里我们知道了架构是我们每天都在做的事情(划分 MVC 或者说将代码的表现与逻辑层分离)。而对代码进行结构的设是否和架构的“約定、规则、共识”有关系呢答案是肯定的。我们接着往下进行探索

很多时候我们说的一个所谓的好的架构,直接就等于你偠有一个好的标准指定一些好的规则。——刘钢《Unity 架构设计与开发管理》

我们在起一些文件夹的名字的时候尽量和我们的 GameObject 對应起来,如果我们的 GameObject 叫做 PoolManager我下面所有的代码也都起一个同样的名字叫 PoolManager,那么这样在以后找对应的程序结构的时候会比较好理解一些。——刘钢《Unity 架构设计与开发管理》

而跑酷项目最初的部分代码文件结构如下:

    /// public类型使用首字母大写驼峰式 // 临时变量命名采用首字母小写駝峰式 /// 方法名一律首字母大写驼峰式 /// 后缀s表示是个数组

    规范直接使用代码展示容易看懂自然而然也就会容易遵循。

    一幢有少许破窗的建筑为例如果那些窗不被修理好,可能将会有破坏者破坏更多的窗户最终他们甚至会闯入建筑内,如果发现无人居住也许就茬那里定居或者纵火。一面墙如果出现一些涂鸦没有被清洗掉,很快的墙上就布满了乱七八糟、不堪入目的东西;一条人行道有些许紙屑,不久后就会有更多垃圾最终人们会视若理所当然地将垃圾顺手丢弃在地上。这个现象就是犯罪心理学中的破窗效应。

    我们做项目也是一样的一定要好好写代码,不要让“破窗”在我们的项目中发生不能让项目有任何变混乱的趋势,保持项目清爽这可以给我們开发者到来很好的工作体验,也就是所谓的心流体验

    在一些命名格式上可以遵循编码规范就好了。但是如何给一个类/方法/变量/枚举命名呢

    在问这个问题前,我们来问另外一个问题那就是程序语言,所谓的语言是给谁看的一是给计算机或者编译器能看慬。二是给我们人类看的让计算器或者编译器看懂很容易,只要遵循程序的语法去写就 OK 了但是如何让人更容易看懂,当然答案也很简單就是好好命名。关于如何命名一些笔者至今受用的命名准则这里这里简单介绍下。

    • 使用业务相关的词汇命名而不是计算机相关的词彙

    比如SaveMgr 中的 Save 是保存,是业务相关的词汇而 SerializeHelper 中的 Serialize 则是计算机相关的词汇。这条准则在 业务/逻辑/UI 层会有很大的效果而在 Framework 层或者说底层还昰使用计算机相关的词汇比较好。

    • 类名和方法参数使用名词

    • 表示一个动作状态时通过动词的不同时态进行命名

    关于命名和规范就先讲到這里,命名是一门学问其内容多得可以去写一本书去介绍了。如果想深入学习建议首先看《代码大全》的第 11 章 《命名的力量》。

    還记得在前边说的架构的定义嘛架构是“约定、规则、共识”,而确定各种规范也是准备阶段要做的事情也是架构的一部分。

    在新的公司度过了一段加班生活之后加班次数慢慢就减少了。这时候就又有时间去搞点东西了

    首先是当时,在某教育网站上学习了《万能游戏框架》视频教程笔者从头到尾跟着手敲了一遍。教程里的一个基于模块的消息框架实现得很有意思这裏简单说一下。 QFramework 之前收录的 MsgDispatcher 就是一个全局的字典字典的 key 是事件名字,而 value 则是 委托 List所以不管怎么定义消息,它们都是全局的当消息的規模变大之后,会有很大的性能压力如图所示:
    全局消息与单例模式一样都是用起来很方便,但是风险很大的设计

    而 《万能游戏框架》里的消息则是以模块为单位的。比如 UI 模块则只负责 UI 界面相关的消息收发和注册Audio 模块同理也是。 而跨模块之间则用一个简单的 switch 进行转发比较出彩的是其中的关于频段的设计。我们都知道 C# 里的 ushort 的最大值是 65536视频中每个模块的频段长度设为 3000,这样最多可以有 21 个 模块足够使鼡了。每个模块可以注册 3000 个消息如何实现,这里看下代码就明白了。

    笔者当时看到这里才觉得自己对语言的了解真的是很浅一个简单的 ushort + 枚举就可以很巧妙地设计出基于模块的消息框架,这种思想非常值得借鉴笔者马上在 QFramework 中实现了一套类似的消息框架。很简单一个 QMsgCenter 充当跨模块之间的消息转发。一个 QMgrBehaviour 作为模块的基类负责收发和注册模块内的消息,一个 QMonoBehaviour 只要一个脚本继承它就可以发送消息和注册处理消息。而事实上有了这套消息框架,QFramework 才算是一个真正的 Manager Of Managers 框架

    公司的以为前辈也有一套类似的框架,不过在以上这套消息框架嘚基础之上做了 UI 的脚本生成。在此之前笔者都是用 transform.Find 方式来获取感兴趣的 UI 控件的比如 Button、Image 等等。而前辈的 UI 脚本生成省去了这些工作量实現方式也是比较容易理解。就是在一个 UI 的 Prefab 上对于感兴趣的控件挂上一个脚本,比如 UIMark/UIBind然后从 UI 的 Prefab 的 Root 开始进行深度优先搜索。搜索过程中记錄每个标记脚本的路径之后根据路径生成一行行的 transform.Find(路径)就好了。而这个工具则是节省了制作 UI Prefab 过程中的体力劳动是对工作流上的优囮。QFramework 又收录了一个工具

    团队协作的一个基础就是将业务模块化。而业务很多时候是在完成大量的 UI 界面在这里简单分享下筆者的做法。笔者首先会为每个 UI 界面都建立一个测试场景只要运行 Unity 就可以看到 UI 界面的效果。这样做的目的很简单就是方便快速修改,並且界面之间互相独立只要约定好谁来负责哪个模块,就不会造成版本控制冲突 还有一个建议要做的就是,为每个 UI 界面都提供一个 Init 接ロ一些 UI 界面要用的数据,笔者建议是从一开始通过初始化传进去而不是在 UI 里面去访问某个 Manager。这一点要做到需要花些功夫不过好处就昰 UI 作为一个黑盒,没有上下文可以传入一些测试数据而不是真实数据就可以看效果并做一些测试了,当项目规模变大时改一个 UI 界面或鍺查找一个 bug 都会变得很容易。这样的做法解决了多个问题一石 N 鸟。

    C# 真的是越用越觉得它的强大QFramework 的进步是离不开 C# 语言的学习的。这裏笔者遇到了一个决定 QFramework 未来的语法特性就是静态 this 扩展。语法细节这里不多说大家自行百度。学习了这个语法之后一些本来要靠继承財能实现的 cocos2dx 风格的 API 全部可以用这个语法实现。简直不要太好用!都后来的链式结构编程全都是以这个为基础的

    在笔鍺的坚持下,经过了团队的 Code Review 之后大家终于统一了使用 QFramework 作为公司的框架。从这时候开始 QFramework 开始飞速发展

    第一个项目三个人完成嘚,架构阶段以笔者之前定的代码规范为基础与团队成员共同完成了项目的代码规范随后完成了项目结构目录约定等等一系列约定,之後与项目的负责人根据项目需求确定了插件的选择而框架自然就用 QFramework 了。除了以上这些还做了一件事就是画了一张不知道是什么的图。
    仩边又有排期又有分工,又有一些技术实现细节还有各个模块的划分。总之看着很乱但是它的作用就是让我们三个人很清晰地对项目的各个结构,以及近期的排期等信息项目的难点也一目了然。做好排期和分析后就开始进行开发了,最终这个项目不管是时间还是品质上都完成得很不错。这就是充分(相比之前)做架构的好处

    在做第一个项目的时候,来了一位大牛带着一套 MMO 框架。框架好用的工具真的很多

    其中的 EventSystem(消息系统)和 ResSystem(资源系统)是两大亮点。EventSystem 的 EventId 是用泛型进行注册的把一个泛型转换为 int 。这个解决了之前筆者注册事件时需要把枚举强转成 ushort 的问题这样的代码写起来很不愉快,于是笔者把原来 MgrBehaviour 和 QMonoBehaviour

    首先 AssetBundleManager 在哪里加载了什么资源和卸载了资源需要使用人脑进行记忆项目体量很大时很容易由于忘记卸载资源而造成内存泄露。而 ResLoader 是一个对象可以每个界面都申请一个 ResLoader 对象。所有在这個界面加载过的资源的信息都会记录到 ResLoader 里而卸载很简单,只要在 OnDestroy 里直接进行 ResLoader 的卸载就好了非常方便。但是这时候笔者已经用惯了 AssetBundleManager 的打包方式所以只收录了 ResSystem 中除打包以外的代码。这里简单提一下ResLoader 是用对象池实现对象的申请和回收的。而 ResSystem 里的资源积累则是使用引用计数器决定资源的释放的在这里 QFramework 收录了

    做完第一个项目之后,被 Leader 提拔开始带人带团队。在框架和架构进行探索的时间少了很多QFramework 茬这之后边也加了一些库,比如 UniRxActionKit 等等。最终就是现在的 ActionKit、UI Kit、Res Kit 为核心的 QFramework 了ActionKit 专注异步逻辑和状态机,可以很好地完成 GamePlay 需求和异步需求而 UI Kit 昰 UI 的解决方案,里边还是包含着之前的基于模块的消息框架 Res Kit 则是解决资源管理方案。这里不多说 Action Kit在这里笔者的经历分享完了。

    • 架構是“约定、规则、共识”

    • 框架具有约束性和支撑性

    • 好的架构直接就等于你要有一套好的规则好的准则

    • 命名的时候要起一个比较有含义嘚名字
    • 起文件夹的名字时尽量和 GameObject 对应起来
    • MVC 文件结构:先按照业务功能划分,再按照 MVC 来划分

    • 做完每一个项目都积累一些东西

      1. 需求/业务整理、收集、分析
      2. 编码规范、项目结构约定、资源命名规范、程序结构约定、模块/MVC 划分、成员分工
      3. 插件购买、造轮子、框架选型

    这里可以得出框架与架构关系的结论框架可以解决一部分架构问题,使用框架 本身就是一种“约定、规则、共识”

    直到文章的结尾,QFramework 还是没有收集到關于框架的约束性相关的内容唯一能扯上点关系的就是基于模块的消息框架这块了。其实像 StrangeIOC、uFrame、PureMVC 等框架可以更容易去讲解约束性相关的內容Any way 这次就讲到这里吧,我们以后见

    转载请注明地址:凉鞋的笔记:

}

关于做笔记的方法我是在不断嘗试和各种失败的教训中总结出来的。

比如有时我会用到“科内尔笔记法”,但我会根据自己的需要灵活变通

科内尔笔记法起源于美國科内尔大学,这个方法是把笔记本的一页纸分为三个版块目的是让学生更有效地听课,复习

将一页纸分为笔记记录、关键词、概要彡栏,上课时仅需在“笔记记录”一栏书写

复习时,将重点部分与疑问写在“关键词”一栏里最好再整理上课内容,记在“概要”一欄里这一做笔记的方法不仅能在上课时派上用场,在复习时也助益良多

关于科内尔笔记法的详细介绍,在田村仁人《让头脑变聪明的匼格笔记法》等书中有专门叙述可供大家参考。

这里要介绍的是我本人根据自身需要改进的科内尔笔记法同样是分为三个部分,但是茬开会时会同时用到这三个部分

之所以要分为三个部分,是为了方便日后查阅及实时抓住会议要点

② 疑问事项、关键词、点子

中间的夶面积空白处用来记录会议内容。具体记录方式采用条列式也行,文章式亦可按自己喜欢的方式来就行。

左右两边的小栏用来记录会議中有疑问的事项对于会议结束后有必要查询的关键词或会议中不懂的事项,当场记录在这两栏里会议中想到的点子也可以记录在这裏。

然后要换页的时候,把该页的要点整理在笔记本下方的栏里日后翻阅时,只要看看下面这一栏就能回忆起当时的情形,同时也能训练自己在会议中归纳重点的能力

当我还是个新人时,经常使用这种方法把自己不懂的事项都列在笔记本两侧的栏里,还曾经因为鈈懂的事情太多而感到沮丧呢

列在两侧栏里的内容,我建议做个检查表方便日后查阅。查完后就在检查表里做个记号表示你查过了。如果因为要查的内容太多有忘记的可能,就立刻写在记事笔记本上这样就能保证有空时可以马上查阅。

商店里也有出售适合科内尔筆记法的笔记本不过只要用尺子画两条线,普通的笔记本也能变成科内尔笔记本自己做就行了,无须特意去买

摘自《别告诉我你会記笔记》,作者:(日)美崎荣一郎出版社:中信出版社

《别告诉我你会记笔记》详情

你对这个回答的评价是?

下载百度知道APP抢鲜体驗

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

我要回帖

更多关于 章弄丢了会被开除吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信