和我一起学CSLA.NET----设计模型及数据访问
来源:互联网 发布:龙桃子淘宝下架 编辑:程序博客网 时间:2024/06/06 03:09
从这一节开始,我们就带着这些问题,来学习CSLA 框架怎么使用。我并不打算在这里介绍CSLA框架的一些概念,如果你对面向对象这些概念仍然不是很熟悉的话,建议你还是大概看一下作者的书,我们还是采用CSLA.NET来结合实际使用完成一个简单的例子.
有很多人是先把数据库建好了再来用CSLA来写业务代码,有的是用Codesmith根据数据库生成。其实说实话这也未尝不可,不管黑猫白猫抓到耗子就是好猫嘛,呵呵,不过我个人认为这并不是最合理的,起码你在设计数据库时也应该考虑一下CSLA的业务对象怎么写,尤其是要考虑这些对象之间的关系实现起来的难易度,否则会使你的CSLA过于复杂。
为了尽量简单化,例子不会掺杂过多的业务,这样来更多的关注用CSLA.NET来实现的过程。我们就拿订单模型来做吧,先设计出整个领域对象:
主要包含订单,订单项,产品三个领域类,在这里暂时不考虑客户,而且我们现在也暂时不考虑权限控制,这部分在后面再加上来。我们对这几个对象再进行细化 :
我想同行们对这样的一个设计都已经相当熟悉了,订单包含订单项的集合,订单项又会关联一个产品(物料),我们尽量少的字段,只保留一些有代表性的,日期,金额,枚举类型的字段。同样的,我们在这里也没有设计业务方法,先不管这些(这并不合理),我们在这个时候也可以把我们的数据库建立起来了(可以通过EA 来生成脚本):
接下来,我们必须要做一个选择,那就是CSLA.Net的数据访问使用什么实现,之前的版本一般都是使用存储过程,Sql语句,还有的使用开源的ORM,比如NHibernate等,现在使用Linq的比较多,不过个人认为Linq to Sql或者EF和CSLA.Net还是有重叠的部分,使用时就会涉及到Linq的对象与CSLA业务对象属性的映射的问题,(不过即使你使用存储过程,你也要处理DataSet或者DataReader与你的对象的转换).我们同样也使用Linq To Sql来实现数据门户, 在这个例子中我们并不打算象官方Demo那样使用存储过程来实现业务逻辑,而是都由Linq to Sql来实现.
先建立起我们的Linq项目CSLADemo.DalLinq,在这里需要进行一下设置,工具--选项--数据库工具--O/R Designer--名称的复数形式设置为True.然后拖动我们的三个表,并根据我们的模型建立他们之间的关联关系,当然,你也可以在数据库表中建立外键,那样的拖动的话这样的关系就会自动生成。
注意我们Order与OrderLine之间,是一对多关系,双向生成属性,OrderLine与Product之间一对多,Product不需要生成属性。
我们说一下Linq的一些题外话,其实Linq这个设计器就是比较典型的DSL+T4的例子,dbml文件主要是描述元数据文件,CSLADemo.designer.cs文件就是T4模板结合元数据生成的目标代码,我们甚至可以控制这个步骤,通过自己的模板文件,将目标代码生成的单独的类里面,而不是象现在这样,将所有的代码都生成都一个类里,不过这在我们这个例子里是没有必要的,因为我们并不打算去扩展linq to sql生成的代码,而只是简单的使用就足够了。
另外还有一点需要提的就是,在这里建立的对象与对象的关系其实也是很关键的,在后面我们可以看到,我们在CSLA对象中其实是利用这些关系来加载相关联的对象,也就是通过Linq对象来实现的。
到现在为止我们还没有介绍直接与CSLA相关的东西,不过我们已经完成了整个环境的准备,以及数据访问的完成,下一节我们来介绍CSLA的具体使用.
http://www.cnblogs.com/lonely7345/archive/2010/02/03/1662776.html
- 和我一起学CSLA.NET----设计模型及数据访问
- 和我一起学CSLA.NET----创建业务对象1
- 和我一起学CSLA.NET----创建业务对象2
- 和我一起学CSLA.NET----创建业务对象3
- 跟我一起学C# 设计模式
- 跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])
- 跟我一起学extjs5(38--单个模块的设计[6取得模块列表数据])
- 跟我一起学extjs5(39--单个模块的设计[7数据的增加修改删除])
- 跟我一起学python第二讲 开发工具Jupyter Notebook安装和远程访问设置
- 和我一起学Android.mk
- 和我一起学 Selenium WebDriver
- 和我一起学批处理(2)
- 大学物理 我和你一起学 纲领
- 跟我一起学extjs5(33--单个模块的设计[1建立表和bean])
- 和我一起学Windows Workflow Foundation(2)-----让WF通过参数接收数据
- CSLA.NET
- 跟我一起学extjs5(11--自定义模块的设计)
- 跟我一起学extjs5(35--单个模块的设计[3根据类的标注自动生成数据])
- Nutch“java.lang.NoClassDefFoundError:”问题解决
- nutch "Job failed!" 问题解决
- 如何用QUnit来测试JavaScript代码
- Oracle 10g Auto Trace安装
- PB得到本机的名称和IP地址MAC地址
- 和我一起学CSLA.NET----设计模型及数据访问
- 随机不重复序列的产生
- HQL的嵌套子查询
- 使用Java操作文本文件的方法详解
- Shaders for Game Programmers and Artists代码实现Chapter_0504
- 如何判断Windows自动更新是否开启
- sql server profiler 的简介
- Linux Kernel Interrupts, Exceptions and System Calls
- UBUNTU下安装 APACHE+PHP+MYSQL文本服务器