创建基于ECO的Weblog系统(1)

创建基于ECO的Weblog系统(1)
 
 
我们以C#Builder 2006为开发平台示例使用强大的ECO技术开发Weblog系统,C#builder2006现在有 测试版下载,下载链接为 http://www.borland.com/downloads/download_delphi.html ,虽然Borland公司正在售出它的IDE产品生产线,但并不意味着这个产品的终结,反而是一个新的开始,因为摆脱了商业方面、决策方面的桎酷之后,IDE团队更能在技术上得到充分发挥。 下面创建Weblog过程是参考Dr.Bob的文章的,它是基于Delphi语言书写的项目,而我们现在使用Csharp语言,建立的是C#的ECOasp.net项目,参考链接如下 http://www.bitwisemag.com/copy/delphi/swart/blog1.html

第一步,选择C# Projects 的ECO ASP.NET WebApplication
命名为ECOWeblog,BDS环境将会自动在IIS中创建ECOWeblog虚拟目录

创建后的IDE界面布置如下:

选取Model view,打开内置的Together建模工具视图

在项目模型的根ECOWeblog上点击鼠标右键选择添加,再选择添加ECO Package。我们新加一个ECO的模型包,”包”这个概念在C#builder中是没有的,它是Borland公司为了自动化自成和管理ECO代码而设计的,使用一两个外部文件对创建的模型进行注解(这个问题,回头我们再探讨)
产生一个新的Package_2包。
我们更名为WeblogPackage
下面我们开始创建ECO类,注意创建ECO类,修改ECO相关的各种配置之后,我们一定要进行project的编译,就是Ctrl+F9,因为BDS这个IDE环境是由多个产品比如Together结合在一起工作的,有些地方无法自动的更新,需要我们手动地编译一下,否则我们在某些选项中将找不到新添加的ECO类与组件。
 
好,我们双击WeblogPackage,出现下面的编辑界面
我们把建模元素的ECO Class拖放到“图纸”中,可以看到一个名为Class_1的ECO类被创建了,在创建时更名或创建后在类图上按F2, 把它更名为Entry。我们先创建一个Weblog文章的基础类Entry (条目)
在上面点击右键选Add,可以看到我们能添加Attribute属性,Stat attribute状态机属性(这个我们暂时不涉及),Operation操作函数,Trigger触发器,Constructor类的构造函数,还有最后是的BDS 2006才有的ECO state Machine,对类进行状态机(对应UML)建模,这个我们暂时也不涉及。
我们为Entry建立下面的几个属性,并创建另一个新的ECO类Post,来描述weblog的每一条日志,我们同时为Post创建Contents:string属性,类型为字符串。Post是继承自Entry类的,所以我们选择类图元素的Generaliztion/Implementation,从Post画一个继承示意箭头到Entry,如下图。
补充一下,我们需要把Entry创建为抽象类Abstract,在点击类图后在Object Inspector中我们可以选择Abstract项,修改为true,此时Entry类图的entry标题会变成斜体字形
接下去我们修改Post的Contents类型,注意,我们创建该属性的时候千万不要把Contents写成contents,因为在ECO自动创建类的时候,会默认使用content作为其内部的一个类属性,我们不要与它冲突。
我们修改Contents的字符串类型长度为4096,这个长度不能太长,有些数据库的字符串值放不下这个长度。我们下面使用sql server 2000作为后台数据库,于是我们定内容blog的内容条目有4096个字节长度。
接下去我们还创建了另一个类,comment类,作为评论与回复的条目,它也是继承自Entry条目类,与Entry条目类一样,也是有Author作者,Posted发表时间,Title主题等属性。
接着我们为Post条目创建一个字数计数器,用于统计Blog条目有条少个字节。在类图上按Ctrl+M,添加WordCount:int,请注意我们是使用C# Builder部分,创建的是C#的Project,大小写是有区分的。
添加后我们进行第一次编译ctrl+f9 ,发现系统报了一个错误

这个是BDS 2006的一个Bug,它在创建Csharp的ECO类的时候没有自动添加返回值return语句,而其它语言是不一定要返回值的。双击错误提示我来到代码部分:
些时WordCount()函数什么都没有,我们添加些代码进去:
       public int WordCount()
              {
               bool InSpace=false;
               int result=0;
               foreach (Char C in Contents)
               {
                     if (C<=(char)32)
                      InSpace=true;
                     else
                     if (InSpace==true)
                     {
                      InSpace=false;
                      result++;
                     }
               }
               return result;
              }
噢,我们还发现少创建另一个类了,就是Category类了,所有的文章与评论都需要进行归类嘛。于是拖放ECO class到类图中,更名为Category,给上一个属性为Name:string。
 
接下去就是创建类之间的关连了,前面创建了类的泛化关系,现在创建类之后的包含,关连等等。在ECO元素中是Association。
我们选择Association,点击Post类,然后再点击Category类,便创建了一条Post与分类catetory之间的关连,我们要描述它们之间的多对一,多对多或一对多的关系
点击这条Association关连,我们在Object Inspector属性值列表中可以看到这些选项
由于一条blog日志对于对应0到多个类别(catetory),而一个类别可以对应0到多条blog日志,所以我们对该关连(Association)的参数修改如下:
End1:    Multiplicity=0..* Name=Posts End2: Multiplicity=0..* Name=Categories
General : Name=Categorization
我们可以得到下图:
然后我们再建立评论(comment)与日志记录(Post)之间的关系(Association)
因为一条评论只能对应一条Blog日志, 而一条blog的日志(post)可以对应多条评论,所以我们添加关连后可以得以下类图:
在这里我们先把这个Commentary关系的DeleteAction设为Cascade,就是说当我们删除日志条目Post的时候,对应的Comment评论条目(可能有多条)也就级联删除,相当于Master—Detail表的级联删除,在这里我们是以对象的方式进行级联的关连描述.
好了,到了这里我们需要手动Ctrl+F9编译一下代码,使ECO类图与自动生成的代码同步.
接下去我们要着手处理数据库和数据库连接的事情了,需要把ECO模型转换成实实在在的数据库结构和脚本.
 
点击Project Manager ,双击上面的EcoSpace.cs,转换到EcoSpace控件容器上,准备放置数据库连接与同步的控件,我们将使用Sql Server为例,由于网页有并发的访问,所以请考虑一下我们这种数据库链接得做些什么事情?
转换到EcoSpace下,先让我们来说说EcoSpace是个什么东西,ECO把它作为对象数据存取与计算的中心,ECO的设计师们主要想让它作为一个持久化层中的池,这个池中的活对象可以自由地变成数据库中的记录或者一个XML文件中的内容,持久化机制(Persistence  mechanism)就是把对象进行"封冻",把对象或其状态装进数据库,待需要的时候唤醒并从数据库中取回.
 
对于ECO Asp.net项目,我们必需对付来自多个客户端(ie等浏览器)的并发访问,也就是说我们必需在某在时候实例化多个EcoSpace同时进行对象操作,而这些池我们需要进行统一的数据存取,那么ECO技术架构师把EcoSpace的PersistenceMapper属性对应到persistenceMapperSharer1,这个为ECO asp.net默认创建的数据源共享器上.而persistenceMapperSharer1有名称为MapperProviderType的属性,用它指向一个真正数据源管理器EcoPersistenceMapperProvider. 而EcoPersistenceMapperProvider上将放置sql server的数据库连接,数据库连接的同步器等控件.总是看来就是这样:
EcoSpace >> PersistenceMapperSharer >> EcoPersistenceMapperProvider >> PersistenceMapperBdp >> Bdpconnection
 
在Project Manager中选取EcoPersistenceMapperProvider,在容器中我们放置PersistenceMapperBdp控件和syncHandler控件,得下图:
在PersistenceMapperbdp上面点击右键选取SQL Server Setup,设定通用的Sql属性
在PersistenceMapperBdp1的Object Inspector属性修改器中我们把SyncHandler指向syncHandler,在delphi2005环境中,这个属性只要设置active=true就可以,但在delphi2006环境中需要设置该控件.

然后我们对整个项目进行存盘,然后按Ctrl+F9编译系统
在编译完成后点击EcoSpace,在PersistenceMapperSharer的MapperProviderType属性选取EcoWeblog.EcoPersistenceMapperProvider
 
在EcoSpace的控件容器中,我们可以看到有这些功能图标,我们点击第一个功能图标,选取需要生成数据库结构的Eco类包(select Eco package)
双击后我们得到下面的界面:
我们把Selected Uml Package中的EcoWeblog.Package_1去掉,因为它是空的,是项目创建时默认创建的,然后把EcoWeblog.WeblogPackage点击到选取列表中.
 
在后我们来到Sql Server的企业管理器中创建一个名为ForWeblog的数据库
然后我们回到主界面,点击Data Explorer,在MSSQL上点击右键,选取Add New Connection,创建新的数据库连接
在提示窗口中我们把这个连接写成ForWeblog
然后我们在它上面点击右键选取Modify Connection,对连接参数进行修改
 
然后我们就可以修改这些属性,顺便使用Test功能测试数据库的参数是否正确.
 
然后我们回到EcoPersistenceMapperProvider上
放置bdpConnection控件到容器中,把persistencemapperBdp1的connection指向bdpconnection1
而把dbpConnection1的connectionstring指向ForWeblog,就是刚才在DataExlporer中创建的数据库连接
在PersistenceMapperProvider中点击下面功能图标
创建对象相应的数据库视图
 
 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值