奇门遁甲排盘软件略谈-程序员宅基地

技术标签: c#  java  数据结构与算法  

不在于结构有多复杂,而在于结构能否满足需要。整体上软件纵向横向均有相应的层次,本软件是典型的“不经大脑思考”、“无完备预先计划”的,许多结构是在一步步的制作与重构过程中变化的。

由于在Smartphone上的性能比较重要,一开始最先考虑到的就是:
1、日后修改为WEB版与PC版时,只用重写界面部分
2、日后有可能打算往Java平台上迁移,故一些C#语言特性的东西需要放弃
3、无论是Smartphone还是WEB还是PC版,软件自身的界面布局必须是可定义的
4、日后需要增强格局分析之类的功能,针对字符处理的分析效率远远低于数据运算的效率,故在分析一类的功能上,不能是针对界面层显示来的,应该是针对内部的数据结构。

针对上述三个特色,初步的构想就是:
在界面层显示与其它软件部分之间,需要一个专门的映射层次,在这里,命名的是类的ViewCovert,为了能够在色彩渲染上很易扩展,因此,此处分别建 立为两个类,一个为ViewCovertBase抽象基类,专门负责符号的映射与扩展中必要函数的定义,这里这样考虑的原则是本层次要在尽可能不更动的情 况下,给界面层最大的灵活层,而ViewCovert类中,则包含着具体需要变动的类。ViewConvertBase类本身并不仅仅是一个类, ViewCovert类原则上不仅仅是ViewConvertBase的子类,它本身还负担着为接口映射界面提供完整数据的功能。故此处, ViewConvert本身还需要承担接口功能。所有的界面显示所需数据均需要自ViewConvert类处获取。
在本质上,ViewConvert作为映射层次,它本质上应该是一个适配器。

在界面层部分,主显示格局的窗口主要包含的应是绘制功能,在此处为了结构的清楚,不得以要牺牲少许性能,颜色的渲染要通过识别具体的文字来进行,并非在后台逻辑处理部分就确定颜色。

由于软件是可配置的,配置代表的是一个公共环境,应该具有是唯一实例,这里第一想到的就是需要一个公共的静态类实现配置功能,有一些极度唯心的人认为公共 函数或变量是非常不利的,用传值的办法最好,因此只能用传值,这里绝不敢苟同------与其传值传得晕晕乎乎,不如用一个公共值来获取比较好。以前处理 图形时,琢磨过,发现,纯静态类静态变量与类的性能没有单件的效率高,为什么我也不清楚,由于这里与单件比较累,在性能不没有到必要优化的地步时,先不管 它,目前先全部采用静态来实现。
配置功能的处理与实现,全部是在界面层完成的。界面的意义并非是呈现界面给用户,它完整的含义是与用户交互。而在后台逻辑中,需要用于的配置部分,也是直接从此静态类中猎取的,因此,就有了,配置部分的值写入是在界面层完成的,而读取它,则在任何一处都有可能。
这样的模型让人感觉似乎哪里不完美,仔细想了一下,此类并不会对系统造成什么影响,即使突然想拆除掉配置功能中的函数,也是可以轻易完成的(借助于伟大的编译器),故此处的考虑在维护上来说,不会造成不可预计的影响,同时这样的实现也是“立即换肤”的较理想的手段。


日历方面了,日历需要将日期转换为干支,因为此处的运算是不可避免的复杂,因此,此处必须仔细考虑如何保证较高性能的同时提供干支动态转换的需要。
把所有干支存下来用空间换时间是不可能的,因为所有的干支存储下来的话,数据量难免太大,即使自1900年起算,至2032年也有132年,干支要细到小时,因此这里处理出来有起码几万条数据,对于smartphone来说,空间与效率是不现实的。
如果计算的话,理论上年的计算是最简单的,找一个甲子年,找到年份,然后看过了几年,再看是否过了春分,即是否要另外重新建一新年,就可以非常快速地决定。
对于月来说,就比较麻烦,首先每月是根据节气而定制的,凡与月有关的术数,必然与节气有关,在这里,首先就要处理节气功能,经过仔细思考,做了一个节气转 换的小工具,把2000年~2032年的数据制作成了节气数据字典,大小在4K左右,考虑了一下,既使加入到1900年的,容量会大4倍,再加每条数据多 出来的2个字节,容量极有可能在16K左右。目前暂用的是4K数据,检索效率目前极度满意(瞬间),但如果是16K的话,检索效率又会如何?头痛,未敢尝 试。

真太阳时数据,真太阳时数据也是需要制作数据字典,与上面是相同的,制作出来约有2K左右,虽然感觉还是大了些,还还是可能接受的。

打算尝试一下,如果在内存中解压数据,效率上空间会快还是会慢?Smartphone的IO读写效率虽然不高,但运算效率非常高是肯定的。

转载于:https://www.cnblogs.com/William_Fire/archive/2006/03/30/362662.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34179762/article/details/94460187

智能推荐

第五章 微服务框架-Spring Boot、Spring Cloud_springboot微服务-程序员宅基地

文章浏览阅读526次。随着动态语言的流行(Ruby、Groovy、 Scala、 Node.js) ,Java的开发显得格外的笨重繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。在上述环境下,Spring Boot应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置 ,让你无需手动进行配置)的理念让你的项目快速的运行起来。_springboot微服务

如何查看数据包路由和转发情况_看发送的数据包的转发过程-程序员宅基地

文章浏览阅读1.7k次。tcpdump是一个强大的网络分析工具,可以捕获和分析网络流量。它可以应用于任何网络接口,包括veth、bridge等设备。例如,你可以使用以下命令来捕获在某个veth设备上的流量:其中vethXXX是你想要观察的veth设备的名称。: ip命令是一个多功能的网络配置工具。你可以使用它来查看网络设备、路由表、ARP表等信息。例如,你可以使用以下命令来查看veth设备的状态:你还可以使用以下命令来查看路由表:: netstat命令可以显示网络连接、路由表、接口统计等信息。_看发送的数据包的转发过程

计算两个经纬度点之间的距离_getdistance求经纬度之间的距离-程序员宅基地

文章浏览阅读1.2k次。计算经纬度点之间距离的算法 getDistance(lat1, lng1, lat2, lng2) { const radLat1 = lat1 * Math.PI / 180.0; const radLat2 = lat2 * Math.PI / 180.0; const a = radLat1 - radLat2; con..._getdistance求经纬度之间的距离

Unity + Grpc + protobuf + C# 使用流程详解_unity grpc-程序员宅基地

文章浏览阅读3.7k次,点赞11次,收藏30次。最近公司的一个unity项目要把通信方式从Photon替换成grpc,正好系统学一下grpc,以下是我的学习心得。本篇博客系统详细地介绍了unity使用grpc通信的全部要点,希望可以帮助到大家。奥利给!详解目录一、本篇博客知识点简介二、资源及工具的下载地址1、protocolBuffer各个版本2、GRPC3、grpc_unity_package.2.27.0-dev4、.NET Core SDK 2.1及以上三、C#使用Grpc方法流程1、新建项目2、定义服务3、使用GRPC.Tools自动生成.c_unity grpc

Keil出现无法生成.hex文件,经检查,发现是MULTIPLE PUBLIC DEFINITIONS。_keil生成不了hex文件的原因multilple-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏6次。Keil出现无法生成.hex文件,经检查,发现是MULTIPLE PUBLIC DEFINITIONS。 实际并不应该出现这种问题。 回顾新建项目时在选择单片机型号STC12C5A60S2后,在CPU栏没有选择默认,而是选择了 Use Extended Linker(LX51) instead of BL51 和 Use Extended Assembler(AX51) instead of ..._keil生成不了hex文件的原因multilple

hibernate 的dialect(方言)配置_hibernate.dialect配置-程序员宅基地

文章浏览阅读4.2k次。转自:https://blog.csdn.net/baidu_40487407/article/details/93042568RDBMS方言RDBMSDialectDB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibern..._hibernate.dialect配置

随便推点

记录一次kafka内存溢出,消费慢_kafka消费导致内存泄露-程序员宅基地

文章浏览阅读1k次。记录一次kafka内存溢出,消费慢_kafka消费导致内存泄露

前端学习week9-程序员宅基地

文章浏览阅读933次,点赞12次,收藏29次。数据存储在用户浏览器中设置、读取方便、甚至页面刷新不丢失数据容量较大,sessionStorage和localStorage约5M左右正则表达式是用于匹配字符串中正负组合的模式。在JavaScript中,正则表达式也是对象,通常用来查找、替换哪些符合正则表达式的文本作用:表单验证、过滤敏感词、字符串中提取我们想要的部分const 变量名 = /表达式/其中/ /是正则表达式字面量基于VueCli自定义创建项目架子安装脚手架创建项目。

解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题_qlineedit输入中文无法删除-程序员宅基地

文章浏览阅读2.1k次。解决方法均来源于论坛,自己把它给整理一下1,因为自己做的界面用到了lineedit,但是发现第一次点击lineedit获得焦点就可以弹出输入法界面,但是再重复点击的时候就不能弹出来了,必须重新获得焦点,于是通过重载重载了QLineEdit的mousePressEvent在mousePressEvent加上一个自定义的信号 emit clicked()重载代码如下:mylineedi_qlineedit输入中文无法删除

jeb 下载-程序员宅基地

文章浏览阅读1k次。jeb-1.5.201408040(full)_keygen_by_scz(20150725) http://scz.617.cn/ 修改jeb_wincon.bat 中java home 变量,然后就可以启动 注册机 java kegen_jeb下载 csdn

python绿色参数_Python进阶三部曲之IO操作-程序员宅基地

文章浏览阅读60次。IO编程文件读写打开文件open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) 具体需要查看API,这里只介绍几个常用的方法。open函数的文件名是必传参数,返回一个文件对象#打开一个文件。f = open('read.txt', 'r')open函数的mode参数:值..._python程序里面传进去的参数是绿色

高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)_高通提取dtb-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏61次。本系列导航:高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)一.什么是DTS?为..._高通提取dtb