还记得你有个作业叫商品管理系统么。-------如何把大学作业扩展成实用商务系统。 前言 序章 第一章(上)

来源:互联网 发布:网络炒作bjiko 编辑:程序博客网 时间:2024/05/21 09:49

前言

       嗯嗯,从今天开始,打算编辑一个系列的文章,写一写自己对于大学作业和实际我们所接触和使用的系统的差距,还有,如何才能让我的所学,转化成真正的实用的一个商用的系统。相信很多人都曾有过这样或那样的迷茫,学校里教的东西,都是在使用程序来解决一下数学问题。我们学习c/c++要算开方,学搜索,我们学习java要算开方,学搜索,我们学习c#我们学习jsp我们学校PHP都要做这些事情。仿佛这些语言之间只不过是不同的写法,实现相同的目的。于是,当然就有人会疑问。我们都用一个相同的方法来使用这个技术,那么,为神马人们还要发展这么多技术呢?

       当然,这是教育里面所缺失的重要一环。我们过于重视对于某一种技术的掌握和把握,过于重视一种技术的语法和使用方式,却忽略了技术使用环境,应用范围,可以扮演的角色等等最为基本的问题。比如说,我提起PHP和JSP,大家都知道是做网页的。那么做的是神马网页呢,PHP和JSP之间,又有神马样的联系和区别呢,JSP更适用于神马样的应用环境,php呢?如果心中对于这些问题没有一个认识,那么,对于我们而言,JSP也好,PHP也罢,他们甚至和C语言都是相同的---------完成作业的工具而已。

      一个实用的系统,是会分为很多部分的,有些时候,这些部分甚至是会由多个公司分别完成的,本文的目的,在于从一个大学课程中常见的作业实例,逐步扩展和修改成一个有一定功能的小型实用系统,本人技术实力有限,行文中出现什么纰漏或者并非良好的建议和提议,请各位看官不吝赐教。

 

-------------------------------------------啦啦啦 ~\(≧▽≦)/~啦啦啦 我叫分割线----------------------------------------------

 

序章  一个常见的作业

       “使用C++语言设计一个商品管理系统,有管理员和用户两个角色,管理员可以添加和删除商品也可以添加和删除用户,用户可以查询商品价格。附加功能:系统可以根据对商品的查询次数对管理员提出建议,比如超过某一阀值就提出建议应当多进此种商品,某种商品在一个时期内查询次数较低,就提出建议应当降价处理。”

       其实这个作业的本意是让大家练习一下二叉排序树,是一个数据结构的实验题。我们很快就可以做出一个像模像样的系统,把数据文件保存在本地,一开始程序就读取这些数据文件,生成排序树,然后在使用这个树查找就好了,最后再加上一个命令行的UI,貌似真的像那么回事了。可是,我们实际使用的真是这样的东西吗?

 

第一章 数据乃安身立命之本。

++本地数据VS数据服务++

       我们不妨假设一下,我们现在是一个大型的连锁超市,这个系统呢,是供我们超市收银人员之用。那么大家想想看,这个系统最严重的问题是哪里呢?不是功能性的,不是结构性的,是一个让你以后会头疼到死的问题。

       也许你也想到了,我们的数据文件都保存在了本地磁盘上,如果我们有100个pos机,那么新进产品以后,我们的管理员就要一台一台的更新产品数据。来了新员工,也要一台一台的同步我们的用户信息。如果,哪天,这些员工们要求长薪水,他们值需要把pos机的密码改一下并换班就能造成各种各样的瘫痪。

       那么这个问题的原因是什么呢?

       这个问题的原因在于我们的数据,只保存在本地上,没有任何机制能使得数据进行共享和同步,这样子做的效果就是使我们的IT系统只变成了高级的记账本而已,所使用的方式和过去每个收银台单独记账,最后汇总做账的方式没有任何区别。“啊,我懂了”我相信有的同学一下子就能提出解决方案,我们把数据文件放到一台主机上,大家都去访问那一台主机不就可以了么?的确是个好办法,但是问题在于,同时访问一个数据文件所造成的IO冲突要如何处理?这个文件正在被写入而被锁定,因此我的查询没有结果怎么办?你将不得不面对一系列这样或那样的问题,那么到底要如何解决呢,其实,人们因为有这样的实践和应用,于是,对于数据的同步,共享等,我们早就有了一个专门的学科来进行研究,那就是数据库。我们完全可以使用数据库来代替这我们把数据存储在本地这种单一的模式,使用了数据库,也不必我们亲手去设计查询,不必亲手去写排序树等高级数据结构,对于市面上常见的关系型数据库比如 mysql, oracle,sql server,postage sql,等等,我们只需要合理的使用SQL语句即可,而有关数据的查找,同步,冲突,备份,还原等一系列问题,我们交给数据库这个系统软件就好。这样子,我们这个超市,就有统一的产品信息,可以汇集各个分店来的销售状况和信息,我们也不再需要那么多的人手来四处奔走去同步每一台POS机的数据了,随着时间的推移,我们可以建起一个有大量历史数据的销售记录库,对于我们的经营来说,可以起到一个很好的帮助作用,对于新的促销和销售战略,因为有了历史数据的支持,我们也可以很快的做出判断,是否新的政策是行之有效的。

 

++数据是一笔你想不到的财富++

       到了这个时候,你就会发现,对于一个企业来说,自己的各种数据,会是一笔丰富的资产,通过对大量数据的分析,就能提出对公司更为合理的建议,反过来说,新的数据也可以用来验证建议的合理性。而大量来自消费者的数据,更是我们与厂家讲价格说条件的有利武器。想到这些,我们应当有意识的为自己的系统提供一个数据分析的接口,以便以后对系统进行扩展的时候,可以很方便的加入组件。

++对象-关系映射与数据库抽象++

       说了那么多存储数据的好处,那么我们回过头来看看,怎么改进一下我们的系统吧,其实,我们把以前我们用于管理本地数据,查询本地数据的部分删除,取而代之的是连接到数据库服务器,发起SQL查询,处理回应结果就可以简单的实现把我们的本地数据文件迁移到数据库中,但是在此之前,我们要对我们的数据库做一次数据建模。

       数据建模很多人都听说过,但却又是摸不着头脑,神马叫建模,做这个是干嘛用的。为啥我们要建模啊?其实,简单来说,数据库建模就是给我们存储的数据建一些列的表格。关系型数据库的特点之一就是使用表格来存储数据,我们可以回忆一下,是不是我们上大学这些年,写过很多表格?有班级的,有学院的,有学校的,我填了很多很多项,但是却有很多是重复的,比如说你的年龄啊,姓名啊,学号啊,性别民族等等。这些信息你填了一遍又一遍,肯定都烦死了,因为已经是这个学校的学生了,这种事情,早就应该学校给印好啊。与此相似的是,我们数据库都是要占用磁盘空间的,如果我们一遍一遍去重复这种无用的信息,那么对于空间来说是一种极大的浪费。我们进行数据库建模的一个很大很重要的作用就是减少这个数据的重复,有一种方法是很好的,就是我们按照事物---属性来创建一个表格,一个表格只存储一类事物,只存储与其相关的本事的一些属性,然后我们在找寻这些事物之间的关系,是一对一一对多还是多对一,就可以容易的避免空间的浪费。当然数据库建模还有很多很大其他的考虑还考量,比如如何优化查询性能等等,如果你对数据库建模这个领域比较感兴趣,那么可以自行去阅读相关内容。这是一个很有技巧性的内容。

      说完了数据库建模,一些做软件的朋友可能发现了,数据库建模跟软件里面类有一些相似的地方,的确,正因为有这种程度相似性,才使我们能够方便的实施对象--关系映射。

(这是一个大的话题。下一次继续写。)

原创粉丝点击