现在的项目用了简单的三层结构,继续学习ing......
解决方案 »
- 求助一个问题 另外散分一帖
- 很抱歉没分了,关于VS2005取控件问题,解决马上结贴
- 一个SqlDataSource,一个gridview,怎么实现数据插入,更新时的数据库验证?
- 怎样获取纯资源DLL中的资源??
- 极度郁闷,jmail发邮件发送失败,直接返回false。分数是浮云,解决了问题,想要多少送多少
- 网站导航图片的切换
- [馨郁星愿] 关于web套打?
- 删除数据
- 表单中有很多项,如何验证??
- 配置Asp.Net应用程序-CustomErros
- 读取域名,十分感激!!!!!
- 一个 user_city.ascx 用户控件,其中一个 dropdownlist1,当不同的aspx 页调用这个用户控件时,有的需要dropdownlist1的 RequiredFieldVa
如WebForm.aspx是个View WebForm.aspx.cs是个Control,而Module就有业务层的组件实现
商业逻辑层
存放各种业务组件,这里很有弹性,以后再说,因为如果是N层
这里面有很多,如业务外观、业务实体,业务规则,还有数据访问组件,数据库
不用说了吧,Sqlserver MySql都可以实现
Microsoft的文章,www.only4gurus.com上有, and much more...
:-)
例如:(跟公司上上下下说了无数遍的事列)
你有个一个用户,一个地区,一个部门,三个数据表,他们互相的组合可以得到你需要的
信息。你现在需要得到,一个用户类,你可以通过 “用户.部门”得到部门对象,而通过"用户.部门.office[2]“得到那个部门第三个科室的对象。那么这个类就是一个业务外观拉业务外观就是你在WebForm.aspx.cs文件想操作的对象啦!
拉!
如果你想增加一个用户,你操作的想当然是个对象啦,只要在WebForm.aspx.cs 方法就可以啦
如:
UserManage manage=new UserManage(ConnectionString)//UserManage是个业务规则组件
///建立新用户
User newUser=new User(loginid.text,.....);
newUser.Department=new Depatrent(Information.......
newUser.Location=new Location(......);
///然后增加
manager.Add(newUser)
//增加完成拉
做Asp.net页面的人,不用理会怎样实现,Sql怎样写,数据库是什么,只要接口没有写错就可以啦
它通过CreateCustomer(String,byte[],string,string....)那个增加一个Customer
我那个和他的不同是,我用类去维护接口,而Duwamish用字段维护,
用类去维护好处是,如过字段一旦改变(增加OR减少),只需要维护
业务对象类,和Add方法就可以拉,而不需要维护调用的地方(如果有100个,那你
得一个一个改!)
http://www.microsoft.com/china/community/Column/93.mspx
上面是我的个人意见如有不妥请大家一起讨论。
维护曾本的方法,而且可以用增加同意,这个,但是,一般公开到Aspx.cs文件中使用的都是业务外观,所以
我觉得 业务外观,业务规则,业务实体,也是把商业逻辑造成MVC。是他们更好管理我比较反对SQL在逻辑层出现,因为这些SQL很难管理(但是很容易写)
(但是对于复杂查询保留意见,没有任何EntityClass能完美解决这个问题)
我认为增加DAL(Data Access Layer)更好解决这个统一的问题,而我现在使用Grove也可以
解决这个问题,张雪峰的 实战 .Net 数据访问层_1.2 里面提到的方法也很好而接口定义的问题,我很同意这个,因为接口就是标准,继承接口,就是实现了相应的逻辑上面是我的个人意见如有不妥请大家一起讨论(借来用用)
n个业务实体(n>=1) 通过 业务规则,生成业务外观(可能是DataSet DataReader,业务对象集或单个业务对象),那么他们就是一个MVC架构,
而业务实体是通过DAL层得到数据的,大部分的业务实体是一个业务实体对应一个数据表(好像是petshop的方法),数据实体是商业逻辑与DAL之间的交互载体,而业务外观是UI(user interface)与商业逻辑层的交互载体怎样去实现是:我觉得是我们应该讨论的话题
不是所有的项目都要用接口,也不是所有的项目都要实体
----------------------------------------------------------------------------------
我觉得
只要你是做n层,所有的业务对象,都要实现实体(duwamish7是DataSet,petshop是Arraylist),
接口是标准,实现接口是统一业务逻辑,当然有例外,例如没有标准的时候
也就是只不过他们是实现n层的架构的不同方法。
在DAL中 一个把数据表看作对象,一个把数据表看作数据字段,他们要求的都是要
实现DAL中,业务与数据库存储无关。
而我更喜欢PetShop的实现方法,因为可以在建模时,不考虑数据库。 这个很重要,
因为我觉得我们做开发的,很容易变成面向数据库开发,
一旦作系统分析,我们就很容易想到
哈!这个用个Select 那里用个Update那不就行了嘛!
(以前一位前辈对我说:数据库只是保存对象状态的众多工具中的一个。)
但是数据库只是保存数据,但不能保存我们的商业对象(我这里指的是商业对象包含的概念)
如果商业逻辑有Sql ,维护时候,你只看到数据库那数据,但不知道那些数据是拿来干什么的,数据是属于那个现实中的对象的。如果代码能反映程序的逻辑,不是很好吗?
而petshop较好(但不是最好)解决这个问题,应为他真的把数据库当作保存对象状态的
一个容器。但是由于,数据库是关系数据库,正如上面所说,office里面有多个User,department里面又包括多个office, 一个Company里面又有多个department,这样的关系,那么我想得到
一个User属于那个地区的,我作为User Interface的开发人员,我就想 User user=UserManager1.Search(Loginid)//一个通过登陆名得到User对象方法
string LocaionName=User.office.department.Location.Name;//这样很直观阿
但是在业务规则就要不能像Sql那样写个多表关联的SqL去得到那个对象,你必须
向office 的业务实体得到office的属性(用外键关联),office实体向deptment实体要求得到 deptment对象,deptment又要向location得到到对象。性能肯定比Sql多表关联低得多
而且我们在页面上DataBind以上所有字段,你能走得通吗!所以在Java对数据库写的时候用EntityClass (CMP),而读的时候用 DAO.然后通过商业规则组装这些对象或data;而Grove,(.net中的一个ORM类),就集成了CMP的读写方法,和提供一个建立关联表查询的工具,这个工具生成后是个关联类,用起来也是个对象。我现在就用它,看看《程序员》
有它的介绍。
外观的数据集(DataSet) 对象集(很多User对象),单个对象,怎样互相转换.
你们有什么好方法
先假定定义了实体:用户,公司,部门,。
这样的实体有什么用呢? 我取用户数据的时候经常要把此用户的公司,部门信息取出来,那你不得不把用户实体填充,把用户所属公司的实体填充,用户所属部门的信息填充。麻烦!
不如简单地从数据访问层把数据库的数据用DATATALBE返回,不过要在注释中写明到底返回了哪些字段。我个人认为在数据管理(数据插入,修改)系统中用到实体才合算。
是地是地,你说得很对,我现在在写的东西就是UserInfo,DepartmentInfo...什么的定义了N多,经常定义类似这样的结构:
DepartmentInfo
{
UserInfo manager;
}结果察看部门列表的时候,记录少还行,记录多狂慢,最慢的一个查6000条记录的时候要4秒多,很不理想,后来考虑能不能在返回查询结果的时候就人为的分页,加快查询速度,费劲阿
大家可以去http://expert.csdn.net/Expert/topic/3065/3065726.xml?temp=.3605463这几天问题不断...
如果需要复杂查询,我会使用存储过程,然后建立Users:DataSet,把它填充,里面实现两个方法,RowToUser(DataRow)和UserToRow(User),因为这样。把Row变成多层类的User对象
而UserToRow是个private,只有当你输入 Add(User newUser)就会把多层次的类拆开成为
字段,然后可以使用DataAdapter实现保存。
但是,一般我不会直接使用DataAdapter,因为
我处理的数据,都不会直接使用DataGrid或直接使用DataSet修改.所以所有的更新,我都不会使用 DataAdapter实现保存,因为DataAdapter很难实现快速开发,而且,面对4个Sql之间"@变量"
对应多个列,很容易出错.虽然可以使用导航界面生成,但是不会很灵活,因为你显示的包括多个表间的各种数据。所以综合来说,查询使用存储过程,更新还是使用实体,DataSet也好,DataReader也好,对于我来说只是实现显示的方法。
“要实现什么”。所以写出容易了解的代码,是一个中级程序员的基本要求。
所以一直强调重构的几位大师,都要求,do one thing and do it well,
有时间应该看看重构那本书,虽然里面的代码都是java,但是很好了解