当前位置: 首页 > 编程日记 > 正文

我的路子 - 发现游戏为模型的软件架构方式

  总觉得如果一个内容被深刻地理解了,那么当在他口中说出来的时候,应该是很简单才对。

  所以一直觉得,编程里那些不容易理解的,需要记住很多内容的东西都是有缺陷的。自己又比较自我认可强,看不到别人的角度,表现上有些自我。自己想的只是,事情还有很多解决方法,为什么要被那一种很难学的方式占了路子,而且找不到理解透彻的,有点为这种状况气愤,觉得肯定是没有好好做的原因,或者是一些人太安于现状的原因,或者是一些找不到出路就说没出路的人,自己没吃透却站在高处误导别人,阻碍大部分人的进一步思考。

  即使这样,自己该做的事情还是要继续做,去探索可以用来解决问题的架构。首先3D建模还是比较擅长的,玩了那么久的游戏,对场景想象比较容易。于是一个平面问题,可以用一个立体方式来解决,这样就多角度一些,把事情变得容易。

  说是这样说,具体做的时候,到具体项目的时候还是暂时没有想出来。知道以前自己所提出的面向对象的架构是一种不是很确切的说法,需要更合适的描述。这样,没有成熟理论的话也不好去找工作,没有底气。

  游戏的事情也一直徘徊着弄着,最近又来了一股隐藏的热情,不知道是否需要把这份继续。对有些人来说还是有帮助的,真可以实现的话,对自己也有很多帮助。

  主要是不想总是碰电脑。不想总是盯着屏幕,生活中有一些很漂亮的景色,我的眼睛渐渐适应了屏幕光和它的刷新、它的尺寸范围。当看开阔的东西时候,眼睛有些睁不开。用手把光线来源遮挡到像屏幕那么大的时候,就可以正常看得很远。总觉得用电脑,和这些电打交道不是那么合适,高丰富的内容在周围环绕,不一定非要通过电脑,可以是一些比较传统的方式,画画之类,到电影院看电影。

  至少现在可以做的事都和计算机有关。如果思想足够好的话,可以从中抽象出来,用到别的领域去解决 问题。别的领域...不知道可以做什么,现在这边还对软件架构比较有热情,不管是不是一时,是自己会经过的地方吧。

  觉得电脑,还有相似的工具,与其它东西最大的区别是可以玩video game。独立出来一个独特的空间来体验剧情,不需要小说里看到一些事物的描绘还要去想到底是什么样子,这样都可以直接看到、听到。比起video game来,电脑对企业服务的应用就像是小儿科了,也就是说,按道理来说如果用运转好游戏的逻辑去处理一些企业软件编辑,应该很容易做到。不是“按道理”,就是某种感觉。因为游戏逻辑要比软件逻辑在电脑里走的深。体验游戏的过程,是踏实了一个电脑里边的世界,有种从内部开始向周围思考逻辑的感觉。

  每个企业软件也应该有一个核心,从核心里看问题,每个固定服务都是个NPC,每个使用这个软件的人都是一个玩家。这样新的需求分三部分:给玩家的角色增加这份智能;从服务器世界多设置一个相关的NPC;给玩家设定一个对话这个NPC的路线。这样一边面向客户,一边面向服务,一边面向业务逻辑。

  面向客户这边是前端和主语言实现;面向服务这边是主语言和数据库实现;面向业务逻辑这边是全部交给主语言处理。对应的分别有些像view,model,controller。这样V部分做的是把视图用主语言包起来,M部分是把数据库用主语言包起来,C部分就直接用主语言引领包好的两部分、牵引玩家到各个NPC所在点对话。还有一个就是真正的controller,之前那个C只是用来领路的,不如改成map好了,真正的C是可以更改玩家角色技能,可以建立新的路线,可以增加新的NPC的那个游戏控制室。

  制造一个武器,先去买铁,再去打造师打造。后来要求高了,自制武器样式,要先去卖铁,再去铸模师,再拿着模子去打造。这个过程就是多了个铸模NPC,多了个用模子打铁的NPC,多了一个打铁移动路线。这样把问题立体化,还可以做很多事情,比如说各种NPC放在哪里,路线怎样设定,可是在不同的城市里,可以在楼上楼下,可以站在一起。这样变相解决高负载之类的问题。

  和游戏不同的是,这个map,玩家进来后所走的路线是程序员给定的,不同的需求直接给设定好不同的路线。而不需要玩家自己走。也就是编好表面,编好底层,然后程序员自己在中间玩,觉得玩得不顺可以申请到上层控制台改一改地图,从新布置一下各个NPC的路线和场景地图。

  这样一个软件里的部分有:角色,NPC,地图,代玩程序,游戏控制台。这五个内容相互协作,共同完成变动的软件需求。除了企业方增加软件需求以外,软件本身随着新需求加入后,时间的推移也在内部变动着,这种变动是不被企业直接看到的,可以影响到软件表现出来的效率。

  于是一个新需求进来,首先是软件吞掉这个新需求,然后随着新需求的运行再慢慢消化开。对用户来说是从“吞掉需求”的时候就可以用了。这样内部不断调整,当再来新需求的时候又可以先吞再消化到合适的状态,这个软件就可以持续健康增长。

  角色,NPC,地图,代玩程序,游戏控制台。这是一种新的建模方式,可以逻辑分成更形象的模块,给编程划分好更明确的职责区域。来新需求时各模块自身可以从整个软件中抽出来单独修改。现行的软件问题大概都可以通过模块之间的交互协调得到解决。

  稍微想到的是,这个建模方式之所以能解决很多问题,是因为把问题映射到更广阔的解决空间。角色功能的“增加方式”,NPC的“选取雕琢”,地图的“布景”,代玩程序的“游戏路线”,游戏控制台的“调整”,都是可以用来铺展软件问题并加以解决,进一步把计算机问题映射到适合人脑思考的空间。

  选取这种建模,架构起来职责分配就容易一些。在这里,角色是以前的view,npc是以前的model,地图和代玩程序协调组成以前的controller,游戏控制台像是原来软件架构。也就是把原来的控制层少部分逻辑合理的分离出来分给view和model(数据库连接/处理类),自身再裂变成map和代玩程序(director)两个模块,现行架构师站在游戏建造控制台对一些对软件的初建和成长进行角色(player)、NPC、map、director的调整。以这个模型在分配任务的时候网页设计手和程序员都比较容易理解自己的职责。分布式处理、高负载也很容易直观理解,把量大的数据访问分配给单独的NPC,调整下NPC在map上的位置让director容易跑。在建表的时候就以NPC角度考虑这个表/数据库的结构。在设置NPC功能的时候以游戏环境里NPC将被访问的量调整NPC的服务内容。即使都没有预设好,也可以在发现问题后各部分配合着进行灵活调整。

  在最外围,有个外部架构师。负责这五个模块的任务分配、逻辑抽象。这和controller部位的架构师任务有些不同,controller属于内部架构师,考虑的是场景控制,NPC分合,玩家新功能增加,以及和director的协调、处理反馈,吞进新软件需求。内部架构师直接涉及到了内部逻辑包括页面、主语言、数据库,它们的相互协调和工作分配。而外部架构师只是负责这个模型的完善,引导和教会整个团队调整思维角度,负责初始架构。

  每一个人都有自己考虑的范围。

转载于:https://www.cnblogs.com/flangrean/p/7429416.html

相关文章:

Vim对中文编码的支持[转]

Vim对中文编码的支持[转] Vim对中文编码的支持 1、支持中文编码的基础 Vim要更好地支持中文编码需要两个特性:multi_byte和iconv,可以用|:version|命令检查当前使用的Vim是否支持,否则的话需要重新编译。 2、影响中文编码的设置项 Vim中有几个…

C/C++中extern关键字详解

1 基本解释 :extern可以置于变量或者函数 前,以标示变量或者函数的定义在别的文件中 ,提示编译器遇到此变量和函数时在其他模块中寻找其定义 。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C&…

关于WPF的ComboBox中Items太多而导致加载过慢的问题

【WFP疑难】关于WPF的ComboBox中Items太多而导致加载过慢的问题 周银辉我的一个同事在加载字体列表时遇到了一个让人崩溃的问题:由于系统字体可能较多(可能有好几百项),导致使…

什么是3G通信

现在“3G通信”快要成为人们嘴上的口头禅了,那么您知道到底什么是3G通信吗?所谓3G,其实它的全称为3rd Generation,中文含义就是指第三代数字通信。1995年问世的第一代数字手机只能进行语音通话;而1996到1997年出现的第…

springMVC入门截图

mvc在bs系统下的应用 ---------------------------------------------------- 在web.xml中配置前端控制器(系统提供的一个servlet类 只需配置即可 无需程序员开发 ) -------------------------------------------------------------- ----------------…

Linux环境下的网络编程

本文介绍了在Linux环境下的socket编程常用函数用法及socket编程的一般规则和客户/服务器模型的编程应注意的事项和常遇问题的解决方法,并举了具体代 码实例。要理解本文所谈的技术问题需要读者具有一定C语言的编程经验和TCP/IP方面的基本知识。要实习本文的示例&am…

WEBSHELL恶意代码批量提取清除工具

场景 使用D盾扫描到WEBSHELL后可以导出有路径的文本文件。 最后手动去把WEBSHELL复制到桌面然后以文件路径命名,挨个删除。 D盾界面是这样的。 手动一个个找WEBSHELL并且改名效率太低,使用MFC写一个小工具方便去现场以后查WEBSHELL的工作。 技术思路 D盾…

判定两棵二叉树是否相似以及左右子树交换、层次编号

#include <iostream> using namespace std; #include <malloc.h> #include <stdio.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2#define MAX_TREE_SIZE 100//二叉树的最大结点数 typedef cha…

[Tracking] KCF + KalmanFilter目标跟踪

基于KCF和MobileNet V2以及KalmanFilter的摄像头监测系统 简介 这是一次作业。Tracking这一块落后Detection很多年了&#xff0c;一般认为Detection做好了&#xff0c;那么只要能够做的足够快&#xff0c;就能达到Tracking的效果了&#xff0c;实则不然&#xff0c;现在最快的我…

.net wap强制输出WML

强制输出WML:在web.config添加下面内容<system.web>下<browserCaps><result type"System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version1.0.5000.0, Cultureneutral, PublicKeyTokenb03f5f7f11d50a3a"/><use var"HTTP_USER_…

Tomcat在Linux上的安装与配置

1.安装好linux系统&#xff0c;下载适合的 Tomcat(jdk)下载JDK与Tomcatjdk 下载Tomcat 下载参考地址&#xff1a;jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmltomcat下载地址:http://tomcat.apache.org /download-70.cgi…

上机实践 1 初识 Java

实验 1 一个简单的 Java 应用程序 一、实验目的 掌握开发 Java 应用程序的 3 个步骤&#xff1a;编写源文件、编译源文件和运行应用程序。 二、实验要求 1. 参照教材中的指导&#xff0c;使用网络课程中提供的链接下载并安装 JKD 并配置环境变量。 2. 编写一个简单的 Java…

论COSPLAY / 谨以此文纪念我暂短的Cos生涯

COSPLAY是什么COSPLAY这一名词是是英文Costume Play&#xff08;服饰扮演&#xff09;的缩写&#xff0c;从事COSPLAY相关活动的人员一般被称为COSPLAYER。目前流行的COSPLAY活动内容主要集中于通过服装、道具、饰品等扮演动漫作品中的人物角色&#xff0c;而从宽泛的意义上来说…

python 3下对stm32串口数据做解析

1、最近有个想做一个传感器数据实时显示的上位机&#xff0c;常规的数据打印太频繁了&#xff0c;无法直观的看出数据的变化。 python下的上位机实现起来简单一点&#xff0c;网上找了一些python界面Tkinter相关资料和python串口的demo.测试实现了简单的数据显示。 Mark 一下问…

《深入理解计算机系统》第八章——异常控制流知识点总结

课本习题&#xff1a; 8.11 #include <unistd.h> #include <stdio.h>int main(){int i;for(i0;i<2;i) fork();printf("hello\n");exit(0);}/** Result:* hello* hello* hello* hello*/ 8.12 #include <stdio.h> #include <unistd.h>vo…

vs2003复制一个web窗体,没有更改指向同一个cs 文件,引发大问题

今天我在原来的考试系统的出题模块中,input模块,因为增加的一个web窗体编译有问题,于是就复制了原来的启动项页面input,再改了名字为set1,然后在set1页面上删除了控件和代码,再把set1设置为启动项,谁知道问题出来了:因为两个aspx文件都是指向同一个CS文件&#xff0c;从他们的H…

8.29 对象?数组?

今天发现我的filter函数有问题&#xff0c;翻不了页&#xff0c;一直报错&#xff1a; 这是一个封装好的Array原型扩展函数。 /* Array 原型方法扩展 */(function() {$.extend(Array.prototype, {// 添加内容&#xff0c;比push多一个检查相同内容部分add: function(item) {if …

Nginx的作用

1、Nginx简介&#xff1a; 2、简介&#xff1a; Nginx是一个高性能的HTTP和反向代理服务器。 支持的操作系统众多&#xff0c;windows、linux、MacOSX 可实现负载均衡 Rewrite功能强大 电商架构大部分都采用NginxTomcat的架构 3、命令行使用&#xff1a; 三个命令&#xff1a;(…

(转)TabContainer要实现服务器端回传

TabContainer要实现服务器端回传,出来在后台实现 OnActiveTabChanged 事件外, 还需要在前台实现 OnClientActiveTabChanged 事件&#xff0c;这是关键。 <asp:UpdatePanel ID"UpdatePanel1"runat"server"ChildrenAsTriggers"true"><con…

python 获取脚本所在目录

pythonsys.path__file__abspathrealpath 平时写python经常会想获得脚本所在的目录&#xff0c;例如有个文件跟脚本文件放在一个相对的目录位置&#xff0c;那就可以通过脚本文件的目录找到对应的文件&#xff0c;即使以后脚本文件移到其他地方&#xff0c;脚本也基本不需要改动…

《深入理解计算机系统》第十章——系统级I/0

目录 10.1Unix I/O 10.2文件 10.3打开和关闭文件 10.4读和写文件 10.5用RIO包建壮地读写 10.6读取文件元数据 10.7读取目录内容 10.8共享文件 10.9 I/O重定向 10.10 标准I/O 10.1Unix I/O 在Linux中&#xff0c;一切皆为文件。 文件I/O函数-------打开文件、读文件…

终于完成了“微软”化

整整忙活了一个下午&#xff0c;基本上我的笔记本完成了可怕的“微软”化进程&#xff01;是的&#xff0c;当我完成FOXMAIL中邮件向OUTLOOK2007的迁移后&#xff0c;在办公层面&#xff0c;已经完成“微软”化了。其实真的不想这样&#xff0c;但是想MS在独霸桌面后&#xff0…

C#创建Windows服务

利用VS.NET创建C# Windows服务在很多应用中需要做windows服务来操作数据库等操作&#xff0c;比如 &#xff08;1&#xff09;一些非常慢的数据库操作&#xff0c;不想一次性去做&#xff0c;想慢慢的通过服务定时去做&#xff0c;比如定时为数据库备份等 &#xff08;2&#x…

《深入理解计算机系统》第七章——链接知识点总结

目录 7.1编译器驱动程序 7.2静态链接 7.3目标文件 7.4可重定位目标文件 7.5符号和符号表 7.6符号解析 • 静态库(.a archive files) 7.1编译器驱动程序 7.2静态链接 7.3目标文件 7.4可重定位目标文件 使用readelf -S查看hello.o 一个典型的ELF可重定位目标文件包含以下…

排序算法之直接插入排序

1、基本思想&#xff1a; 已知待排序列r[1...n],先将序列中的第一个记录看成是一个有序的子序列&#xff0c;然后从第二个记录起逐个进行插入&#xff0c;直至整个序列变成关键字非递减有序序列为止。 具体操作如下&#xff1a; &#xff08;1&#xff09;查找出r[i]在有序序列…

【代码片段】如何使用CSS来快速定义多彩光标

对于web开发中&#xff0c;我们经常都看得到需要输入内容的组件和元素&#xff0c;比如&#xff0c;textarea&#xff0c;或者可编辑的DIV(contenteditable) &#xff0c;如果你也曾思考过使用相关方式修改一下光标颜色的&#xff0c;那么这篇技术小分享&#xff0c;你绝对不应…

如何划分155MSDH带宽

我们单位拟计划租用运营商155MSDH电路&#xff0c;由于我们单位应用业务较多&#xff0c;为了避免各业务之间相互影响&#xff0c;更好地分享带宽&#xff0c;根据各业务数据量的大小&#xff0c;分别赋予一定的带宽&#xff0c;使各业务在自己的带宽内传输&#xff0c;但不知选…

慕课袁春风老师《计算机系统基础》一二三部分练习题

2.2 1、下列几种存储器中&#xff0c;&#xff08; A &#xff09;是易失性存储器。 A. cache B. EPROM C. Flash Memory D. CD-ROM 2、下面有关半导体存储器组织的叙述中&#xff0c;错误的是&#xff08; D &#xff09;。 A. 存储器的核心部分是存储阵列&#xff0c;…

47种常见的浏览器兼容性问题大汇总

浏览器兼容性问题大汇总 JavaScript 31. HTML对象获取问题 32. const问题 33. event.x与event.y问题 34. window.location.href问题 35. frame问题 36. 模态和非模态窗口问题 37. firefox与IE的父元素(parentElement)的区别 38. document.formName.item(”itemName”) 问题 39.…

封装了一下我佛山人4.0 (支持vs2005)asp.net 页面验证

第一次写控件&#xff0c;拿“我佛山人4.0”开个刀&#xff0c;实际上也不算是什么控件&#xff0c;只是封装了一下&#xff0c;方便在asp.net中使用。 建议先看“我佛山人 4。0”文档。 声明&#xff1a;控件中参考了不少网上的源码&#xff0c;大家不要觉得眼熟BS人啊。注&am…