﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-mixlee-文章分类-系统架构</title><link>http://www.blogjava.net/mixlee/category/7019.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 10:44:52 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 10:44:52 GMT</pubDate><ttl>60</ttl><item><title>今天关于系统中对象结构的思考，终于解决了一个长久困扰的问题</title><link>http://www.blogjava.net/mixlee/articles/43142.html</link><dc:creator>mixlee</dc:creator><author>mixlee</author><pubDate>Tue, 25 Apr 2006 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/mixlee/articles/43142.html</guid><wfw:comment>http://www.blogjava.net/mixlee/comments/43142.html</wfw:comment><comments>http://www.blogjava.net/mixlee/articles/43142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mixlee/comments/commentRss/43142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mixlee/services/trackbacks/43142.html</trackback:ping><description><![CDATA[系统中有两种数据类型
一：实体类，对应数据表，等同于hibernate实体类。
    该类提供CURD操作？
二：动态类，该类用MAP数据结构来存储属性与属性值，
    该类可以处理多表关联查询等应用。
    该类不提供CURD操作？
    在创建该类时，可以依据其属性的数量来控制MAP以及LIST的length，达到优化的目的。

对于这两种数据类型，提供一个抽象类，
该类提供getValue,setValue方法，可以统一两种数据类型的付值与取值。
方便在页面统一的取值处理。


对于实体类与动态类，同时提供XML文件定义。
XML定义提供overwrite和extends概念。
具体实施方法是
对于extends，提供表名的extends属性，该属性的值指向其父定义文件。提供extends定义才能支持
overwrite属性，overwrite可以覆盖父文件的定义，该定义可以包括表或则字段级别的定义。

对于多表关联查询，对应到动态类。
表名可以用别名表示，实施规则依SQL规则。
可将HQL写在XML定义文件里，方便修改及管理


提供系统自定义的数据类型，具体参照sophia系统实施<img src ="http://www.blogjava.net/mixlee/aggbug/43142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mixlee/" target="_blank">mixlee</a> 2006-04-25 22:37 <a href="http://www.blogjava.net/mixlee/articles/43142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对于昨天的权限系统的补充</title><link>http://www.blogjava.net/mixlee/articles/42646.html</link><dc:creator>mixlee</dc:creator><author>mixlee</author><pubDate>Sun, 23 Apr 2006 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/mixlee/articles/42646.html</guid><wfw:comment>http://www.blogjava.net/mixlee/comments/42646.html</wfw:comment><comments>http://www.blogjava.net/mixlee/articles/42646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mixlee/comments/commentRss/42646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mixlee/services/trackbacks/42646.html</trackback:ping><description><![CDATA[可以用AOP的模式插入系统中，这样就可以完全解耦权限系统。应该还不错<img src ="http://www.blogjava.net/mixlee/aggbug/42646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mixlee/" target="_blank">mixlee</a> 2006-04-23 13:25 <a href="http://www.blogjava.net/mixlee/articles/42646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天构思的权限系统</title><link>http://www.blogjava.net/mixlee/articles/42504.html</link><dc:creator>mixlee</dc:creator><author>mixlee</author><pubDate>Sat, 22 Apr 2006 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/mixlee/articles/42504.html</guid><wfw:comment>http://www.blogjava.net/mixlee/comments/42504.html</wfw:comment><comments>http://www.blogjava.net/mixlee/articles/42504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mixlee/comments/commentRss/42504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mixlee/services/trackbacks/42504.html</trackback:ping><description><![CDATA[对于功能模块是呈树状结构的，可以做到最底端的子模块上。
在系统缓存里保留权限树，对系统提供权限服务。
用户凭用户标识象系统请求权限范围，比如进入模块，会取得用户对这模块的子模块的权限，然后就可以控制是否提供子模块的入口，同时可以效验用户对所进入模块的权限。
系统权限缓存保持一定得缓存池，每一个用户对应有一个该用户的权限树。
同时提供角色以及组的定义。
权限提供继承的概念<img src ="http://www.blogjava.net/mixlee/aggbug/42504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mixlee/" target="_blank">mixlee</a> 2006-04-22 17:12 <a href="http://www.blogjava.net/mixlee/articles/42504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近看了看tapestry</title><link>http://www.blogjava.net/mixlee/articles/41227.html</link><dc:creator>mixlee</dc:creator><author>mixlee</author><pubDate>Sat, 15 Apr 2006 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/mixlee/articles/41227.html</guid><wfw:comment>http://www.blogjava.net/mixlee/comments/41227.html</wfw:comment><comments>http://www.blogjava.net/mixlee/articles/41227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mixlee/comments/commentRss/41227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mixlee/services/trackbacks/41227.html</trackback:ping><description><![CDATA[tapestry还是过于复杂。
他的优势就是能直接把HTML做为模板。
但是他的设计理念太过时了，还用老的GUI那一套来做。
页面同后台联系太紧密，不赞同PAGE对象这个概念。
我认为前台页面显示应该同后台分割开来。最好是完全分割开，
但是怎么才能完全分割开？对这一点我还没有好的解决办法。
可配置应该是一条路，再继续思考吧<img src ="http://www.blogjava.net/mixlee/aggbug/41227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mixlee/" target="_blank">mixlee</a> 2006-04-15 14:05 <a href="http://www.blogjava.net/mixlee/articles/41227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>放弃ER关系是否是另一条通往罗马的大道？</title><link>http://www.blogjava.net/mixlee/articles/40516.html</link><dc:creator>mixlee</dc:creator><author>mixlee</author><pubDate>Tue, 11 Apr 2006 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/mixlee/articles/40516.html</guid><wfw:comment>http://www.blogjava.net/mixlee/comments/40516.html</wfw:comment><comments>http://www.blogjava.net/mixlee/articles/40516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mixlee/comments/commentRss/40516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mixlee/services/trackbacks/40516.html</trackback:ping><description><![CDATA[对于应用系统。
长久以来存在着两个建模。
一个是在数据库层的ER关系模型，
另一个是在应用系统里的OO模型。
应用系统为什么开发麻烦，很大一个原因是因为要在一套系统里同时维护两个模型，动了ER模型，必然会影响到OO模型，动了OO模型必然会影响到ER模型。我们很大一部分精力是在维护这两个模型的统一。这完全是做无用功。
一个有效率的系统只应该存在一个现实模型。这样就不必为了维护与另一个模型的对应而绞尽脑汁。
在OO思想还未出现的时候，是没有这种烦恼的。那时的应用系统是数据库驱动型，只需要在数据库里建立一个ER模型，则整个现实的模型就已经建立，剩下的只是操作和显示。
OO的引入是对应用系统开发的一次变革，但遗憾的是数据库方面并没有同时跟进。面向对象的开发其中心思想是在应用系统里用对象来建立一个现实系统的模型。要遵循面向对象的开发方式则必然会在OO层面建立一个模型，但传统的数据库模型并没有抛弃，同样存在在系统里。这样我们需要建两次模，同时需要维护两个模型，而且还需要维护这两个模型之间的统一。这无疑是一个愚蠢的做法。
有两条出路来解决这个问题。
第一，以数据库模型为标准，放弃系统的OO模型，这就是数据库驱动的开发方式。不需要对象。这种开发方式很高效，但麻烦也是显而易见的，不够灵活。当需求发生变动的时候，改动ER模型会带来巨大的影响。当初抛弃这种方式也应该是为了解决这个问题吧。
第二：抛弃ER模型，只专注于OO模型。这样系统比较直观，对于系统的扩展和维护人员的接手都是比较容易的。但麻烦是对象需要存储。这就需要以一种结构存储在数据库中。这种结构绝对不能是ER关系。这就需要创造出另一种关系模型。然后在对象与数据库之间做好转换。数据库层对对象来说是不可见的，开发人员只需关心对象的模型就OK。在对象与数据存储上需要提供一种转换，比如随着业务的变更，对象需要新增一个属性，那么必须要提供一个后台的转换机制，把这个新增的属性自动添加到数据库中。还需要提供一个对象的查询机制。<img src ="http://www.blogjava.net/mixlee/aggbug/40516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mixlee/" target="_blank">mixlee</a> 2006-04-11 20:48 <a href="http://www.blogjava.net/mixlee/articles/40516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>