开发进入了非常实质的状态,基本上每天都解决很多问题并且遇到更多的问题,怎一个心情激动加突飞猛进了得。
因为最近开发日志有些跟不上开发进度,所以这次先回顾一下,上回说到继ER图搞定后迅速使用MySQL建起了Orange数据库以及其中四张表,admin,customer,manage和connect,其中两个实体admin和customer,两个关系manage和connect,并且在eclipse中完成了一个小小的服务器server和用来发包的sender程序,今天详细讲一讲上次做出来的东西的不可行性。
大家知道,CS模式分为三层架构模型,客户机,服务器,和数据库。而真正让人捉摸不清的就是服务器,这个服务器到底是我们自己编写的server端还是我们所熟知的SQL server或者我正在使用的MySQL服务器呢,开始我也搞不清,总以为服务器最好自己来写,然后用自己写出来的server连接数据库,进行相关操作再将结果通过Socket发送给客户机。于是先前写的sender和server就是这样的一个思路,完成了一个管理员注册的功能,感觉也确实很不错,就是一个简单的发包,然后收包,再将受到的包解析,完成请求的数据库操作指令,思路很清晰。
然而,当我准备再写一个功能的时候,比如说查看所有的管理员的时候,却发现很难动代码了,原因处在server端上。如果按照刚刚的思路,server端毫无例外要利用多线程处理很多来自不同主机的并发请求,而这些请求又需要对数据库进行各种不同的操作,如查表,添加,以及删除等等,而查表所返回的将是一个数据集,添加和删除等操作又将返回boolean类型的变量给客户端告诉对方是否成功,可以试想我们写出来的server端将是一个怎样的程序!
解决问题的办法是:大胆的抛弃server端编程!
为什么我们叫它SQL server,为什么我们叫它MySQL server,就是因为它本身就是一个服务器软件,而这样的一些优秀产品所用的多线程以及处理并发性连接的性能都是比较可观的,我们无需再编写建立在客户端和MySQL之间的所谓的服务端了,要不然你的数据库完全可以不需要什么什么服务器,直接搞个EXCEL或者TXT文本文件都可以拿来做本地数据库了。这是我所理解的CS三层模型:

其中的server就是MySQL server,而database则是MySQL的数据库文件系统,是用来存放数据的硬盘空间,今天的开发日志花了很多笔墨在这个上面,我希望阐述一下这样的一个思维演变的模式,这是我所倡导的编程艺术,程序员一定一定不能动辄代码,大多数时候思维方式在项目开发中起到决定性作用,程序员用实现功能依靠代码,而策划功能依靠自己的思维,一家之言。
明天周末,打算去盐城看女朋友了,今天的开发日志就写多一点,尽量跟现在进度同步。
现在让我们来回顾一下Orange整个项目的初衷,我们是想要实现一个局域网内的聊天程序,并且这个系统有适当的管理模块,可以对用户间以及用户间的交流进行相应的控制,并且在网络传输的过程中使用DES加密。按照以上的策划,我们的客户端就需要有两个,一个发布给所有的聊天者也就是customer,另一个发布给管理员(这就是CS模型的弊端,开发成本高,不利于更新和维护)。
在我的项目文件中建立了三个包,一个frame包专门存放有关窗体的class文件,一个session包用来处理与服务器的会话,还有一个subject包用来存放四个实体admin,customer,manage和connect,将这四个在数据库存在的实体和关系都做成可序列化的类,便于UDP的传输,防止一条信息在UDP传输过程中发生丢包现象导致整个收包信息混乱,做成类然后序列化后再传输就保证要么这个整个信息收不到,抛出TimeoutException异常,要么受到的信息就是完整的,可以反序列化得到对象的输入流。现在已经完成了管理员登录界面和相关的登录操作,登录成功后将判断该管理员的权限,admin表中power字段为1的管理员将有权限管理其他管理员,而power为0的管理员只能对所有普通用户进行常规管理,系统中的管理员对他将是不可见的。接着做出了超级管理员添加另一个管理员的界面,截图如下:


代码没什么好说的,想到的功能java基本上都能实现,而且非常干净清晰,一看就明白,在按钮上添加监听器虽然麻烦了点,但是这才是事件驱动的本质,像MFC那样的双击一个控件就可以写事件的时代不再了,那是一个微软愚民的时代,java让我们这样实现得更加心安理得,从另一个层面上讲也更加灵活!好了,今天的开发日志到此为止吧,脚很冷了,手不冷,呵呵,原因是我买了个USB电热鼠标垫,准确的说是买了两个,明天去盐城送给她一个*_*
因为最近开发日志有些跟不上开发进度,所以这次先回顾一下,上回说到继ER图搞定后迅速使用MySQL建起了Orange数据库以及其中四张表,admin,customer,manage和connect,其中两个实体admin和customer,两个关系manage和connect,并且在eclipse中完成了一个小小的服务器server和用来发包的sender程序,今天详细讲一讲上次做出来的东西的不可行性。
大家知道,CS模式分为三层架构模型,客户机,服务器,和数据库。而真正让人捉摸不清的就是服务器,这个服务器到底是我们自己编写的server端还是我们所熟知的SQL server或者我正在使用的MySQL服务器呢,开始我也搞不清,总以为服务器最好自己来写,然后用自己写出来的server连接数据库,进行相关操作再将结果通过Socket发送给客户机。于是先前写的sender和server就是这样的一个思路,完成了一个管理员注册的功能,感觉也确实很不错,就是一个简单的发包,然后收包,再将受到的包解析,完成请求的数据库操作指令,思路很清晰。
然而,当我准备再写一个功能的时候,比如说查看所有的管理员的时候,却发现很难动代码了,原因处在server端上。如果按照刚刚的思路,server端毫无例外要利用多线程处理很多来自不同主机的并发请求,而这些请求又需要对数据库进行各种不同的操作,如查表,添加,以及删除等等,而查表所返回的将是一个数据集,添加和删除等操作又将返回boolean类型的变量给客户端告诉对方是否成功,可以试想我们写出来的server端将是一个怎样的程序!
解决问题的办法是:大胆的抛弃server端编程!
为什么我们叫它SQL server,为什么我们叫它MySQL server,就是因为它本身就是一个服务器软件,而这样的一些优秀产品所用的多线程以及处理并发性连接的性能都是比较可观的,我们无需再编写建立在客户端和MySQL之间的所谓的服务端了,要不然你的数据库完全可以不需要什么什么服务器,直接搞个EXCEL或者TXT文本文件都可以拿来做本地数据库了。这是我所理解的CS三层模型:

明天周末,打算去盐城看女朋友了,今天的开发日志就写多一点,尽量跟现在进度同步。
现在让我们来回顾一下Orange整个项目的初衷,我们是想要实现一个局域网内的聊天程序,并且这个系统有适当的管理模块,可以对用户间以及用户间的交流进行相应的控制,并且在网络传输的过程中使用DES加密。按照以上的策划,我们的客户端就需要有两个,一个发布给所有的聊天者也就是customer,另一个发布给管理员(这就是CS模型的弊端,开发成本高,不利于更新和维护)。
在我的项目文件中建立了三个包,一个frame包专门存放有关窗体的class文件,一个session包用来处理与服务器的会话,还有一个subject包用来存放四个实体admin,customer,manage和connect,将这四个在数据库存在的实体和关系都做成可序列化的类,便于UDP的传输,防止一条信息在UDP传输过程中发生丢包现象导致整个收包信息混乱,做成类然后序列化后再传输就保证要么这个整个信息收不到,抛出TimeoutException异常,要么受到的信息就是完整的,可以反序列化得到对象的输入流。现在已经完成了管理员登录界面和相关的登录操作,登录成功后将判断该管理员的权限,admin表中power字段为1的管理员将有权限管理其他管理员,而power为0的管理员只能对所有普通用户进行常规管理,系统中的管理员对他将是不可见的。接着做出了超级管理员添加另一个管理员的界面,截图如下:


代码没什么好说的,想到的功能java基本上都能实现,而且非常干净清晰,一看就明白,在按钮上添加监听器虽然麻烦了点,但是这才是事件驱动的本质,像MFC那样的双击一个控件就可以写事件的时代不再了,那是一个微软愚民的时代,java让我们这样实现得更加心安理得,从另一个层面上讲也更加灵活!好了,今天的开发日志到此为止吧,脚很冷了,手不冷,呵呵,原因是我买了个USB电热鼠标垫,准确的说是买了两个,明天去盐城送给她一个*_*