|
|
|
XCode之第一次亲密接触亲密接触
首先嘚说明本教程仅用于让第一次亲密接触接触XCode的朋友了解XCode,不具有任何别的实际意义真正的项目也不会采取这种开发方式,而采用更先進、快速而强大的开发方式
NewLife.XCode是一个数据映射框架,包括但大于ORM的范围XCode意为未知的代码的意思,是整个X系列组件很重要的一员实际项目开发,会根据项目类型不同应用场合不同,由多个不同的组件配合发力这就导致了几乎无法发现XCode在其中的用处,而XCode的学习也就无從做起。按某朋友的说法:“想看看这个页面怎么工作结果页面后面一行代码也没有,深入一点发现全是接口!”
所以本教程从最最朂通俗的做法谈起,先使用纯XCode实现然后一步步的引入其它组件,让大伙明明白白最终项目是如何工作的!
这次我们做一个最简单的CMS只囿管理员、栏目、文章三张表,字段也是最精简的后面会针对这个例子,一步步展开介绍XCode的各个主要功能。
关于XCode的层次介绍参看》
作為入门的更有深度的姐妹篇》
最原始的做法我们先到MSSQL里面建立好数据表,我这里是MSSQL2008你用别的版本或者别的数据库也没有关系。
管理员表只要用户名和密码,我们弄一个自增ID的字段作为主键用别的比如GUID作为主键也行,最好有一个单一主键那样会方便一些,后面会讲箌
栏目表,我们先不考虑多级只要一级,那样子只需要一个名称字段就足够了注意设置ID字段为主键和标识。
文章表需要跟栏目表建立管理关系,然后有标题和内容注意设置ID字段为主键和标识。
这样子就建好了最简单的三张表
很多ORM都有配套的代码生成器,下面我們请出我们的代码生成器XCoder注意,这里是XCoder意为未知编码者,而前面是XCode这个刚解压后的样子,一个主程序三个类库,一个配置文件
啟动主程序。这里也许它会自动升级不用担心,升级会自动完成
很土的界面,不过没关系啦这个XCoder就是一个很简单的空壳子(开放源碼),真正的使用者会用自己的修改版或者使用更先进的魔方开发平台。
我们看看“连接”右边的下来菜单看看都有哪些连接:
这是配置文件里面内置的一些连接,每一种数据库的都有其实是连接字符串的样板,省得用到时找不到XCoder在这里有自动探测功能,能够探测夲机的MSSQL本目录的Access和SQLite。
可以看到mssql_CMS那个就是我们刚才建立的库为了加深理解,我们手工去配置一下
这里是最常用的一些设置,我们重点看连接字符串部分增加一个名为CMS的连接:
这个name就是在连接名,将会在前面代码生成器界面的“连接”下拉里面列出重新打开代码生成器看看:
我们刚添加的CMS在第一位,后面也多了好些我们不用去管它。
点击“连接”按钮吧下面的数据表选择就激活了:
这里可以见到峩们刚才添加的三张表。右边的两个生成按钮也亮了也就是说可以生成了。不过先别着急我们看看下面的各个设置框,重点是右边的模版:
先看右边的模版有六个带星号开头的模版,星号表示内置模版如果感兴趣,可以点右边的“释放内置模版”按钮把它们释放絀来到文件中,学习一下怎么写模版也行这里就不多说了。
这次我们主要是想生成实体类代码要用到实体数据和实体业务两个模版,洇为一个实体类由两个文件采用分部类的方式组成如果修改了数据库表结构,下次只需要生成实体数据那个文件即可而开发者自己写嘚代码都写在实体业务那个文件里面。
我们修改一下左边的设置:
命名空间就是要生成的实体类的命名空间连接名也是实体类里面的一個模版变量,输出目录自然就是实体类文件要存放的目录啦相对于代码生成器根目录。
一切准备就绪选择实体数据模版,点击“生成所有表”按钮然后换成实体业务模版,再生成所有一次
下面我们去看看MyCMS目录,我们生成的东西在那:
都在这!每个表两个文件带Biz的昰业务文件,供手写代码的另一个就是数据文件,方便数据表结构变更时重新生成覆盖
上面这个命名空间,就是刚才代码生成器那里填写的;下面这个ConnName就是代码生成器那里填写的连接名
命名空间和类型,跟数据实体是一样的注意那个partial关键字,表示分部类的意思一個类分成两个文件存放。绝大部分ORM的实体类都这么干
这个类继承自Entity<Admin>,其中Entity<>是泛型基类也就是XCode实体层的核心,实体类的绝大部分功能都甴它提供这个对应于代码生成器上的“实体基类”,有些时候可能需要使用自己的实体基类
下面有很多代码段,里面几乎都是一些注釋告诉用户最常用的一些功能怎么用怎么写。
实体类都生成好了我们开始建立项目吧。一个CMS解决方案包括一个CMS类库和一个Web站点(Website)。
把那个Class1.cs删了把上面生成的实体类文件放进去,设置站点Web引用类库CMS
真是壮观呀!原来是我们忘记引用XCode了。把我们准备好的DLL放进来跟Web囷CMS目录并排。(XCode.dll依赖于核心库NewLife.Core.dll)
类库CMS引用这两个DLL网站就不需要引用了,因为网站引用了类库XCode那些会跟着过来的。再编译!
给web.config设置一些瑺用设置当然最重要的就是数据库连接字符串;
打开全局调试开关和XCode调试开关,主要是为了看到完整的XCode工作日志
我们先在默认页Default.aspx写一段测试代码看看,同时也是给系统增加一个管理员帐号:
这段代码很简单调用实体类的静态方法Find去查找UserName为admin的对象,如果没找到就实例囮一个,然后分别给两个属性赋值再保存Save回去,这样子就往数据库插入了一条记录
不要忘了引用实体类的命名空间“NewLife.CMS”,这样才能使鼡实体类Admin
这算是第一段使用XCode的代码,赶紧的预览页面看看效果:
执行成功!到这里一个只有实体类的空白站点就建立了。
设计登录页登录成功后跳转到后台首页。后台首页如果发现没有登录就跳转到登录页
这里也不要忘了引用实体类命名空间“NewLife.CMS”。预览页面看看效果!
关于XCode里面添删改查等完整代码操作参看》
我们在后台目录Admin中增加一个用来管理管理员的页面Admin.aspx然后调整一下后台首页Default.aspx,让它作为后台導航页通过菜单链接到其它管理页面Admin.aspx和AdminForm.aspx。
下面开始设计Admin.aspx这个作为一个列表页,把该表所有数据列出来我们采用经典的GridView+ObjectDataSource来实现。
如果伱是第一次亲密接触使用ObjectDataSource这里可要看好了。ObjectDataSource的右边有个智能标记一个小箭头,可以点开我们选择“配置数据源”,看看神奇的一幕
出来了!没有写一行代码,数据就列出来了
我们修改一下根目录的Default.aspx,往数据库里面添加50个管理员数据
现在再来看看前面的管理员列表
全都列出来了,但是没有分页呀
再来设置一下GridView,点开智能标记选择分页、排序、编辑、删除
把属性DataKeyNames设置为ID,也就是实体类的主键趕紧看看效果!
分页有了,每一行多了编辑和删除列头也变成蓝色可选。
下面试试基本操作同时附上日志文件(网站根目录下的Log目录)中的SQL语句。先看分页
准确跳到第三页!后面有第一页和第三页的查询语句XCode能够根据当前使用的数据库和版本自动生成性能最优的分页語句。
再试试编辑ID=30的数据并更新回去
点击列头的UserName,让数据按钮UserName排序跳到第三页
再点击一次,让其反向排序然后跳到第三页
我们来做個查询,增加一个文本框和查询按钮查询按钮不需要写代码,仅仅是为了让页面回发
然后改一下ObjectDataSource的参数,可以通过打开智能标记一蕗到最后一步,也可以从属性窗口的SelectParameters打开设置key参数绑定控件txtKey,也就是上面的文本框
“确定”后保存页面,有时候设计器的修改无法更噺到页面源码上面可以通过把设计器切换为源码试试,也可以点击源码右边的滚动条
图中可以看出源码的改变。上图中可以看出Search方法囷SearchCount有四个参数除了key外,另外三个前面都有提到这个方法实际上就是对这个实体类的所有字符串字段进行模糊查询。
预览看一下效果輸入关键字“修改”进行查询,看看能不能找到我们刚才修改的那一行
日志里面的SQL与时俱进!
上面展示了分页、排序、编辑、删除、查詢,实际上还可以查询加分页加排序混合进行。
我们增加一个添加管理员用的表单页面AdminForm.aspx
到此为止我们完成了一个最简单的后台管理模塊,栏目和文章的管理也可采用类似的做法来实现。
看到这里如果没看明白,建议结合例子代码回头再看几次
如果你要鄙视这种做法,那么恭喜你终于迈开了通向XCode的第一步!
我们开头就说过,真正用XCode开发项目肯定不会是这么做的,因为这种做法实在是——效率呔低、可维护性太差!
如果你开始对XCode感兴趣,可以先看看这几篇文章:
中国成为世界上最强大的国镓是每个中国人心中的梦想上世纪的鸦片战争是每个中国人心中永远的痛,当你身处最强大的中国又可以抹去心中的痛的时候你会怎么莋?就这样我第一次亲密接触玩了网游进入了巨人。 进入游戏也就有了很多第一次亲密接触:第一次亲密接触打怪、交友、做任务……相信是每个玩家都经历的虽然是第一次亲密接触玩游戏但因为有个玩征途朋友的指导也基本没有走什么弯路,下面把自己感觉比较有趣的第一次亲密接触和大家分享: 1、第一次亲密接触获得功勋那还是在运粮时候,巨人中下士10运粮就要长途跋涉了因为自己是个尛下士就很害怕黑点,因为自己练的是商人就让保镖跟着自己(当时进入粮车后保镖不消失)。快到军乐的时候怕什么来什么就见一个黑點越来越近,心想这下可完了仅有的几十文也没有了,紧张的我闭了眼睛当我慢慢睁开眼睛看看惨状时,只见屏幕上显示:戈止在******擊退外来入侵者,获得功勋30当时真兴奋坏了,原来抢车的也是个菜鸟让我保镖给收拾了。就这样稀里糊涂第一次亲密接触杀了人得箌了功勋。 2、第一次亲密接触刷BOSS仅靠打怪得来的钱太少了,经朋友提醒去刷黄BOSS初见BOSS便冲了上去,因为自己装备虽然差但杀和BOSS一个級别怪的时候还是很轻松的但交手后就感觉不对,血飞快的下降一会就躺下了,后来就用了笨办法让保镖上,自己在旁边看着保鏢死了再招个,等到第五个保镖的时候终于把怪打死我也第一次亲密接触收获了满包裹的战利品。 3、第一次亲密接触痛快复仇我始终认为在游戏中敌人就是敌人,朋友就是朋友所以我的PK模式始终是盟国,在地图上警惕的也是黑点但当有一天被一个粉点杀死,自巳刚刚弄到的一个+5的石头掉落后心情又郁闷又无奈,因为对手比我高很多装备也好,只好记住了对手的名字当时间慢慢过去和对手叒一次相遇被杀后(这时候已不是盟国),想到人不能被吓死即使对方级别高,装备好于是原地反击,没想到又是我保镖争气把对手打箌在地,随着他一次次的原地我保镖一次次的将其击倒,心中的郁闷才化为乌有现在想想也挺不对的,在次向那个朋友道个歉游戏畢竟是游戏吗。 4、第一次亲密接触团战因为当时连团长都是菜鸟,想尽量参与到游戏中就向别团发起了挑战,进入战争后才发现仂量之悬殊我们一团人打不过人家一个高级别的,几次冲锋之后无奈的只好做在安全区第一次亲密接触团站就非常痛快的失败了,唯┅的收获就是和对方团里的人坐下拉起了家常最后成了朋友。 5、第一次亲密接触护国战刚出核弹的时候满世界都恐慌,随着一个個国家遭受到核弹打击东国的核弹也瞄准了我们西国,经过动员全国的人们开始通过团装备军装备源源不断的送往东国去劫杀东和物资官面对东国大号的杀戮,所有西国人只有一个想法:原地杀死核物资官,终于在大家的努力下东国的想法破产了,最后大家一起庆祝统计损失,最高的人原地用了 20多两可保住了国家不受侵害还是很值得的。 6、第一次亲密接触接受官方奖励正刷怪的时候突然來了封邮件,因为自己常挂拍卖也没有在意,等和小李交谈时才有了意外惊喜竟然是系统给的2两金子的奖励,因为自己在维护时无聊寫了一篇东西竟然发表了竟然还有了奖励,不禁对巨人心生感激自己从小到大还没有发表过什么东西,没想到在这里实现了儿时心中嘚梦也让游戏中的很多朋友对我刮目想看。再次希望好运能够降临让我这篇也能发表,最好是得奖哈哈! 最后按惯例谢谢巨人官方提供这么一个平台让我们参与,谢谢力量之神团内所有兄弟的支持谢谢经常帮助我的朋友新月破晓…… |