jinyong

平淡生活,努力工作

导航

说都不会话了

 

    写此文的想法已经酝酿许久了,做开发久了,可能都会养成只会写代码不会说只会用代码来表达的坏毛病。今天强迫自己把这篇文章,应该叫设计报告写完,目的,一是为了弥补一下说都不会话的习惯,二是将自己这一年多以来的经验给大家总结一下。希望能成为“老少”皆宜的文章,能给新手上路有个好的起点,给老手一个简单方便的开发平台。

    强调一下,我本人水平并不高,而且人Very Lazy,只知道怎样方便实用,如果大家觉得我这个东西还行,可以凑合着用,就鼓励一下,不行只管扔鸡蛋!^_*

    Agile Framework是个想法很不错的开发框架,但是从提出想法到现在,也有好些日子了,可是都只是不停的说啊说想啊想,并没有实质性的东西,我不禁想起了一句话“薪水最高的是能完成任务而写垃圾代码的人”……关于Agile Framework可以参看他们的敏捷开发实验室:http://www.agilelabs.cn/

    记得我刚开始学.Net是看hiForums 官方网站:http://bbs.hidotnet.com/ ,设计很好,但刚入门就看那种设计高深的代码,学习效率低下不说,看了十天半个月也没看出个名堂!还好,经理建议写个论坛供公司内部使用,结果三个人折腾了一个月,终于可以给大家看看了,结果%$@$@@$,你可以想像出是怎样的惨不忍睹!不过还好,终于入门了。接下来,将一个已经成功了的C/S项目用B/S实现,这段时间是进步最大的,因为没有时间的限制,可以东瞅瞅西看看,网上有什么好的东西就搬下来用,过两天发现了更好用的东西又开始换,最明显的就是数据库访问类,一开始是自己写,根据做论坛时积累的那么一点点经累写了个数据库访问类,后来不断的完善,再后来发现了SqlHelper,大家合计了一下,干脆换成了SqlHeper……到现在为止,虽然还没有做过成功的项目,但这个框架是汇集多人的开发思想和开发经验,个人觉得应该比较完美和实用了。源代码待我明天整理整理,放在在家里建的SVN版本管理器上,顺便让大家也体验一下开源的版本管理器SVNSVN的瘟到死客户端可以到http://tortoisesvn.tigris.org/download.html 下载,就不占用dudu的宝贵空间了,一只可爱的小龟龟,集成到瘟到死的资源管理器中很好用!下的时候最好把中文包一起下下来,方便学习使用。

    此框架不仅仅是规范了开发,还定义了功能基类,完成如数据分页、增、删、改、查等功能,使用简单方便,使用代码生成工具完成大部分代码,理想是按秒来计算不涉及业务的单表、主子表的增、删、改、查的各层(包括界面)代码。因通用业务部分较复杂,现在的设计只考虑功能部分,以后将扩展为包含通用业务的封装。有关包含业务的框架,可以参考UCML——一个国产的WEB开发框架,它里面包含的内容较全面。

    (界面使用了李天平的DbToCode Demo,详细内容可参看http://ltp.cnblogs.com/archive/2005/12/28/306887.html   的文章)

 

一、           整体构架

1整体构架图:

        
    使用IBatis做为数据库访问层的底层访问基础,其好处是SQL语句保存在配置文件中,方便管理和修改,同时也增加了数据库访问层的可移置性。我在做Demo,家庭管理系统时使用的是SqlServer,后面有了个想法,把它移置到MySql下试试,马上动手,一边看着MySql的手册,一边进行移置,工作只是在配置文件里改一下Sql语法,很快就完成了。MySql的学习也从以前使用安装程序安装好就算完成到现在深入的用了一把,还真有些进步了,心里还暗暗自喜,要是那天客户说我不用SqlServer我要用别的,我能对他大声的说——没问题,留点测试时间,一星期搞定,嘿嘿!数据库访问层在IBatis的基础上进行扩展,并且实现接口层的数据库访问接口。在数据库访问层在进行数据库处理和事务管理。

    业务层与数据库访问层的访问通过容器,为什么要用容器呢,用一句话来概括:降低耦合性。使用Castle Windsor容器,配合Castle MVC组件实现MVC设计。同样,容器和MVC的配置都保存在配置文件里,方便查看和修改。

    对于业务逻辑的实现,可以在业务层来实现,也可以在数据库访问层实现,但界面层上不允许有与业务逻辑有关的代码。此设计的目的在于更大限度的保持开发的灵活性,以方便不同开发人员的习惯。如:有些人对SQL不熟,那么就可以将大部分业务逻辑写在程序里;对SQL熟的开发人员可以将业务逻辑放的数据库使用SQL来实现;顺便提一下Castle MVC,是Castle一个很不错的项目,虽然还在CastleSandbox中,但那是一个非常不错的.Net MVC组件,它不影响界面设计,也就是说就像开发常规的Asp.Net程序一样画界面,只需在将需要进行MVC处理的控件上加上CommandName=某个命令ID,然后它就会自动去找对应的导航页面。具体的代码可以看我框架里提供的例子。

    界面全部使用用户控件,包括列表显示、数据编辑、查询。具体的显示和编辑页面使用用户控件进行组合。

 

二、           功能设计

1、 表增

1)类图

    
    为了方便大家看,省去了一些辅助性的方法、属性和私有成员。

2)说明:

    该基类实现了单表情况的需要进行数据列表显示的显示界面级排序、查询。子类只需要将HTML上必要的控件从例子页面上复制过来,修改GridView中需要显示的字段和主键信息,然后在Page_Load()中加入一行代码base.GvMaster = this.gvDetail,在放置该用户控件的页面上写一个属性,即可完成功能。

    MasterSearchControl_Search()方法是在查询控件在点查询按钮后调用,这样就能实现查询控件与列表显示控件的同步。

    Page_Load()就不用说了,在页面加载处触发,进行初始化处理。

    BindData()方法是一个虚方法,可以子类中重写,实现数据绑定。在该方法中使用实体类做为参数的传递结构还真方便,省去了不同参数传递的问题。

    GoToPage()NextPage()PreviousPage(),是分页处理,分页使用IBatisIPaginatedList接口实现,SQL上不需要进行特殊处理,很方便而且速度很快,我做过5K条记录的测试,根本感觉不出慢。

    以下以_Click结尾的方法是界面上控件的事件处理。这些都全部在基类中进行了封装。
    
    今天就先到这里吧,其它的我明天再写!

posted on 2006-02-20 21:36  jy_kwwl  阅读(512)  评论(0编辑  收藏  举报